Локаторы CSS являются одним из самых мощных и гибких инструментов для поиска элементов на веб-странице. Их преимущество в том, что они позволяют выбирать элементы по тегам, классам, идентификаторам, атрибутам, состояниям и иерархии DOM, что обеспечивает высокую точность и удобство при автоматизации тестирования.
CSS-селекторы состоят из паттернов, которые описывают, какие элементы нужно выбрать. В WebdriverIO они используются внутри команд поиска элементов:
const element = await $('css-селектор');
const elements = await $$('css-селектор');
$('selector') — возвращает первый найденный
элемент.$$('selector') — возвращает массив всех элементов,
соответствующих селектору.Выбор элемента по ID — самый быстрый и точный способ. Используется
символ #.
const submitButton = await $('#submit');
await submitButton.click();
В этом примере ищется элемент с id="submit".
Для выбора по классу используется точка .. Можно
объединять несколько классов:
const activeItems = await $('.item.active');
Это выберет элемент с классами item и
active.
Можно выбрать все элементы определённого типа:
const allButtons = await $$('button');
Такой подход полезен для групповых проверок или динамических элементов.
Позволяют искать элементы по любому атрибуту, например
name, type, data-*.
const emailField = await $('[name="email"]');
const firstInput = await $('input[type="text"]');
const customData = await $('[data-id="12345"]');
Ключевые варианты атрибутных селекторов:
[attr="value"] — точное совпадение;[attr^="value"] — начинается с;[attr$="value"] — заканчивается на;[attr*="value"] — содержит.CSS позволяет строить сложные цепочки, указывая иерархию или соседство элементов.
>)const child = await $('div > span');
Выбирает только span, который является
непосредственным потомком div.
const descendant = await $('div span');
Выбирает span внутри div на любой
глубине.
+)const next = await $('h2 + p');
Выбирает первый p, который идет сразу
после h2.
~)const allNext = await $('h2 ~ p');
Выбирает все p, которые идут после h2 на
одном уровне.
CSS поддерживает динамическое состояние элементов через псевдоклассы.
:first-child, :last-child,
:nth-child(n) — выбор по позиции внутри родителя.:not(selector) — исключение элементов.:hover, :checked, :disabled —
состояние элемента.Примеры:
const firstItem = await $('li:first-child');
const thirdButton = await $('button:nth-child(3)');
const enabledInput = await $('input:not([disabled])');
В WebdriverIO селекторы CSS можно сочетать с командами для ожиданий, взаимодействий и проверки состояния элементов.
const loginButton = await $('#login');
await loginButton.waitForClickable({ timeout: 5000 });
await loginButton.click();
const errorMessage = await $('.error');
await errorMessage.waitForDisplayed({ timeout: 3000 });
const text = await errorMessage.getText();
Здесь CSS-селектор является основой поиска, а WebdriverIO обеспечивает управление состоянием и действия над элементом.
Эффективное применение CSS-селекторов позволяет создавать надёжные, быстрые и поддерживаемые тесты, способные работать с любыми современными веб-приложениями.