跳到主要内容

事件

简介

Playwright 允许监听网页上发生的各种类型的事件,例如网络请求、子页面创建、专用工作线程(dedicated worker)等。有几种订阅此类事件的方法,例如等待事件发生,或者添加或移除事件监听器。

等待事件

大多数情况下,脚本需要等待特定事件发生。以下是一些典型的等待事件模式。

使用 Page.waitForRequest() 等待具有指定 URL 的请求:

// 回调 lambda 定义了预期会触发请求的代码范围。
Request request = page.waitForRequest("**/*logo*.png", () -> {
page.navigate("https://wikipedia.org");
});
System.out.println(request.url());

等待弹出窗口:

// 回调 lambda 定义了预期会创建弹出窗口的代码范围。
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:')");