В автоматизированном тестировании веб-приложений ожидание
элементов играет ключевую роль. Некорректное обращение к
элементу до его появления на странице приводит к нестабильности тестов и
ошибкам типа element not interactable или
stale element reference. WebdriverIO предоставляет гибкие
инструменты для управления видимостью и доступностью элементов.
WebdriverIO делит ожидания на два типа: явные и неявные.
browser.setTimeout({ implicit: 5000 }); // ждем до 5 секунд
const button = $('#submit');
button.click(); // WebdriverIO подождет появления элемента до 5 секунд
Особенности:
waitForDisplayed({ timeout, reverse, timeoutMsg }) –
ожидает, что элемент станет видимым.waitForEnabled({ timeout }) – ожидает, что элемент
станет доступным для взаимодействия.waitForExist({ timeout }) – ожидает появления элемента
в DOM.Пример ожидания видимости кнопки:
const button = $('#submit');
button.waitForDisplayed({ timeout: 7000, timeoutMsg: 'Кнопка не появилась на странице' });
button.click();
Параметры:
timeout – максимальное время ожидания (в
миллисекундах).reverse – если true, метод ждёт, пока
элемент не будет видимым.timeoutMsg – сообщение об ошибке, которое будет
выброшено при превышении таймаута.WebdriverIO позволяет не только ждать видимость, но и проверять состояние элемента без остановки выполнения через условные методы:
if ($('#submit').isDisplayed()) {
$('#submit').click();
}
Отличие от waitForDisplayed:
isDisplayed() возвращает true или
false мгновенно.const modal = $('#modal-window');
modal.waitForDisplayed({ timeout: 10000 });
modal.$('.close-button').click();
const submitBtn = $('#submit');
submitBtn.waitForDisplayed({ timeout: 5000 });
submitBtn.waitForEnabled({ timeout: 5000 });
submitBtn.click();
display: none,
visibility: hidden). Используется
waitForDisplayed:const tooltip = $('#tooltip');
tooltip.waitForDisplayed({ timeout: 3000 });
expect(tooltip.isDisplayed()).toBe(true);
const input = $('#username');
input.waitForDisplayed({ timeout: 5000 }).waitForEnabled({ timeout: 5000 });
input.setValue('testuser');
waitUntil с кастомной
функцией:browser.waitUntil(
() => $('#item-list').$$('.item').length > 0,
{
timeout: 8000,
timeoutMsg: 'Список элементов не загрузился'
}
);
waitForDisplayed от waitForExistwaitForExist проверяет только наличие элемента в DOM,
не учитывая его видимость.waitForDisplayed гарантирует, что элемент видим
пользователю, и с ним можно взаимодействовать.$('#hidden-element').waitForExist({ timeout: 5000 }); // элемент в DOM, но может быть скрыт
$('#hidden-element').waitForDisplayed({ timeout: 5000 }); // элемент должен быть видимым
Использование waitForDisplayed повышает стабильность
тестов, особенно при динамических интерфейсах.
WebdriverIO позволяет проверять видимость элементов в рамках тестовых утверждений:
const notification = $('#notification');
notification.waitForDisplayed({ timeout: 5000 });
expect(notification).toBeDisplayed();
Цепочка ожидания и проверки исключает состояние гонки, когда тест пытается проверить элемент до его появления.
waitForDisplayed с методами
$ и $$ обеспечивает точное управление
элементами в DOM.$('#menu').waitForDisplayed({ timeout: 4000 }).click();
Ожидание видимости элемента является фундаментальной практикой для стабильного и предсказуемого тестирования интерфейсов. Комбинация явных ожиданий, проверки состояний элементов и интеграции с ассерциями формирует надежную основу автоматизации с WebdriverIO.