CSS селектор в Selenium
⚡ Умно обобщение
CSS селектор в Selenium е мощна стратегия за локализиране, която идентифицира елементи, използвайки HTML тагове, идентификатори, класове, атрибути и шаблони за вътрешен текст. Този ресурс обяснява всеки тип CSS селектор с подробни примери за Selenium SDI.
Какво е CSS селектор в Selenium?
A CSS селектор в Selenium е низов шаблон, който идентифицира уеб елемент чрез комбинация от HTML таг, идентификатор, клас и атрибути. CSS селекторите са малко по-сложни от локализирането по идентификатор или име, но са най-популярната стратегия сред опитните. Selenium потребители, защото те могат да достигнат до елементи, които изобщо нямат атрибут ID или Name.
CSS селектори в Selenium се предлагат в много форми, но това ръководство се фокусира върху петте най-често срещани модела, използвани в Selenium SDI:
- Етикет и ID
- Етикет и клас
- Етикет и атрибут
- Етикет, клас и атрибут
- Вътрешен текст
Когато използвате тази стратегия в Selenium IDE, винаги поставяйте префикса Target кутия с „css=„както е показано във всеки пример по-долу.“
Защо да използваме CSS селектори в Selenium?
CSS селекторите са предпочитаната стратегия за локализиране за много хора. Selenium инженери по автоматизация, защото те балансират скорост, гъвкавост и четимост. Съвременните уеб приложения често използват динамично генерирани идентификатори или премахват изцяло атрибутите на имена, оставяйки CSS селекторите като единствения надежден начин за насочване към конкретен елемент на страницата.
Основните предимства на използването на CSS селектори включват:
- Изпълнение: CSS селекторите се обработват от вградения енджин на браузъра, така че се изпълняват по-бързо от еквивалентните XPath изрази, особено в по-стари браузъри като Internet Explorer.
- гъвкавост: Те комбинират логика на етикети, класове, атрибути и частично съвпадение, което позволява на тестерите да се насочват към елементи, които нямат стабилен идентификатор.
- Точност: Синтаксисът отразява начина, по който разработчиците вече пишат CSS правила, което скъсява кривата на обучение както за QA инженерите, така и за front-end екипите.
- Кросбраузърна стабилност: CSS селекторите се държат еднакво в Chrome, Firefox, Edge и Safari, намалявайки нестабилните неуспехи при тестове.
Таг и идентификатор – CSS селектор
Този пример използва текстовото поле „Имейл“ на страницата за вход във Facebook. Елементът има идентификатор „електронна поща„, и вече е бил достъпен в раздела „Локализиране по ID“. Сега същият елемент е насочен с помощта на Selenium CSS селектор с атрибута ID.
Синтаксис
css=tag#id
- етикет = HTML етикетът на елемента, до който се осъществява достъп
- # = знакът „диез“, който винаги трябва да присъства при използване на Selenium CSS селектор с ID
- id = ID на елемента, до който се осъществява достъп
Имайте предвид, че идентификационният номер винаги се предшества от знак за решетка (#).
Стъпка 1) Отидете до www.facebook.comИзползвайки DevTools на вашия браузър (или друг инструмент, като Firebug), проверете текстовото поле „Имейл или телефон“.
Обърнете внимание, че HTML тагът е „вход„и неговият идентификатор е „електронна поща„. Следователно пълният CSS селектор става „css=въвеждане#имейл".
Стъпка 2) Въведете „css=въвеждане#имейл" в Target кутия от Selenium IDE и щракнете върху бутона Намери. Selenium IDE маркира съответстващия елемент на страницата.
Таг и клас – CSS селектор
CSS селектор в Selenium който използва HTML етикет и име на клас, следва същата идея като етикет и идентификатор, но точка (.) замества знака за диез.
Синтаксис
css=tag.class
- етикет = HTML етикетът на елемента, до който се осъществява достъп
- . = знакът за точка, който винаги трябва да присъства, когато се използва CSS селектор с клас
- class = класът на елемента, до който се осъществява достъп
Стъпка 1) Отворете демонстрационната страница https://demo.guru99.com/test/facebook.html и проверете текстовото поле „Имейл или телефон“. Обърнете внимание, че HTML тагът е „вход„и неговият клас е „въведен текст".
Стъпка 2) In Selenium IDE, въведете „css=input.inputtext"В Target и щракнете върху Намери. Selenium IDE разпознава текстовото поле „Имейл“ или „Телефон“.
Обърнете внимание, че когато множество елементи споделят един и същ HTML таг и клас, се разпознава само първият съответстващ елемент в изходния код. Проверете текстовото поле „Парола“ на същата страница и обърнете внимание, че то е от същия клас като текстовото поле „Имейл“ или „Телефон“.
В предишната илюстрация беше маркирано само текстовото поле „Имейл“ или „Телефон“, защото то се появява първо в изходния код на страницата.
Таг и атрибут – CSS селектор
Тази стратегия комбинира HTML таг със специфичен атрибут, принадлежащ на елемента, до който искате да получите достъп.
Синтаксис
css=tag[attribute=value]
- етикет = HTML етикетът на елемента, до който се осъществява достъп
- [ и ] = квадратни скоби, които обгръщат атрибута и съответстващата му стойност
- атрибут = атрибутът, който ще се използва. Изберете такъв, който е уникален за елемента, като например име или идентификатор.
- стойност = съответната стойност на избрания атрибут.
Стъпка 1) Придвижете се до Mercury Страница за регистрация на турове https://demo.guru99.com/test/newtours/register.php и проверете текстовото поле „Фамилия“. Обърнете внимание на HTML етикета му („input“) и атрибута му name („lastName“).
Стъпка 2) In Selenium IDE, въведете „css=вход[име=фамилия]"В Target и щракнете върху Намери. Selenium IDE успешно намира полето „Фамилия“.
Когато множество елементи споделят един и същ HTML таг и атрибут, само първият се разпознава. Поведението е идентично с намирането на елементи със същия етикет и клас.
Таг, клас и атрибут – CSS селектор
Синтаксис
css=tag.class[attribute=value]
- етикет = HTML етикетът на елемента, до който се осъществява достъп
- . = знакът за точка, който винаги трябва да присъства, когато се използва CSS селектор с клас
- class = класът на елемента, до който се осъществява достъп
- [ и ] = квадратни скоби, които обгръщат специфичен атрибут и съответстващата му стойност
- атрибут = атрибутът, който ще се използва. Изберете такъв, който е уникален за елемента, като например име или идентификатор.
- стойност = съответната стойност на избрания атрибут.
Стъпка 1) Отворете демонстрационната страница https://demo.guru99.com/test/facebook.html и проверете полетата за въвеждане „Имейл или телефон“ и „Парола“. Обърнете внимание на техния HTML таг, клас и атрибути. Този пример използва „tabindexатрибут „“.
Стъпка 2) Първо отворете текстовото поле „Имейл или телефон“, като използвате стойност на tabindex от 1. Въведете „css=input.inputtext[tabindex=1]”В Selenium IDE Target полето и щракнете върху „Намери“. Полето „Имейл“ или „Телефон“ е маркирано.
Стъпка 3) За да насочите полето за въвеждане на парола, просто заменете стойността на tabindex. Въведете „css=input.inputtext[tabindex=2]"В Target и щракнете върху Намери. Selenium IDE успешно намира текстовото поле за парола.
Вътрешен текст – CSS селектор
HTML етикетите рядко получават атрибути id, name или class. И така, как да получите достъп до тях в SeleniumОтговорът се крие във вътрешния им текст. Вътрешните текстове са действителните низови модели, които HTML етикетът показва на страницата.
Синтаксис
css=tag:contains("inner text")
- етикет = HTML етикетът на елемента, до който се осъществява достъп
- вътрешен текст = видимото текстово съдържание на елемента
Стъпка 1) Придвижете се до Mercury Начална страница на Tours https://demo.guru99.com/test/newtours/ и проверете етикета „Password“. Обърнете внимание на HTML етикета му („font“ в този случай) и наблюдавайте, че елементът няма атрибути class, id или name.
Стъпка 2) Тип css=font:contains(“Парола:”) в Selenium IDE Target и щракнете върху Намери. Selenium IDE намира етикета за парола, както е показано по-долу.
Стъпка 3) Този път заменете вътрешния текст с „Бостън“, така че Target става „css=font:contains(„Бостън“)„. Кликнете върху „Намери“. Етикетът „Бостън до Сан Франциско“ е маркиран, което показва, че Selenium IDE може да намери дълъг етикет, дори когато е предоставена само първата дума от вътрешния му текст.
CSS селектор срещу XPath в Selenium
Както CSS селекторите, така и XPath се използват за идентифициране на уеб елементи в Selenium, но те имат различни силни страни. Таблицата по-долу сравнява двете стратегии за локализиране по ключови измерения:
| Критерии | CSS селектор | XPath |
|---|---|---|
| Скорост | По-бърз, работи на родния енджин на браузъра | По-бавно, особено в по-стари браузъри |
| Посока | Само пренасочване (от родител към дете) | Напред и назад (от дете към родител) |
| Синтаксис | По-кратки и подобни на CSS правилата | По-дълги, йерархични изрази за пътища |
| Текстово съвпадение | Ограничено до псевдоклас :contains() | Функции Strong text() и contains() |
| Най - доброто за | Статични оформления и модерни уеб приложения | Сложно DOM обхождане и текстово-базирани локатори |
Най-добри практики за писане на CSS селектори в Selenium
Писането на надеждни CSS селектори е нещо повече от познаването на синтаксиса. Следните практики помагат на тестерите да създават стабилни, лесни за поддръжка Selenium скриптове, които оцеляват промените в потребителския интерфейс:
- Предпочитайте уникални атрибути: Винаги избирайте атрибутите id, data-test-id или name, които са изрично добавени за автоматизация. Те остават стабилни дори когато визуалното оформление се промени.
- Избягвайте прекалено вложени селектори: Дълги вериги, като например
div > div > ul > li > aлесно се чупят, когато разработчиците рефакторират маркировката. Поддържайте селекторите възможно най-кратки. - Използвайте частични съвпадения разумно: Модели като например
[class*="btn-primary"]толерират малки промени в имената на класовете, но те могат да съвпадат и с нежелани елементи. - Избягвайте локатори, базирани на индекси: Селектори като
nth-child(3)са крехки, защото добавянето на братски елемент измества всяка позиция. - Валидиране на селектори в DevTools: Преди стартиране на a Selenium скрипт, поставете селектора в конзолата на Chrome DevTools, като използвате
document.querySelector()за да потвърди, че връща точно един елемент. - Комбинирайте атрибути за уникалност: Когато даден клас се споделя от много елементи, добавете филтър за атрибути, като например
input.form-control[name="email"]за да се изясни целта. - Документиране и повторна употреба: Централизирайте селекторите в клас Page Object, така че една актуализация да поправя всеки тест, който препраща към един и същ елемент.
Спазването на тези указания намалява нестабилността, подобрява скоростта на изпълнение на тестовете и прави Selenium апартаментите са по-лесни за поддръжка с течение на времето.
Резюме: Бърз справочник за синтаксиса на CSS селекторите
Таблицата по-долу обединява всички Selenium Шаблон за CSS селектор, разгледан в това ръководство:
| Начин на доставка | Target Синтаксис | Пример |
|---|---|---|
| Етикет и ID | css=tag#id | css=въвеждане#имейл |
| Етикет и клас | css=tag.class | css=input.inputtext |
| Етикет и атрибут | css=tag[атрибут=стойност] | css=вход[име=фамилия] |
| Етикет, клас и атрибут | css=tag.class[атрибут=стойност] | css=input.inputtext[tabindex=1] |
| Вътрешен текст | css=tag:contains(„текст“) | css=font:contains(“Парола:”) |















