Prompt диалог — это модальное окно браузера, которое требует от пользователя ввода текста и обычно сопровождается кнопками OK и Cancel. В автоматизированном тестировании с использованием Protractor взаимодействие с такими окнами требует особого подхода, так как они блокируют поток выполнения скрипта до момента закрытия.
В Protractor модальные окна управляются через объект
browser.switchTo().alert(). Основные методы:
getText() — возвращает текст,
отображаемый в диалоговом окне.accept() — имитирует нажатие кнопки
OK.dismiss() — имитирует нажатие кнопки
Cancel.sendKeys(text) — вводит текст в prompt
диалог.it('Должен вводить текст в prompt и подтверждать', async () => {
await browser.get('https://example.com/prompt-test');
// Триггер для появления prompt
const triggerButton = element(by.id('trigger-prompt'));
await triggerButton.click();
// Переключение на alert
const promptDialog = await browser.switchTo().alert();
// Получение текста диалога
const dialogText = await promptDialog.getText();
console.log('Текст диалога:', dialogText);
// Ввод текста в prompt
await promptDialog.sendKeys('Тестовый ввод');
// Подтверждение
await promptDialog.accept();
});
В данном примере происходит последовательное:
Иногда требуется проверить поведение приложения при нажатии
Cancel. Для этого используется метод
dismiss():
it('Должен отменять prompt', async () => {
await browser.get('https://example.com/prompt-test');
const triggerButton = element(by.id('trigger-prompt'));
await triggerButton.click();
const promptDialog = await browser.switchTo().alert();
// Отмена prompt
await promptDialog.dismiss();
});
Так как Protractor построен на WebDriverJS, работа с alert/prompt
требует использования async/await или промисов. Важно
учитывать, что попытка взаимодействия с диалогом до его появления
приведет к ошибке NoAlertPresentError. Для корректного
выполнения следует использовать ожидания:
const EC = protractor.ExpectedConditions;
await browser.wait(EC.alertIsPresent(), 5000, 'Ожидание prompt превысило лимит');
const promptDialog = await browser.switchTo().alert();
await promptDialog.sendKeys('Ввод с ожиданием');
await promptDialog.accept();
В этом примере ExpectedConditions.alertIsPresent()
обеспечивает безопасное ожидание появления диалога до начала
взаимодействия.
После закрытия prompt часто требуется проверить, что введенные данные корректно обработаны на странице. Пример:
it('Проверка отображения введенного текста', async () => {
await browser.get('https://example.com/prompt-test');
const triggerButton = element(by.id('trigger-prompt'));
await triggerButton.click();
const promptDialog = await browser.switchTo().alert();
await promptDialog.sendKeys('Protractor Test');
await promptDialog.accept();
const output = element(by.id('prompt-output'));
expect(await output.getText()).toEqual('Вы ввели: Protractor Test');
});
Здесь текст, введенный в prompt, должен появиться на странице.
Использование await гарантирует корректное последовательное
выполнение действий.
browser.switchTo().alert() без появления окна вызывает
ошибку.sendKeys работает
только если диалог ожидает текст.ExpectedConditions.alertIsPresent() для предотвращения
гонки событий.accept) и отменой
(dismiss) для полного покрытия тестов.sendKeys только с prompt; для обычного
alert этот метод вызовет ошибку.Эти подходы обеспечивают надежную работу с prompt диалогами в Protractor и позволяют создавать детальные сценарии тестирования, охватывающие как позитивные, так и негативные варианты взаимодействия с модальными окнами.