Автоочікування
Однією з найпоширеніших причин нестабільних тестів є взаємодія з елементами, які ще не з'явилися у вашому додатку в момент взаємодії з ними. Сучасні веб застосунки дуже динамічні, елементи можуть то з’являтися, то зникати. Ми люди, несвідомо чекаємо на появу елементів, але складаючи сценарії автоматизації ми часто забуваємо про цю "дію". Є два способи дочекатися появи елемента.
Явний vs. Неявний
Протокол WebDriver дає можливість вказати неявний тайм-аут, який визначатиме як довго драйвер має чекати, поки елемент не з’явиться. За замовчуванням для цього тайм-ауту встановлено значення 0
, тому драйвер одразу повертає помилку no such element
, якщо елемент не знайдено на сторінці. Збільшення цього тайм-ауту за допомогою setTimeout
змусить драйвер чекати та збільшить шанси того, що елемент зрештою з’явиться.
Дізнайтеся більше про тайм-аути, пов’язані з WebDriver і фреймворком, у документації з тайм-аутів
Іншим підходом є використання явного очікування, вбудованого у WebdriverIO в командах таких як waitForExist
. За допомогою цієї техніки фреймворк чекає на елемент, викликаючи команду findElements
кілька разів, доки не буде досягнуто тайм-ауту.
Вбудоване очікування
Обидва механізми очікування несумісні один з одним і можуть призвести до сповільнення роботи. Оскільки неявне очікування є глобальним параметром, воно буде застосоване до всіх елементів, що іноді не є бажаною поведінкою. Тому WebdriverIO надає вбудований механізм очікування, який а втоматично та явно очікуватиме на елемент перед взаємодією з ним.
Ми рекомендуємо не використовувати неявне очікування взагалі, і дозволити WebdriverIO подбати про очікування елемента.
Використання неявних очікувань також є проблематичним у випадках, коли вам потрібно дочекатися, поки елемент зникне. WebdriverIO буде шукати елемент необхідну кількість разів, доки не отримає помилку. Встановлення неявного параметра очікування тільки дарма затримуватиме виконання команд та може спричинити збільшення часу необхідного для виконання тестів.
Ви можете встановити значення за замовчуванням для автоматичного явного очікування WebdriverIO, визначивши параметр waitforTimeout
у вашій конфігурації.