Перейти до основного вмісту

Часові обмеження

Кожна команда у 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 })

Часові обмеження, пов'язані з фреймворком

Тестовий фреймворк, який ви використовуєте з WebdriverIO, повинен працювати з часовими обмеженнями, особливо оскільки все є асинхронним. Він гарантує, що процес тестування не зависне, якщо щось піде не так.

За замовчуванням час очікування становить 10 секунд, що означає, що окремий тест не повинен тривати довше.

Окремий тест у Mocha виглядає так:

it('should login into the application', async () => {
await browser.url('/login')

const form = await $('form')
const username = await $('#username')
const password = await $('#password')

await username.setValue('userXY')
await password.setValue('******')
await form.submit()

expect(await browser.getTitle()).to.be.equal('Admin Area')
})

У Cucumber часове обмеження застосовується до окремого визначення кроку. Однак, якщо ви хочете збільшити час очікування, тому що ваш тест займає більше часу, ніж значення за замовчуванням, вам потрібно встановити його в опціях фреймворку.

// wdio.conf.js
export const config = {
// ...
framework: 'mocha',
mochaOpts: {
timeout: 20000
},
// ...
}

Welcome! How can I help?

WebdriverIO AI Copilot