Confirm диалоги в веб-приложениях — это стандартные модальные окна браузера, которые предлагают пользователю подтвердить или отменить действие с помощью кнопок «OK» и «Отмена». В тестировании WebdriverIO их обработка требует особого подхода, так как это не просто элементы DOM, а нативные браузерные окна.
WebdriverIO предоставляет встроенные команды для взаимодействия с alert и confirm диалогами:
browser.getAlertText() — возвращает текст текущего
alert/confirm окна.browser.acceptAlert() — подтверждает диалог (эквивалент
нажатия «OK»).browser.dismissAlert() — отклоняет диалог (эквивалент
нажатия «Отмена»).browser.sendAlertText(text) — вводит текст в prompt
(если используется), для confirm не применяется, но важно знать для
полного набора alert-сценариев.it('должен подтвердить действие через confirm', async () => {
await browser.url('/confirm-test');
// Кликаем на кнопку, которая вызывает confirm диалог
const confirmButton = await $('#confirmButton');
await confirmButton.click();
// Получаем текст диалога для проверки
const alertText = await browser.getAlertText();
console.log('Текст confirm:', alertText);
// Подтверждаем диалог
await browser.acceptAlert();
// Проверяем результат действия после подтверждения
const resultText = await $('#result').getText();
expect(resultText).toBe('Действие подтверждено');
});
Для тестов, где требуется проверить сценарий отмены действия:
it('должен отклонить действие через confirm', async () => {
await browser.url('/confirm-test');
const confirmButton = await $('#confirmButton');
await confirmButton.click();
// Отклоняем диалог
await browser.dismissAlert();
const resultText = await $('#result').getText();
expect(resultText).toBe('Действие отменено');
});
Важно учитывать, что появление confirm диалога не всегда моментально.
WebdriverIO поддерживает ожидания через waitUntil, чтобы
тесты не падали из-за того, что диалог еще не появился:
await browser.waitUntil(
async () => await browser.isAlertOpen(),
{
timeout: 5000,
timeoutMsg: 'Confirm диалог не появился'
}
);
await browser.acceptAlert();
Метод isAlertOpen() проверяет наличие открытого
alert/confirm окна и возвращает true или
false. Это особенно полезно в динамических интерфейсах, где
подтверждающие модальные окна могут появляться с задержкой.
waitUntil для надежности
— гарантирует, что тест не упадет из-за асинхронного появления
модального окна.Поддержка confirm диалогов стандартна для всех основных браузеров.
Отличия могут возникать в поведении текста и локализации кнопок, но
команды WebdriverIO (acceptAlert,
dismissAlert) остаются универсальными.
async function handleConfirm(accept = true) {
await browser.waitUntil(() => browser.isAlertOpen(), { timeout: 5000 });
accept ? await browser.acceptAlert() : await browser.dismissAlert();
}
Работа с confirm диалогами в WebdriverIO позволяет полноценно тестировать критические действия пользователя, требующие подтверждения, обеспечивая надежность и предсказуемость тестов.