Эффективное управление таймаутами является ключевым аспектом автоматизации тестирования в WebdriverIO. Таймауты определяют, сколько времени тест должен ждать определённого события или состояния страницы перед тем, как завершить выполнение с ошибкой. Неправильная настройка таймаутов может привести к нестабильным тестам, ложным срабатываниям и увеличению времени выполнения тестового набора.
WebdriverIO предоставляет несколько основных видов таймаутов, которые регулируют различные этапы взаимодействия с веб-приложением:
Implicit Timeout Используется для
автоматического ожидания элементов на странице при поиске. Если элемент
не найден сразу, WebdriverIO будет повторно пытаться найти его до
истечения заданного времени. Настройка производится через метод
setTimeout или конфигурационный параметр
implicit:
browser.setTimeout({ implicit: 5000 }); // 5 секунд
Особенности:
Explicit Timeout Позволяет ожидать конкретного
состояния элемента, например, видимости или кликабельности, с помощью
команд waitUntil, waitForDisplayed,
waitForEnabled. Пример:
const button = await $('#submit');
await button.waitForDisplayed({ timeout: 7000, timeoutMsg: 'Кнопка не появилась' });
Особенности:
Page Load Timeout Определяет, сколько времени
WebdriverIO будет ждать полной загрузки страницы при переходе с помощью
url() или navigateTo().
browser.setTimeout({ pageLoad: 10000 }); // 10 секунд
Особенности:
Script Timeout Определяет максимальное время
выполнения асинхронного скрипта через executeAsync.
browser.setTimeout({ script: 5000 }); // 5 секунд
Особенности:
WebdriverIO позволяет задавать таймауты глобально в файле
конфигурации wdio.conf.js. Это обеспечивает единообразие и
упрощает поддержку тестового набора:
exports.config = {
waitforTimeout: 10000, // дефолтное время для waitFor* команд
connectionRetryTimeout: 120000, // таймаут подключения к WebDriver
connectionRetryCount: 3, // количество повторных попыток
capabilities: [{
browserName: 'chrome',
}],
};
waitforTimeout используется как значение по умолчанию
для всех waitFor* команд, если не указан отдельный
таймаут.connectionRetryTimeout и
connectionRetryCount позволяют контролировать повторные
подключения к браузеру или удаленному WebDriver серверу, что особенно
важно в CI/CD средах.waitUntil предоставляет гибкий механизм ожидания
произвольных условий. Команда принимает функцию, которая должна вернуть
true, когда условие выполнено:
await browser.waitUntil(
async () => (await $('#status').getText()) === 'Готово',
{
timeout: 15000,
timeoutMsg: 'Статус не стал "Готово" за 15 секунд'
}
);
Особенности:
interval.waitUntil.waitForDisplayed или waitForEnabled с разумным
таймаутом.timeoutMsg для упрощения диагностики в
случае ошибки.Важно понимать взаимодействие разных таймаутов:
waitFor* команды — на
состояние элементов после загрузки.Правильная комбинация таймаутов обеспечивает стабильность тестов, сокращает ложные срабатывания и улучшает производительность автоматизации.