Skip to main content

События

Введение

Playwright позволяет отслеживать различные типы событий, происходящих на веб-странице, такие как сетевые запросы, создание дочерних страниц, выделенные воркеры и т.д. Существует несколько способов подписки на такие события, например, ожидание событий или добавление и удаление слушателей событий.

Ожидание события

Чаще всего скрипты должны ожидать наступления определенного события. Ниже приведены некоторые типичные шаблоны ожидания событий.

Ожидание запроса с указанным URL с использованием page.waitForRequest():

// Начинаем ожидание запроса перед переходом. Обратите внимание, что нет await.
const requestPromise = page.waitForRequest('**/*logo*.png');
await page.goto('https://wikipedia.org');
const request = await requestPromise;
console.log(request.url());

Ожидание всплывающего окна:

// Начинаем ожидание всплывающего окна перед кликом. Обратите внимание, что нет await.
const popupPromise = page.waitForEvent('popup');
await page.getByText('open the popup').click();
const popup = await popupPromise;
await popup.goto('https://wikipedia.org');

Добавление/удаление слушателя событий

Иногда события происходят в случайное время, и вместо их ожидания их нужно обрабатывать. Playwright поддерживает традиционные языковые механизмы для подписки и отписки от событий:

page.on('request', request => console.log(`Запрос отправлен: ${request.url()}`));
const listener = request => console.log(`Запрос завершен: ${request.url()}`);
page.on('requestfinished', listener);
await page.goto('https://wikipedia.org');

page.off('requestfinished', listener);
await page.goto('https://www.openstreetmap.org/');

Добавление одноразовых слушателей

Если определенное событие нужно обработать один раз, для этого существует удобный API:

page.once('dialog', dialog => dialog.accept('2021'));
await page.evaluate("prompt('Enter a number:')");