Перейти к основному содержимому

Диалоги

Введение​

Playwright может взаимодействовать с диалогами веб-страниц, такими как alert, confirm, prompt, а также с подтверждением beforeunload. Для диалогов печати см. Печать.

Диалоги alert(), confirm(), prompt()​

По умолчанию диалоги автоматически отклоняются Playwright, поэтому вам не нужно их обрабатывать. Однако вы можете зарегистрировать обработчик диалогов перед действием, которое вызывает диалог, чтобы либо dialog.accept(), либо dialog.dismiss() его.

page.on('dialog', dialog => dialog.accept());
await page.getByRole('button').click();
примечание

Слушатель page.on('dialog') должен обрабатывать диалог. В противном случае ваше действие будет приостановлено, будь то locator.click() или что-то еще. Это связано с тем, что диалоги в вебе являются модальными и, следовательно, блокируют дальнейшее выполнение страницы, пока они не будут обработаны.

В результате следующий фрагмент никогда не разрешится:

warning

НЕПРАВИЛЬНО!

page.on('dialog', dialog => console.log(dialog.message()));
await page.getByRole('button').click(); // Зависнет здесь
примечание

Если нет слушателя для page.on('dialog'), все диалоги автоматически отклоняются.

Диалог beforeunload​

Когда page.close() вызывается с истинным значением runBeforeUnload, страница выполняет свои обработчики выгрузки. Это единственный случай, когда page.close() не ждет фактического закрытия страницы, потому что может случиться так, что страница останется открытой в конце операции.

Вы можете зарегистрировать обработчик диалогов, чтобы самостоятельно обработать диалог beforeunload:

page.on('dialog', async dialog => {
assert(dialog.type() === 'beforeunload');
await dialog.dismiss();
});
await page.close({ runBeforeUnload: true });

Чтобы убедиться, что диалог печати через window.print был вызван, вы можете использовать следующий фрагмент:

await page.goto('<url>');

await page.evaluate('(() => {window.waitForPrintDialog = new Promise(f => window.print = f);})()');
await page.getByText('Print it!').click();

await page.waitForFunction('window.waitForPrintDialog');

Это будет ожидать открытия диалога печати после нажатия кнопки. Убедитесь, что вы оценили скрипт перед нажатием кнопки / после загрузки страницы.