Селекторы CSS в Selenium используются для идентификации желаемого пользователем веб-элемента HTML. Это вписывается в стратегию локаторов элементов автоматизированной разработки тестов, где основной целью является взаимодействие с элементами страницы с помощью различных типов локаторов. Хотя существует несколько других методов определения локатора элемента, таких как идентификатор, имя, имя класса, текст ссылки, частичный текст ссылки, XPath, имя тега и т. д., кроме селекторов CSS в Selenium, мы предпочитаем способ CSS из-за следующих преимуществ.

Новичок в CSS-селекторах? Ознакомьтесь с этой Шпаргалкой Ultimate CSS Selector, чтобы повысить свою карьеру веб-дизайнера.

Если вы новичок в Selenium и вам интересно, что это такое, мы рекомендуем ознакомиться с нашим руководством — Что такое Selenium?

Кроме того, попробуйте эту онлайн-сеть Selenium Grid для запуска сценариев автоматического тестирования браузера: https://www.lambdatest.com/selenium-automation

Зачем выбирать селекторы CSS в Selenium, а не другие идентификаторы элементов?

  1. Более быстрая идентификация и сокращенное время выполнения теста. По сравнению с XPath CSS-селекторы в Selenium, как правило, лучше идентифицируют элементы, поскольку большинство используемых браузеров, таких как Chrome и Firefox, настроены на лучшую производительность с CSS-селекторами в Selenium. Вот ссылка, которая предоставляет статистику производительности для справки.
  2. Наличие лучшей документации.
  3. Улучшенная читаемость.

Различные способы идентификации селекторов CSS в Selenium

Давайте обсудим различные способы идентификации CSS Selenium локаторов веб-элементов.

Загадка выбора класса

‘.’ представляет класс в CSS и используется для идентификации веб-элементов с определенным классом. Например, если наш веб-элемент p состоит из класса, указанного ниже. Следующее может быть связано с программированием XPath для идентификации класса с именем тега [@class = 'value'] или может также быть связано с локатором элемента имени класса в Selenium.

<p class=" pages-sub-title"> Lambda Test blog post on validating CSS Selectors in Selenium </p>

Селектор CSS в Selenium для того же самого может быть идентифицирован с именем класса как
“.page-sub-title”
Синтаксис CSS в Selenium селектора класса будет -
<.> < Class Name> (or)
<.>

Эта сертификация предназначена для всех, кто хочет оставаться впереди среди профессионалов, которые строят свою карьеру в области автоматизированного тестирования Selenium.

Вот краткий обзор сертификации Selenium 101 от LambdaTest:

Автоматизируйте тесты Cypress и выполняйте автоматизированное тестирование браузера с помощью LambdaTest. Наша облачная инфраструктура включает более 3000 настольных и мобильных сред: https://www.lambdatest.com/blog/cypress-test-automation-framework/

Загадка выбора идентификатора

«#» представляет идентификатор в CSS и используется для идентификации веб-элементов с определенным идентификатором. Ниже приведен пример сопоставления веб-элемента с идентификатором. Если вы наблюдаете это на высоком уровне, это можно сравнить с селектором имени идентификатора с использованием методов Selenium, а также с поиском элемента с идентификатором в программировании XPath, например, с именем тега [@id = ‘id_value’].

<li id="menu-item-143" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-143">
<a href="https://www.lambdatest.com/blog/category/lambdatest-updates/">Product Updates</a>
</li>

Селектор CSS в Selenium для того же самого может быть идентифицирован с именем класса как
#menu-item-143 или div#menu-item-143

Синтаксис CSS в Selenium для селектора ID будет –
<#> < ID Name> (or)
<#>

Загадка выбора атрибута

Атрибуты могут быть представлены парами ключ-значение, например, в приведенном ниже примере у нас есть несколько атрибутов и значений, таких как «роль = диалог», «данные-закрыть = модальный» и т. д. Версия программирования Xpath селектора атрибута может быть соотнесена с тегом имя [@attribute key = 'значение атрибута'].

<div class="modal fade" id="whitepaper-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
   <span class="close" data-dismiss="modal"  style="top: 4px; position: absolute; right: 10px;">
<span aria-hidden="true">×</span>
 </span>

Селектор CSS в Selenium для того же самого может быть идентифицирован с именем класса как
div[role=’dialog’] or [role=’dialog’]

«Класс или идентификатор» и загадка выбора атрибута

Комбинация класса или идентификатора и атрибута может служить лучшей стратегией, которая является более мощной, чем использование только селектора класса, идентификатора или атрибута. Чтобы добиться уникальности элемента, если вышеперечисленные 3 способа идентификации не работают из-за нескольких экземпляров одного и того же локатора, это может быть решением. Давайте возьмем стратегию поиска элементов для приведенного ниже примера из нашего блога LambdaTest.

<nav id="site navigation" class="navigation main-navigation" role="navigation">

В приведенном выше фрагменте HTML, если вы заметили, что в имени класса есть пробел, который является «navigation main-navigation», это может быть представлено как navigation.main-navigation space можно игнорировать и заменить на «.».

Селектор CSS в Selenium для того же можно определить, как показано ниже:

nav.navigation.main-navigation[role='navigation']

Синтаксис CSS в Selenium селектора класса или идентификатора и атрибута будет таким:

<HTML Tag> <Class Or ID> [ <attribute key> = ‘<attribute value>’ ]

or

<Class Or ID>  [ <attribute key> = ‘<attribute value>’ ]

Головоломка соответствия подстроки

Чтобы включить даже мощную технику запросов, мы можем использовать совпадения подстрок с указанным префиксом ^, суффиксом $ и *, указывающим подстроку. Если внимательно присмотреться, это похоже на представление функций XPath, таких как «начинается с», «содержит» и «заканчивается». Давайте подробно рассмотрим использование всех трех способов обращения со спичками.

^ Указание совпадения префикса

Синтаксис:

<HTML Tag> [ <Class Or ID> ^= <Class or ID Name> ]

Пример:

div[class^=’aria-label’]

$ Указывает совпадение суффикса

Синтаксис:

<HTML Tag> [ <Class Or ID> $= <Class or ID Name> ]

Пример:

a[class$=’aria-label’]

* Указание совпадения подстроки

Синтаксис:

<HTML Tag> [ <Class Or ID> *= <Class or ID Name> ]

Пример

p[class*=’aria-label’]

Загадка внутреннего текста:

Один из самых легко читаемых синтаксисов, но мощный. Вы можете использовать этот механизм для идентификации текста в любом месте DOM с помощью шаблона строки.

Синтаксис:

<HTML Tag> <:> <contains> < (text) >

Пример

div:contains("^lambdatest$")

«Навигация по дочерним элементам» — дочерняя головоломка:

Это расширенный способ обработки локаторов элементов через селекторы CSS в Selenium при навигации по дочерним элементам. Есть три возможности, как показано ниже:

  1. Прямой ребенок
  2. Дочерний ребенок
  3. N-й ребенок

Прямой ребенок

Прямой потомок к родительскому локатору представлен символом «›». Предположим, у нас есть тег кнопки внутри тега div, который является прямым дочерним элементом, как показано во фрагменте HTML ниже.

Пример:
<div class="lambdatest-xs-ng">
<button id="tertiary" class="sidebar-container" role="complementary">

div — родительский локатор, а кнопка — дочерний локатор, представленный как:
div.lambdatest-xs-ng>button
Синтаксис:
Parentlocator > directchildlocator

Дочерний ребенок или ребенок

Идентификация дочернего элемента включает в себя тот же способ идентификации элементов, что и для прямого дочернего элемента, но мы можем игнорировать символ «›» в качестве дочернего элемента, как показано в примере ниже.

Пример:

<div id="primary" class="content area">
<div id="content" class="site content" role="main">
<header class="archive header">
<h1 class="archive title">Category Archives : Infographics </h1>

Sub Child или child будут представлены как:

div#primary header

Синтаксис:

<parent locator=""> <child locator=""> or <sub child="" locator=""></sub></child></parent>

N-й дочерний элемент для выбора определенного значения из списка

Это расширенный способ обработки локаторов элементов через селекторы CSS в Selenium при навигации по дочерним элементам. Есть три возможности, как показано ниже:

  1. Прямой ребенок
  2. Дочерний ребенок
  3. N-й ребенок

Прямой ребенок

Прямой потомок к родительскому локатору представлен символом «›». Предположим, у нас есть тег кнопки внутри тега div, который является прямым дочерним элементом, как показано во фрагменте HTML ниже.

Пример:

<div class="lambdatest-xs-ng">
 <button id="tertiary" class="sidebar-container" role="complementary">

div — родительский локатор, а кнопка — дочерний локатор, представленный как:

div.lambdatest-xs-ng>button

Синтаксис:

Parentlocator &gt; directchildlocator

Дочерний ребенок или ребенок

Идентификация дочернего элемента включает в себя тот же способ идентификации элементов, что и для прямого дочернего элемента, но мы можем игнорировать символ «›» в качестве дочернего элемента, как показано в примере ниже.

Пример:

<div id="primary" class="content area">
 <div id="content" class="site content" role="main">
 <header class="archive header">
<h1 class="archive title">Category Archives : Infographics </h1>

Sub Child или child будут представлены как:

div#primary header

Синтаксис:

<Parent locator> <child locator> or <sub child locator>

N-й дочерний элемент для выбора определенного значения из списка

Концепция N-го потомка будет полезна при навигации по упорядоченным или неупорядоченным элементам списка. N становится номером желаемого списка, который пользователь хочет выбрать. Давайте рассмотрим пример ниже, чтобы понять, как работает n-й дочерний элемент. Я не

Пример:

<<ul id = "lambdaTestBrowsers">
<li>Chrome</li>
<li>Firefox</li>
<li>Edge</li>
<li>Safari</li>
</ul>

N-й дочерний элемент firefox из списка тестовых лямбда-браузеров будет представлен как:

#lambdaTestBrowsers li:nth-child(2)

Синтаксис:

<HTML Tag> <Clas or ID> <list> <:> <nth-child (number of desired item in the list)>

Используете ли вы Playwright для автоматизированного тестирования? Мгновенно запускайте тестовые сценарии Playwright в более чем 50 комбинациях браузера и ОС с помощью облака LambdaTest. Зарегистрируйтесь бесплатно: https://www.lambdatest.com/playwright-testing

Заключение

Мы столкнулись с различными стратегиями идентификации через вышеупомянутые загадки локатора элементов. Чтобы ознакомиться с селекторами CSS в Selenium, отправив запрос, вы можете использовать инструменты разработчика Chrome, а также есть инструмент с открытым исходным кодом для того же, чтобы попробовать и просмотреть результаты в более интерактивном режиме на http://flukeout.github.io/ . Мы также обсудили преимущества использования селекторов CSS в Selenium по сравнению с другими локаторами элементов. Один из основных недостатков селекторов CSS в Selenium заключается в том, что обход DOM невозможен с помощью CSS, как в XPath. Мы можем переходить от дочернего к родительскому и от родительского к дочернему, используя XPath. Но мы можем перемещаться от родителя к дочернему только с помощью селекторов CSS в Selenium. Если у вас есть какие-либо вопросы или предложения относительно селекторов CSS, оставьте комментарий ниже, и я буду рад пообщаться. Получайте удовольствие от поиска элементов с помощью селекторов CSS. Удачного тестирования!