Таймауты
Каждая команда в WebdriverIO - это асинхронная операция. Запрос отправляется на сервер Selenium (или облачный сервис, такой как Sauce Labs), и его ответ содержит результат после завершения или сбоя действия.
Поэтому время является решающим компонентом во всем процессе тестирования. Когда определенное действие зависит от состояния другого действия, вы должны убедиться, что они выполняются в правильном порядке. Таймауты играют важную роль при решении этих проблем.
Таймауты WebDriver
Таймаут сессионного скрипта
Сессия имеет связанный с ней таймаут сессионного скрипта, который определяет время ожидания выполнения асинхронных скриптов. Если не указано иное, он составляет 30 секунд. Вы можете установить этот таймаут следующим образом:
await browser.setTimeout({ 'script': 60000 })
await browser.executeAsync((done) => {
console.log('this should not fail')
setTimeout(done, 59000)
})
Таймаут загрузки страницы сессии
Сессия имеет связанный с ней таймаут загрузки страницы, который определяет время ожидания завершения загрузки страницы. Если не указано иное, он составляет 300 000 миллисекунд.
Вы можете установить этот таймаут следующим образом:
await browser.setTimeout({ 'pageLoad': 10000 })
Ключевое слово
pageLoad
является частью официальной спецификации WebDriver, но может не поддерживаться для вашего браузера (предыдущее название -page load
).
Таймаут неявного ожидания сессии
Сессия имеет связанный с ней таймаут неявного ожидания. Он определяет время ожидания для неявной стратегии поиска элементов при поиске элементов с помощью команд findElement
или findElements
(соответственно $
или $$
при запуске WebdriverIO с или без тестраннера WDIO). Если не указано иное, он составляет 0 миллисекунд.
Вы можете установить этот таймаут следующим образом:
await browser.setTimeout({ 'implicit': 5000 })
Таймауты, связанные с WebdriverIO
Таймаут WaitFor*
WebdriverIO предоставляет несколько команд для ожидания достижения элементами определенного состо яния (например, активировано, видимо, существует). Эти команды принимают аргумент селектора и число таймаута, которое определяет, как долго экземпляр должен ждать достижения элементом этого состояния. Опция waitforTimeout
позволяет установить глобальный таймаут для всех команд waitFor*
, чтобы вам не приходилось устанавливать один и тот же таймаут снова и снова. (Обратите внимание на строчную букву f
!)
// wdio.conf.js
export const config = {
// ...
waitforTimeout: 5000,
// ...
}
В ваших тестах теперь можно сделать следующее:
const myElem = await $('#myElem')
await myElem.waitForDisplayed()
// вы также можете переопределить таймаут по умолчанию при необходимости
await myElem.waitForDisplayed({ timeout: 10000 })