Принятие и отклонение алертов

В автоматизации тестирования веб-приложений часто встречаются всплывающие окна — алерты, confirm и prompt. WebdriverIO предоставляет удобные методы для взаимодействия с ними, позволяя как принимать, так и отклонять такие окна, а также получать текст сообщений.


Основные типы алертов

  1. Alert – простое информационное окно с кнопкой «OK».
  2. Confirm – окно с кнопками «OK» и «Cancel».
  3. Prompt – окно, в котором пользователь может ввести текст, а затем подтвердить или отменить действие.

Каждый из этих типов обрабатывается методами WebdriverIO через объект browser.


Методы для работы с алертами

1. Получение текста алерта

const alertText = await browser.getAlertText();
console.log(alertText);

Метод возвращает строку с текстом текущего активного алерта. Полезно для проверки сообщений в тестах.

2. Принятие алерта

await browser.acceptAlert();

Подтверждает алерт, что эквивалентно нажатию кнопки «OK». Работает для всех типов алертов.

3. Отклонение алерта

await browser.dismissAlert();

Закрывает алерт, как будто нажата кнопка «Cancel». Применимо к confirm и prompt.

4. Ввод текста в prompt

await browser.sendAlertText('Тестовое сообщение');
await browser.acceptAlert();

Метод sendAlertText позволяет передать строку в поле ввода prompt, после чего алерт можно принять или отклонить.


Проверка наличия алерта

Для того чтобы убедиться, что алерт появился перед выполнением действий с ним, используется проверка с обработкой исключений:

let isAlertOpen = false;
try {
    await browser.getAlertText();
    isAlertOpen = true;
} catch (e) {
    isAlertOpen = false;
}

if (isAlertOpen) {
    await browser.acceptAlert();
}

Такой подход предотвращает ошибки выполнения, если алерт не появился.


Сценарии использования в тестах

  • Проверка уведомлений: убедиться, что при определенном действии появляется корректный текст алерта.
  • Подтверждение действий: закрытие confirm после выполнения критического действия, например удаления элемента.
  • Ввод данных через prompt: тестирование функционала, требующего ввода информации пользователем.

Важные моменты

  • Методы для работы с алертами асинхронные и всегда требуют await.
  • Попытка взаимодействовать с алертом, если его нет, вызывает ошибку.
  • После закрытия алерта методы возвращают выполнение теста к обычному взаимодействию со страницей.
  • Совместимость с браузерами зависит от реализации WebDriver, но базовые операции поддерживаются во всех основных движках.

Примеры комплексного сценария

// Клик по кнопке, вызывающей alert
await $('#triggerAlert').click();

// Проверка текста алерта
const message = await browser.getAlertText();
if (message.includes('подтвердить')) {
    await browser.acceptAlert();
} else {
    await browser.dismissAlert();
}

// Работа с prompt
await $('#triggerPrompt').click();
await browser.sendAlertText('Тестовые данные');
await browser.acceptAlert();

В этом примере показано условное принятие алерта, получение текста и работа с prompt — ключевые операции для реальных тестовых сценариев.


Рекомендации по надежности

  • Использовать явные ожидания появления алерта через browser.waitUntil для стабильности тестов.
  • Проверять корректность текста алерта перед нажатием кнопки.
  • Минимизировать вызовы dismissAlert без проверки, чтобы не пропустить важные уведомления приложения.

Работа с алертами в WebdriverIO является фундаментальной частью тестирования веб-интерфейсов, обеспечивая контроль над всеми всплывающими окнами и их поведением. Правильное использование методов getAlertText, acceptAlert, dismissAlert и sendAlertText позволяет создавать надежные и предсказуемые тесты.