Работа с алертами — одна из ключевых задач автоматизированного
тестирования веб-приложений. Алерты, подтверждения и промпты создаются с
помощью стандартного объекта window в браузере
(alert, confirm, prompt) и
требуют отдельного подхода, так как они блокируют выполнение основного
потока скрипта до взаимодействия с ними. WebdriverIO предоставляет
методы для безопасного получения текста этих окон и управления ими.
Для работы с алертами используется объект
browser, предоставляющий следующие
основные методы:
browser.isAlertOpen() — проверяет, открыто ли модальное
окно. Возвращает true или false.browser.getAlertText() — возвращает текст текущего
алерта.browser.acceptAlert() — принимает алерт, эквивалентно
нажатию кнопки «OK».browser.dismissAlert() — отклоняет алерт, эквивалентно
нажатию кнопки «Отмена».browser.sendAlertText(text) — вводит текст в
промт.Пример получения текста алерта:
it('должен получить текст алерта', async () => {
await $('#trigger-alert').click(); // Кнопка, которая вызывает alert
if (await browser.isAlertOpen()) {
const alertText = await browser.getAlertText();
console.log('Текст алерта:', alertText);
await browser.acceptAlert();
}
});
В этом примере последовательность действий обеспечивает безопасное взаимодействие с алертом: сначала проверяется его наличие, затем извлекается текст, после чего алерт принимается.
Полученный текст можно использовать для ассертов, что позволяет проверять правильность сообщений. Для этого применяется любой тестовый фреймворк, например, Mocha и Chai:
const { expect } = require('chai');
it('текст алерта должен быть корректным', async () => {
await $('#trigger-alert').click();
if (await browser.isAlertOpen()) {
const alertText = await browser.getAlertText();
expect(alertText).to.equal('Вы уверены, что хотите продолжить?');
await browser.acceptAlert();
}
});
Такой подход помогает убедиться, что пользователь видит корректные сообщения, что критично для валидации логики приложения.
Алерты confirm и prompt требуют
дополнительных действий:
Пример работы с prompt:
it('ввод текста в prompt и получение ответа', async () => {
await $('#trigger-prompt').click();
if (await browser.isAlertOpen()) {
const alertText = await browser.getAlertText();
console.log('Текст prompt:', alertText);
await browser.sendAlertText('Test input'); // Ввод текста
await browser.acceptAlert();
}
});
После отправки текста в prompt можно проверить, что
введённые данные корректно обработаны приложением, например, через
DOM-элементы, отображающие результат.
Алерты блокируют интерфейс, но WebdriverIO работает асинхронно. Для стабильной работы тестов рекомендуется использовать ожидания перед взаимодействием с алертом:
await browser.waitUntil(
async () => await browser.isAlertOpen(),
{
timeout: 5000,
timeoutMsg: 'Алерт не появился в течение 5 секунд'
}
);
const alertText = await browser.getAlertText();
await browser.acceptAlert();
Использование waitUntil позволяет избежать ошибок
no alert open, особенно при динамических интерфейсах, где
алерт появляется с задержкой.
waitUntil) для повышения стабильности тестов.Работа с алертами в WebdriverIO становится безопасной и предсказуемой при соблюдении этих правил. Получение текста алерта позволяет интегрировать проверку сообщений в автоматизированные сценарии, делая тестирование веб-приложений более точным и надёжным.