События
Введение
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:')");