В веб-тестировании часто встречается необходимость взаимодействия с
модальными окнами, такими как alert,
confirm и prompt. WebdriverIO предоставляет
удобные методы для управления такими окнами, позволяя автоматизировать
сценарии, которые требуют подтверждения или ввода данных.
WebdriverIO использует объект browser для управления
модальными окнами. Основные методы:
browser.getAlertText() Возвращает
текст текущего alert окна. Используется для проверки содержимого
уведомления.
const alertText = await browser.getAlertText();
console.log(alertText); // Выводит текст alertbrowser.acceptAlert() Подтверждает
alert, эквивалентно нажатию кнопки “OK”.
await browser.acceptAlert();browser.dismissAlert() Отменяет
alert, аналог кнопки “Cancel”.
await browser.dismissAlert();browser.sendAlertText(text) Вводит
текст в prompt окно. Используется только для prompt.
await browser.sendAlertText('Тестовое сообщение');
await browser.acceptAlert();Ожидание появления окна Alert появляется асинхронно, поэтому перед взаимодействием часто требуется дождаться его появления.
await browser.waitUntil(
async () => await browser.isAlertOpen(),
{
timeout: 5000,
timeoutMsg: 'Alert не появился в течение 5 секунд'
}
);Получение текста и проверка Часто проверка текста alert является частью теста на корректность работы приложения.
const text = await browser.getAlertText();
expect(text).toBe('Вы уверены, что хотите удалить элемент?');Действие с окном Выбор между подтверждением или отменой зависит от логики теста.
await browser.acceptAlert(); // подтверждение
// или
await browser.dismissAlert(); // отменаРабота с prompt В prompt можно передавать текст перед подтверждением.
await browser.sendAlertText('Новый заголовок');
await browser.acceptAlert();Метод browser.isAlertOpen() возвращает
true, если окно открыто, и false, если нет.
Это позволяет безопасно выполнять действия, не вызывая ошибок при
отсутствии alert:
if (await browser.isAlertOpen()) {
await browser.acceptAlert();
}
Попытка взаимодействия с несуществующим alert вызовет исключение. Чтобы избежать сбоев теста, рекомендуется использовать проверки:
try {
if (await browser.isAlertOpen()) {
await browser.acceptAlert();
}
} catch (error) {
console.error('Alert не удалось обработать:', error.message);
}
isAlertOpen() перед
действием.waitUntil
или ожидания определённого события.isAlertOpen() или
waitUntil перед попыткой взаимодействия.Объединение этих методов позволяет полностью управлять alert окнами в WebdriverIO, обеспечивая стабильность и предсказуемость тестов, особенно при асинхронных или динамических интерфейсах.