WebdriverIO предоставляет мощные инструменты для взаимодействия с элементами веб-страницы. Основные методы поиска делятся на две категории: для одного элемента и для нескольких элементов. Понимание их различий критично для построения надежных и читаемых тестов.
Метод $(selector) используется для нахождения
первого соответствующего элемента на странице. Он
возвращает объект типа WebdriverIO.Element, с которым можно
работать напрямую.
Синтаксис:
const element = $(selector);
Примеры селекторов:
const button = $('button.submit'); // первый элемент с классом submit внутри тега button
const input = $('#username'); // элемент с id=username
const field = $('.form-input'); // первый элемент с классом form-input
const link = $('//a[text()="Home"]'); // первый элемент <a> с текстом Home
Основные методы для найденного элемента:
click() — клик по элементу.setValue(value) — установка текста в поле ввода.getText() — получение текста элемента.isDisplayed() — проверка видимости элемента.const input = $('#username');
input.setValue('admin');
const button = $('button.submit');
button.click();
Важно: Если элемент не найден,
$(selector) по умолчанию не выбросит исключение, но
дальнейшие действия с WebdriverIO.Element могут вызвать
ошибки. Чтобы ожидать появления элемента, используют
waitForExist или waitForDisplayed:
const button = $('button.submit');
button.waitForDisplayed({ timeout: 5000 });
button.click();
Метод $$(selector) возвращает массив всех
элементов, соответствующих селектору. Тип возвращаемого
значения — Array<WebdriverIO.Element>.
Синтаксис:
const elements = $$(selector);
Примеры:
const rows = $$('table tr'); // все строки таблицы
const links = $$('a'); // все ссылки на странице
Работа с массивом элементов:
for, forEach, map для
перебора.elements[0].const buttons = $$('button');
buttons.forEach(button => {
if (button.getText() === 'Delete') {
button.click();
}
});
Методы ожидания с несколькими элементами:
WebdriverIO поддерживает ожидания для каждого элемента массива, но не для самого массива напрямую. Для этого применяют:
const items = $$('ul li');
items.forEach(item => item.waitForDisplayed({ timeout: 3000 }));
| Метод | Возвращаемый тип | Поведение при отсутствии элемента |
|---|---|---|
$ |
WebdriverIO.Element |
Возвращает “пустой” объект, ошибки при последующих действиях |
$$ |
Array<WebdriverIO.Element> |
Возвращает пустой массив, безопасно перебирать |
Ключевое отличие — $ используется для
единственного элемента, а $$ — для
коллекции элементов, что особенно важно для
динамических списков или таблиц.
[attribute="value"].const menuItem = $('ul.menu li[data-id="settings"]');
filter,
find:const activeItems = $$('ul.menu li').filter(item => item.getAttribute('class').includes('active'));
WebdriverIO поддерживает асинхронный режим, где
методы поиска возвращают промисы. Важно использовать await
при работе с элементами:
const button = await $('button.submit');
await button.waitForClickable({ timeout: 5000 });
await button.click();
С массивами элементов:
const items = await $$('ul li');
for (const item of items) {
if ((await item.getText()) === 'Logout') {
await item.click();
break;
}
}
$, чтобы минимизировать вероятность ошибок.$$ и фильтры,
чем полагаться на порядок элементов.waitForExist
или waitForDisplayed.Методы $ и $$ составляют основу
взаимодействия с DOM в WebdriverIO, и грамотное их использование
обеспечивает стабильность и читаемость тестов, облегчая
поддержку автоматизации в крупных проектах.