В автоматизированном тестировании веб-приложений часто возникает
необходимость работы с модальными окнами браузера — алёртами,
подтверждениями (confirm) и вводом данных
(prompt). Protractor предоставляет встроенные возможности
для взаимодействия с ними через объект
browser.switchTo().alert().
browser.switchTo().alert() возвращает объект
Alert, который содержит следующие ключевые методы:
accept() — подтверждает алёрт, аналог
нажатия кнопки “OK”.dismiss() — отклоняет алёрт, аналог
нажатия кнопки “Cancel”.getText() — получает текст сообщения
алёрта.sendKeys(text) — вводит текст в алёрт
типа prompt.it('должен принимать простой алёрт', async () => {
await element(by.id('alertButton')).click();
const alertDialog = await browser.switchTo().alert();
const alertText = await alertDialog.getText();
console.log('Текст алёрта:', alertText);
await alertDialog.accept();
});
В этом примере сначала производится клик по кнопке, вызывающей алёрт.
Затем с помощью switchTo().alert() происходит переключение
на модальное окно, после чего его текст считывается и подтверждается
кнопкой “OK”.
confirm)Алёрт типа confirm имеет две кнопки: OK
и Cancel.
it('должен отклонять confirm', async () => {
await element(by.id('confirmButton')).click();
const confirmDialog = await browser.switchTo().alert();
await confirmDialog.dismiss(); // Нажатие Cancel
});
Если требуется подтвердить действие, используется
accept(). Для проверки реакции приложения на нажатие
“Cancel” используется dismiss().
promptprompt позволяет вводить данные в текстовое поле
алёрта.
it('должен вводить текст в prompt', async () => {
await element(by.id('promptButton')).click();
const promptDialog = await browser.switchTo().alert();
await promptDialog.sendKeys('Тестовый ввод');
await promptDialog.accept();
});
После ввода текста и подтверждения кнопкой “OK” приложение получает введённые данные, что позволяет проверять обработку ввода.
Алёрты могут появляться с задержкой. Использование явных ожиданий гарантирует, что тест не упадёт из-за попытки работы с отсутствующим алёртом.
const EC = protractor.ExpectedConditions;
it('должен дождаться появления алёрта', async () => {
await element(by.id('delayedAlertButton')).click();
await browser.wait(EC.alertIsPresent(), 5000, 'Алёрт не появился в течение 5 секунд');
const alertDialog = await browser.switchTo().alert();
await alertDialog.accept();
});
ExpectedConditions.alertIsPresent() проверяет наличие
алёрта, а browser.wait() приостанавливает выполнение теста
до появления модального окна или истечения таймаута.
NoAlertPresentError.accept() или
dismiss(); вся проверка состояния приложения
должна происходить после взаимодействия с алёртом.it('комплексная проверка алёртов', async () => {
// Проверка простого алёрта
await element(by.id('alertButton')).click();
let alertDialog = await browser.switchTo().alert();
console.log(await alertDialog.getText());
await alertDialog.accept();
// Проверка confirm
await element(by.id('confirmButton')).click();
alertDialog = await browser.switchTo().alert();
await alertDialog.dismiss();
// Проверка prompt
await element(by.id('promptButton')).click();
alertDialog = await browser.switchTo().alert();
await alertDialog.sendKeys('Hello World');
await alertDialog.accept();
});
Такой подход обеспечивает надёжное управление всеми типами модальных окон, минимизирует ошибки тестов и упрощает отладку.
Работа с алёртами в Protractor требует внимания к асинхронности,
правильного использования методов объекта Alert и явных
ожиданий, что позволяет создавать стабильные и предсказуемые
автоматизированные тесты.