Одним из самых важных аспектов автоматизации тестирования является правильная обработка времени ожидания, особенно в случае работы с динамическими веб-страницами, где элементы могут загружаться асинхронно. WebDriverIO предоставляет два типа ожиданий: неявные и явные. В этой статье будет подробно рассмотрено использование явных ожиданий и почему они предпочтительны перед неявными в большинстве случаев.
Явное ожидание в WebDriverIO — это механизм, который позволяет тесту ожидать появления конкретного элемента на странице или выполнения определённого условия, прежде чем продолжить выполнение следующих шагов. В отличие от неявных ожиданий, которые применяются ко всем элементам на странице, явные ожидания задаются для конкретных случаев и позволяют гораздо точнее управлять временем ожидания.
При использовании явных ожиданий тестирование становится более
предсказуемым и надёжным, так как можно точно указать, какой элемент или
событие должны быть проверены, и каким образом тест должен ждать. В
WebDriverIO для явных ожиданий используется метод
waitUntil() и классы, такие как
waitForExist(), waitForDisplayed(),
waitForClickable() и другие.
Неявное ожидание устанавливается для всех элементов в браузере, что означает, что WebDriverIO будет пытаться найти элементы в течение заданного времени, прежде чем выбросить ошибку. Это ожидание не зависит от того, какой конкретно элемент находится на странице, и работает по принципу “подождать немного больше, если элемент ещё не появился”. Однако использование неявных ожиданий может привести к множественным непредсказуемым задержкам, особенно в случае сложных страниц с динамическим контентом.
Явные ожидания, с другой стороны, применяются только для конкретных условий, задаваемых для элемента. Например, можно точно указать, что элемент должен быть видим или кликабелен перед выполнением дальнейших шагов. Это позволяет тесту работать быстрее и предсказуемее.
waitForExist() Этот метод ожидает,
пока элемент не появится в DOM. Он часто используется в тех случаях,
когда необходимо дождаться, чтобы элемент был добавлен на страницу.
Пример:
const button = await $('#submit');
await button.waitForExist({ timeout: 5000 });waitForDisplayed() Используется для
ожидания, пока элемент не станет видимым на странице. Это может быть
полезно в случае, когда элемент уже существует в DOM, но ещё не
отображается на экране, например, при анимации или переходах.
Пример:
const modal = await $('.modal');
await modal.waitForDisplayed({ timeout: 5000 });waitForClickable() Этот метод ждёт,
пока элемент не станет кликабельным. Это особенно полезно, когда нужно
дождаться, чтобы кнопка или ссылка были доступны для взаимодействия,
например, после загрузки страницы или выполнения каких-либо асинхронных
операций.
Пример:
const submitButton = await $('#submit');
await submitButton.waitForClickable({ timeout: 5000 });waitUntil() Один из самых мощных
инструментов для явных ожиданий. Этот метод позволяет задавать более
сложные условия, такие как выполнение произвольных проверок с заданными
задержками.
Пример:
await browser.waitUntil(
async () => (await $('#result')).getText() === 'Success',
{
timeout: 5000,
timeoutMsg: 'Expected result text not found'
}
);Явные ожидания должны использоваться в следующих случаях:
waitForExist(),
waitForDisplayed(), waitForClickable() и так
далее.Явные ожидания являются важным инструментом для обеспечения надежности и точности автоматических тестов. Их использование позволяет минимизировать проблемы с асинхронной загрузкой элементов, а также оптимизировать время выполнения тестов, сделав их более предсказуемыми. В отличие от неявных ожиданий, явные ожидания позволяют тестировщикам точно контролировать процесс ожидания, что значительно улучшает качество автоматических тестов.