В веб-тестировании взаимодействие с элементами формы, такими как чекбоксы и радиокнопки, является одной из базовых, но критически важных задач. WebdriverIO предоставляет удобные методы для работы с этими элементами, позволяя проверять их состояние, изменять его и выполнять ассерты.
Чекбокс — элемент формы, позволяющий пользователю выбрать один или несколько вариантов. Основные операции с чекбоксами включают проверку состояния и изменение его при необходимости.
Выбор чекбокса
Для установки флажка используется метод click():
const checkbox = await $('#subscribe');
await checkbox.click();
Если необходимо убедиться, что чекбокс установлен только если он ещё
не выбран, применяют метод isSelected():
if (!await checkbox.isSelected()) {
await checkbox.click();
}
Метод isSelected() возвращает булево значение
true или false, позволяя безопасно управлять
состоянием чекбокса без лишних кликов.
Снятие выбора
Снятие выбора чекбокса аналогично выбору, с проверкой текущего состояния:
if (await checkbox.isSelected()) {
await checkbox.click();
}
Такой подход предотвращает случайное переключение состояния и делает тесты более стабильными.
Ассерты для чекбоксов
WebdriverIO интегрируется с библиотеками для ассертов, например
expect-webdriverio:
await expect(checkbox).toBeSelected();
await expect(checkbox).not.toBeSelected();
Эти проверки позволяют убедиться, что состояние элемента соответствует ожиданиям.
Радиокнопка — элемент формы, позволяющий выбрать один вариант из группы. Для взаимодействия с радиокнопками применяются те же базовые методы, что и для чекбоксов, с учётом уникальности выбора.
Выбор радиокнопки
const radioOption = await $('input[name="gender"][value="male"]');
await radioOption.click();
При работе с группой радиокнопок рекомендуется проверять текущее состояние, чтобы не вызывать лишние клики:
if (!await radioOption.isSelected()) {
await radioOption.click();
}
Ассерты для радиокнопок
await expect(radioOption).toBeSelected();
const otherOption = await $('input[name="gender"][value="female"]');
await expect(otherOption).not.toBeSelected();
Это позволяет убедиться, что выбранный вариант соответствует требованиям теста, а другие опции остаются невыбранными.
Для массового управления элементами удобно использовать коллекции:
const checkboxes = await $$('input[type="checkbox"]');
for (const box of checkboxes) {
if (!await box.isSelected()) {
await box.click();
}
}
Аналогично для радиокнопок:
const radios = await $$('input[name="gender"]');
for (const radio of radios) {
const value = await radio.getAttribute('value');
if (value === 'female' && !await radio.isSelected()) {
await radio.click();
}
}
Использование массивов элементов упрощает обработку больших форм и делает код более читаемым.
Чекбоксы и радиокнопки могут изменять состояние динамически после действий пользователя или асинхронных событий. Для стабильных тестов применяются ожидания:
await checkbox.waitForClickable({ timeout: 5000 });
await checkbox.click();
await expect(checkbox).toBeSelected();
Методы waitForClickable, waitForEnabled и
waitForDisplayed позволяют дождаться готовности элемента
перед взаимодействием, что снижает вероятность ошибок из-за гонок
условий.
getAttribute('checked') — получение значения атрибута
checked, особенно полезно для проверки состояния на стороне
DOM.isEnabled() — проверка доступности элемента для
клика.scrollIntoView() — прокрутка к элементу, если он вне
видимой области страницы.Пример проверки и взаимодействия с недоступным чекбоксом:
const checkbox = await $('#terms');
if (await checkbox.isEnabled()) {
await checkbox.click();
}
Эффективное использование методов WebdriverIO для работы с чекбоксами и радиокнопками повышает стабильность автоматизированных тестов и снижает вероятность ложных срабатываний.