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

События

Введение

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

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

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

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

// Лямбда-выражение обратного вызова определяет область кода, который
// ожидается, что вызовет запрос.
Request request = page.waitForRequest("**/*logo*.png", () -> {
page.navigate("https://wikipedia.org");
});
System.out.println(request.url());

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

// Лямбда-выражение обратного вызова определяет область кода, который
// ожидается, что создаст всплывающее окно.
Page popup = page.waitForPopup(() -> {
page.getByText("open the popup").click();
});
popup.navigate("https://wikipedia.org");

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

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

page.onRequest(request -> System.out.println("Request sent: " + request.url()));
Consumer<Request> listener = request -> System.out.println("Request finished: " + request.url());
page.onRequestFinished(listener);
page.navigate("https://wikipedia.org");

// Удаление ранее добавленного слушателя, у каждого метода on* есть соответствующий off*
page.offRequestFinished(listener);
page.navigate("https://www.openstreetmap.org/");

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

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

page.onceDialog(dialog -> dialog.accept("2021"));
page.evaluate("prompt('Enter a number:')");