跳到主要內容

事件

簡介

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:')");