Puppeteer — это инструмент для автоматизации взаимодействия с браузером,
основанный на Chromium. Одной из частых задач при автоматизации
тестирования является обработка различных видов диалоговых окон, таких
как alert, prompt и confirm. В
данном разделе будет рассмотрено, как работать с диалогом
confirm в Puppeteer.
Диалоговое окно типа confirm появляется, когда страница
вызывает метод JavaScript window.confirm(). Этот диалог
предлагает пользователю два варианта: «ОК» или «Отмена». Он блокирует
выполнение дальнейшего кода до тех пор, пока пользователь не сделает
выбор. В автоматизированных тестах важно корректно обрабатывать такие
окна, чтобы продолжить выполнение сценариев без вмешательства
пользователя.
Пример вызова confirm на веб-странице:
window.confirm("Вы уверены, что хотите удалить этот элемент?");
В Puppeteer для работы с диалоговыми окнами предоставляется возможность перехватывать их и автоматически подтверждать или отменять действия. Для этого необходимо использовать обработчик событий для диалоговых окон.
Чтобы обработать диалог confirm, можно подписаться на событие
dialog и использовать методы accept() или
dismiss() в зависимости от того, что требуется: подтвердить
или отклонить диалог.
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Обработчик событий для диалоговых окон
page.on('dialog', async dialog => {
console.log(dialog.message()); // Выводим сообщение из диалога
await dialog.accept(); // Подтверждаем действие
});
// Навигация по странице, которая вызывает confirm
await page.goto('https://example.com');
await page.click('#button-that-triggers-confirm'); // Симуляция клика по кнопке, вызывающей confirm
await browser.close();
})();
В этом примере:
dialog, который
активируется, когда страница вызывает диалоговое окно.
dialog.message() позволяет получить сообщение,
отображаемое в диалоговом окне.
dialog.accept() отвечает на диалог кнопкой «ОК», что
эквивалентно нажатию пользователем на «ОК».
Для того чтобы отклонить диалог, необходимо использовать метод
dismiss(). Это будет эквивалентно нажатию пользователем на
кнопку «Отмена».
Пример отклонения:
page.on('dialog', async dialog => {
console.log(dialog.message());
await dialog.dismiss(); // Отклоняем действие, эквивалентно нажатию "Отмена"
});
Этот код перехватывает диалог, выводит его сообщение в консоль и закрывает диалог кнопкой «Отмена».
При необходимости можно добавить проверку, что диалог действительно был перехвачен. Это полезно для тестов, где нужно подтвердить, что диалог был вызван и правильно обработан.
page.on('dialog', async dialog => {
console.log('Диалог был вызван: ' + dialog.message());
await dialog.accept(); // или dismiss(), в зависимости от теста
});
await page.evaluate(() => {
const result = window.confirm('Вы уверены?');
return result; // Вернёт true, если нажали "ОК", или false, если "Отмена"
});
const result = await page.evaluate(() => {
return window.confirm('Удалить элемент?');
});
console.log(result); // true или false в зависимости от ответа на confirm
В некоторых случаях необходимо проверять содержимое сообщения в диалоге перед тем, как принять решение, подтверждать или отклонять его. Это может быть полезно, если на странице могут появляться разные сообщения, и необходимо реагировать по-разному в зависимости от контекста.
Пример:
page.on('dialog', async dialog => {
const message = dialog.message();
if (message === 'Удалить элемент?') {
await dialog.accept(); // Подтверждаем удаление
} else {
await dialog.dismiss(); // Отменяем другие действия
}
});
В этом случае в зависимости от текста сообщения в диалоге решается, принимать ли его или отклонять.
Работа с диалогами типа confirm в Puppeteer проста и
интуитивно понятна. С помощью обработчика событий dialog
можно перехватывать диалоговые окна и автоматически реагировать на них,
что позволяет проводить тесты без участия пользователя.