Неявные ожидания (Implicit Waits) представляют собой механизм, позволяющий WebdriverIO автоматически ожидать появления элементов на странице перед выполнением действий с ними. Это особенно важно в динамических веб-приложениях, где элементы могут загружаться асинхронно.
Неявное ожидание задается один раз для сессии браузера и применяется ко всем операциям поиска элементов. Если элемент не найден сразу, WebdriverIO будет повторно пытаться его найти до истечения установленного времени ожидания. Если элемент так и не появился, выбрасывается исключение.
Пример установки неявного ожидания:
browser.setTimeout({ implicit: 5000 }); // 5000 мс = 5 секунд
После этой настройки поиск любого элемента через команды
$('селектор') или $$('селектор') будет
пытаться найти элемент в течение 5 секунд.
Неявные ожидания работают только с поиском элементов. Команды,
зависящие от существования элемента (например, click(),
setValue()) не будут ждать появления элемента сверх
заданного времени. Если элемент найден, действие выполняется
немедленно.
const button = $('#submit');
button.click(); // Попытка клика сразу после нахождения элемента
Если элемент не существует, WebdriverIO будет пытаться его найти в
течение указанного таймаута. При его истечении будет выброшено
исключение NoSuchElementError.
Неявные ожидания не заменяют явные ожидания (waitUntil,
waitForDisplayed и т.д.), а скорее дополняют их.
Важно помнить, что использование неявных ожиданий
вместе с явными может приводить к непредсказуемому поведению, так как
таймауты суммируются при поиске элемента.
browser.setTimeout({ implicit: 5000 });
const dynamicElement = $('#dynamic');
dynamicElement.waitForDisplayed({ timeout: 3000 });
// WebdriverIO будет учитывать оба таймаута
В этом примере поиск элемента будет длиться до 5 секунд (неявное ожидание), а проверка его отображения — до 3 секунд (явное ожидание).
С версии 7 WebdriverIO управляет таймаутами через объект
timeouts. Основные параметры:
browser.setTimeout({
implicit: 5000, // Поиск элементов
pageLoad: 10000, // Загрузка страниц
script: 30000 // Выполнение скриптов
});
execute.describe('Тестирование формы входа', () => {
before(() => {
browser.url('https://example.com/login');
browser.setTimeout({ implicit: 5000 });
});
it('Должен дождаться появления поля ввода', () => {
const usernameInput = $('#username');
usernameInput.setValue('testuser'); // Ожидание до 5 секунд
const passwordInput = $('#password');
passwordInput.setValue('password123');
$('#login-button').click();
});
});
В этом примере неявное ожидание обеспечивает корректное взаимодействие с элементами, которые могут загружаться с задержкой.
Неявные ожидания обеспечивают базовую стабильность тестов при взаимодействии с элементами, загружающимися с задержкой. Их оптимальное применение — установка глобального таймаута на сессию браузера и использование явных ожиданий для более точного контроля над критическими элементами.