事件
简介
Playwright 允许监听网页上发生的各种类型的事件,例如网络请求、子页面的创建、专用 worker 等。有几种方法可以订阅此类事件,例如等待事件或添加或删除事件侦听器。
等待事件
大多数时候,脚本需要等待特定事件发生。以下是一些典型的事件等待模式。
使用 Page.waitForRequest() 等待具有指定 url 的请求
// The callback lambda defines scope of the code that is expected to
// trigger request.
Request request = page.waitForRequest("**/*logo*.png", () -> {
page.navigate("https://wikipedia.org");
});
System.out.println(request.url());
等待弹出窗口
// The callback lambda defines scope of the code that is expected to
// create popup window.
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");
// Remove previously added listener, each on* method has corresponding off*
page.offRequestFinished(listener);
page.navigate("https://www.openstreetmap.org/");
添加一次性侦听器
如果某个事件只需要处理一次,则有一个方便的 API 可以使用
page.onceDialog(dialog -> dialog.accept("2021"));
page.evaluate("prompt('Enter a number:')");