В Protractor взаимодействие с элементами формы является одной из
базовых задач при автоматизации тестирования веб-приложений. Ввод текста
в prompt требует особого внимания, так как стандартные
элементы DOM отличаются от встроенных браузерных диалогов. Для работы с
ними используется объект browser.switchTo().alert().
В JavaScript браузеры предоставляют три типа встроенных диалогов:
Protractor позволяет переключаться на эти диалоговые окна с помощью
метода browser.switchTo().alert(). Этот объект
предоставляет методы для чтения текста, ввода значения и подтверждения
действия.
getText() — возвращает текст текущего диалога.sendKeys(value) — вводит текст в поле prompt.accept() — подтверждает диалог, эквивалентно нажатию
«ОК».dismiss() — закрывает диалог, эквивалентно нажатию
«Отмена».Пример кода для работы с prompt:
it('должен ввести текст в prompt и подтвердить', async () => {
await element(by.id('promptButton')).click(); // вызов prompt
const alertDialog = await browser.switchTo().alert();
const message = await alertDialog.getText(); // считываем текст prompt
console.log('Текст prompt:', message);
await alertDialog.sendKeys('Тестовый ввод'); // ввод текста
await alertDialog.accept(); // подтверждаем ввод
});
В этом примере:
element(by.id('promptButton')).click() инициирует
открытие prompt.browser.switchTo().alert() переключается на
диалог.sendKeys вводит текст, который будет использоваться
после нажатия «ОК».getText,
sendKeys, accept возвращают промисы, поэтому
необходимо использовать await или цепочки
then.browser.wait с условием
ExpectedConditions.alertIsPresent().Пример с ожиданием:
const EC = protractor.ExpectedConditions;
it('должен дождаться открытия prompt и ввести текст', async () => {
await element(by.id('promptButton')).click();
await browser.wait(EC.alertIsPresent(), 5000, 'Prompt не открылся за 5 секунд');
const alertDialog = await browser.switchTo().alert();
await alertDialog.sendKeys('Автоматический ввод');
await alertDialog.accept();
});
dismiss()
вместо accept() закрывает диалог без сохранения введённого
текста.await alertDialog.sendKeys('Тест');
await alertDialog.dismiss(); // ввод игнорируется
const result = await element(by.id('result')).getText();
expect(result).toEqual('Вы ввели: Тестовый ввод');
Prompt часто используется вместе с формами и кнопками, где нажатие кнопки запускает диалог. Важно учитывать порядок действий:
ExpectedConditions.alertIsPresent()
перед обращением к alert(), чтобы избежать ошибок типа
NoAlertPresentError.await или
then.Эти методы позволяют полностью контролировать ввод текста в prompt и проверять реакции приложения на пользовательский ввод.