跳到主要內容

Page

Page 提供與 Browser 中的單一分頁互動的方法,或 Chromium 中的 擴充功能背景頁面。一個 Browser 實例可能有多個 Page 實例。

此範例建立一個頁面,導航至 URL,然後儲存螢幕截圖

import com.microsoft.playwright.*;

public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType webkit = playwright.webkit();
Browser browser = webkit.launch();
BrowserContext context = browser.newContext();
Page page = context.newPage();
page.navigate("https://example.com");
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("screenshot.png")));
browser.close();
}
}
}

Page 類別發出各種事件(如下所述),可以使用任何 Node 的原生 EventEmitter 方法(例如 ononceremoveListener)來處理這些事件。

此範例記錄單一頁面 load 事件的訊息

page.onLoad(p -> System.out.println("Page loaded!"));

若要取消訂閱事件,請使用 removeListener 方法

Consumer<Request> logRequest = interceptedRequest -> {
System.out.println("A request was made: " + interceptedRequest.url());
};
page.onRequest(logRequest);
// Sometime later...
page.offRequest(logRequest);

方法

addInitScript

在 v1.9 之前新增 page.addInitScript

新增一個腳本,該腳本將在下列其中一種情況下評估

  • 每當頁面導航時。
  • 每當子框架附加或導航時。在這種情況下,腳本會在新附加的框架的內容中評估。

腳本在文件建立後但在其任何腳本執行之前評估。這對於修改 JavaScript 環境非常有用,例如為 Math.random 設定種子。

用法

在頁面載入之前覆寫 Math.random 的範例

// preload.js
Math.random = () => 42;
// In your playwright script, assuming the preload.js file is in same directory
page.addInitScript(Paths.get("./preload.js"));
注意

未定義透過 BrowserContext.addInitScript()Page.addInitScript() 安裝的多個腳本的評估順序。

引數

  • script 字串 | 路徑#

    要在瀏覽器內容中的所有頁面中評估的腳本。

傳回


addLocatorHandler

在 v1.42 中新增 page.addLocatorHandler

在測試網頁時,有時會出現意外的覆蓋層,例如「註冊」對話方塊,並封鎖您想要自動化的動作,例如按一下按鈕。這些覆蓋層不一定以相同的方式或在相同的時間顯示,使其在自動化測試中難以處理。

此方法可讓您設定一個特殊函式,稱為處理常式,當偵測到覆蓋層可見時,該函式會啟動。處理常式的工作是移除覆蓋層,讓您的測試繼續進行,就像覆蓋層不存在一樣。

請記住的事項

  • 當覆蓋層可預測地顯示時,我們建議在您的測試中明確等待它,並將其作為正常測試流程的一部分解除,而不是使用 Page.addLocatorHandler()
  • Playwright 會在每次執行或重試需要 可操作性檢查 的動作之前,或在執行自動等待判斷提示檢查之前,檢查覆蓋層。當覆蓋層可見時,Playwright 會先呼叫處理常式,然後繼續執行動作/判斷提示。請注意,處理常式僅在您執行動作/判斷提示時呼叫 - 如果覆蓋層變成可見,但您未執行任何動作,則不會觸發處理常式。
  • 在執行處理常式之後,Playwright 將確保觸發處理常式的覆蓋層不再可見。您可以使用 setNoWaitAfter 選擇退出此行為。
  • 處理常式的執行時間計入執行處理常式的動作/判斷提示的逾時時間。如果您的處理常式花費太長時間,可能會導致逾時。
  • 您可以註冊多個處理常式。但是,一次只會執行一個處理常式。請確保處理常式內的動作不依賴另一個處理常式。
警告

執行處理常式將在測試期間變更您的頁面狀態。例如,它會變更目前焦點元素並移動滑鼠。請確保在處理常式之後執行的動作是獨立的,並且不依賴焦點和滑鼠狀態保持不變。

例如,考慮一個測試,該測試呼叫 Locator.focus(),然後呼叫 Keyboard.press()。如果您的處理常式在這兩個動作之間按一下按鈕,則焦點元素很可能不正確,並且按鍵將在意外的元素上發生。請改用 Locator.press() 以避免此問題。

另一個範例是一系列滑鼠動作,其中 Mouse.move() 後面接著 Mouse.down()。同樣地,當處理常式在這兩個動作之間執行時,滑鼠位置在滑鼠按下期間將會不正確。請優先使用獨立動作,例如 Locator.click(),這些動作不依賴處理常式變更的狀態。

用法

關閉「註冊電子報」對話方塊(如果出現)的範例

// Setup the handler.
page.addLocatorHandler(page.getByText("Sign up to the newsletter"), () -> {
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("No thanks")).click();
});

// Write the test as usual.
page.navigate("https://example.com");
page.getByRole("button", Page.GetByRoleOptions().setName("Start here")).click();

略過「確認您的安全詳細資訊」頁面(如果顯示)的範例

// Setup the handler.
page.addLocatorHandler(page.getByText("Confirm your security details"), () -> {
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Remind me later")).click();
});

// Write the test as usual.
page.navigate("https://example.com");
page.getByRole("button", Page.GetByRoleOptions().setName("Start here")).click();

具有每個可操作性檢查的自訂回呼的範例。它使用始終可見的 <body> 定位器,因此處理常式會在每次可操作性檢查之前呼叫。指定 setNoWaitAfter 很重要,因為處理常式不會隱藏 <body> 元素。

// Setup the handler.
page.addLocatorHandler(page.locator("body"), () -> {
page.evaluate("window.removeObstructionsForTestIfNeeded()");
}, new Page.AddLocatorHandlerOptions().setNoWaitAfter(true));

// Write the test as usual.
page.navigate("https://example.com");
page.getByRole("button", Page.GetByRoleOptions().setName("Start here")).click();

處理常式採用原始定位器作為引數。您也可以透過設定 setTimes 在呼叫若干次後自動移除處理常式

page.addLocatorHandler(page.getByLabel("Close"), locator -> {
locator.click();
}, new Page.AddLocatorHandlerOptions().setTimes(1));

引數

  • locator Locator#

    觸發處理常式的定位器。

  • handler Consumer<Locator>#

    一旦 locator 出現,應執行的函式。此函式應移除封鎖動作(例如按一下)的元素。

  • options Page.AddLocatorHandlerOptions (選用)

    • setNoWaitAfter boolean (選用)在 v1.44 中新增#

      依預設,在呼叫處理常式之後,Playwright 將等待直到覆蓋層變成隱藏,然後 Playwright 才會繼續執行觸發處理常式的動作/判斷提示。此選項允許選擇退出此行為,以便在處理常式執行後覆蓋層可以保持可見。

    • setTimes int (選用)在 v1.44 中新增#

      指定應呼叫此處理常式的最大次數。預設為無限制。

傳回


addScriptTag

在 v1.9 之前新增 page.addScriptTag

<script> 標籤新增到頁面中,其中包含所需的 URL 或內容。當腳本的 onload 事件觸發或腳本內容注入到框架中時,傳回新增的標籤。

用法

Page.addScriptTag();
Page.addScriptTag(options);

引數

  • options Page.AddScriptTagOptions (選用)
    • setContent 字串 (選用)#

      要注入到框架中的原始 JavaScript 內容。

    • setPath 路徑 (選用)#

      要注入到框架中的 JavaScript 檔案路徑。如果 path 是相對路徑,則會相對於目前的工作目錄解析。

    • setType 字串 (選用)#

      腳本類型。使用 'module' 以載入 JavaScript ES6 模組。請參閱 script 以取得更多詳細資訊。

    • setUrl 字串 (選用)#

      要新增的腳本的 URL。

傳回


addStyleTag

在 v1.9 之前新增 page.addStyleTag

<link rel="stylesheet"> 標籤新增到頁面中,其中包含所需的 URL 或包含內容的 <style type="text/css"> 標籤。當樣式表的 onload 事件觸發或 CSS 內容注入到框架中時,傳回新增的標籤。

用法

Page.addStyleTag();
Page.addStyleTag(options);

引數

  • options Page.AddStyleTagOptions (選用)
    • setContent 字串 (選用)#

      要注入到框架中的原始 CSS 內容。

    • setPath 路徑 (選用)#

      要注入到框架中的 CSS 檔案路徑。如果 path 是相對路徑,則會相對於目前的工作目錄解析。

    • setUrl 字串 (選用)#

      <link> 標籤的 URL。

傳回


bringToFront

在 v1.9 之前新增 page.bringToFront

將頁面帶到前景(啟動分頁)。

用法

Page.bringToFront();

傳回


close

在 v1.9 之前新增 page.close

如果 setRunBeforeUnloadfalse,則不會執行任何卸載處理常式,並等待頁面關閉。如果 setRunBeforeUnloadtrue,則此方法將執行卸載處理常式,但不會等待頁面關閉。

依預設,page.close() 不會執行 beforeunload 處理常式。

注意

如果 setRunBeforeUnload 傳遞為 true,則可能會傳喚 beforeunload 對話方塊,應透過 Page.onDialog(handler) 事件手動處理。

用法

Page.close();
Page.close(options);

引數

  • options Page.CloseOptions (選用)
    • setReason 字串 (選用)在 v1.40 中新增#

      要向頁面關閉中斷的操作報告的原因。

    • setRunBeforeUnload boolean (選用)#

      預設為 false。是否執行 before unload 頁面處理常式。

傳回


content

在 v1.9 之前新增 page.content

取得頁面的完整 HTML 內容,包括 doctype。

用法

Page.content();

傳回


context

在 v1.9 之前新增 page.context

取得頁面所屬的瀏覽器內容。

用法

Page.context();

傳回


dragAndDrop

在 v1.13 中新增 page.dragAndDrop

此方法將來源元素拖曳到目標元素。它會先移動到來源元素,執行 mousedown,然後移動到目標元素並執行 mouseup

用法

page.dragAndDrop("#source", "#target");
// or specify exact positions relative to the top-left corners of the elements:
page.dragAndDrop("#source", "#target", new Page.DragAndDropOptions()
.setSourcePosition(34, 7).setTargetPosition(10, 20));

引數

  • source 字串#

    要搜尋要拖曳的元素的選取器。如果有多個元素符合選取器,將使用第一個。

  • target 字串#

    要搜尋要拖放到的元素的選取器。如果有多個元素符合選取器,將使用第一個。

  • options Page.DragAndDropOptions (選用)

    • setForce boolean (選用)#

      是否略過 可操作性 檢查。預設為 false

    • setNoWaitAfter boolean (選用)#

      已淘汰

      此選項無效。

      此選項無效。

    • setSourcePosition SourcePosition (選用)在 v1.14 中新增#

      在此點按一下來源元素,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某些可見點。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTargetPosition TargetPosition (選用)在 v1.14 中新增#

      在此點拖放到目標元素上,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某些可見點。

    • setTimeout double (選用)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial boolean (選用)#

      設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為 false。用於等待元素準備好進行動作而無需執行它。

傳回


emulateMedia

在 v1.9 之前新增 page.emulateMedia

此方法透過 media 引數變更 CSS 媒體類型,和/或使用 colorScheme 引數變更 'prefers-colors-scheme' 媒體功能。

用法

page.evaluate("() => matchMedia('screen').matches");
// → true
page.evaluate("() => matchMedia('print').matches");
// → false

page.emulateMedia(new Page.EmulateMediaOptions().setMedia(Media.PRINT));
page.evaluate("() => matchMedia('screen').matches");
// → false
page.evaluate("() => matchMedia('print').matches");
// → true

page.emulateMedia(new Page.EmulateMediaOptions());
page.evaluate("() => matchMedia('screen').matches");
// → true
page.evaluate("() => matchMedia('print').matches");
// → false
page.emulateMedia(new Page.EmulateMediaOptions().setColorScheme(ColorScheme.DARK));
page.evaluate("() => matchMedia('(prefers-color-scheme: dark)').matches");
// → true
page.evaluate("() => matchMedia('(prefers-color-scheme: light)').matches");
// → false

引數

  • options Page.EmulateMediaOptions (選用)
    • setColorScheme null | enum ColorScheme { LIGHT, DARK, NO_PREFERENCE } (選用)在 v1.9 中新增#

      模擬 prefers-colors-scheme 媒體功能,支援的值為 'light''dark'。傳遞 null 會停用色彩配置模擬。'no-preference' 已淘汰。

    • setForcedColors null | enum ForcedColors { ACTIVE, NONE } (選用)在 v1.15 中新增#

      模擬 'forced-colors' 媒體功能,支援的值為 'active''none'。傳遞 null 會停用強制色彩模擬。

    • setMedia null | enum Media { SCREEN, PRINT } (選用)在 v1.9 中新增#

      變更頁面的 CSS 媒體類型。唯一允許的值為 'screen''print'null。傳遞 null 會停用 CSS 媒體模擬。

    • setReducedMotion null | enum ReducedMotion { REDUCE, NO_PREFERENCE } (選用)在 v1.12 中新增#

      模擬 'prefers-reduced-motion' 媒體功能,支援的值為 'reduce''no-preference'。傳遞 null 會停用減少動態效果模擬。

傳回


evaluate

在 v1.9 之前新增 page.evaluate

傳回 expression 呼叫的值。

如果傳遞給 Page.evaluate() 的函式傳回 Promise,則 Page.evaluate() 將等待 Promise 解析並傳回其值。

如果傳遞給 Page.evaluate() 的函式傳回非 Serializable 值,則 Page.evaluate() 會解析為 undefined。Playwright 也支援傳輸一些其他無法透過 JSON 序列化的值:-0NaNInfinity-Infinity

用法

將引數傳遞至 expression

Object result = page.evaluate("([x, y]) => {\n" +
" return Promise.resolve(x * y);\n" +
"}", Arrays.asList(7, 8));
System.out.println(result); // prints "56"

也可以傳遞字串而不是函式

System.out.println(page.evaluate("1 + 2")); // prints "3"

ElementHandle 實例可以作為引數傳遞至 Page.evaluate()

ElementHandle bodyHandle = page.evaluate("document.body");
String html = (String) page.evaluate("([body, suffix]) => body.innerHTML + suffix", Arrays.asList(bodyHandle, "hello"));
bodyHandle.dispose();

引數

  • expression 字串#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選用)#

    要傳遞至 expression 的選用引數。

傳回


evaluateHandle

在 v1.9 之前新增 page.evaluateHandle

傳回 expression 呼叫的值,作為 JSHandle

Page.evaluate()Page.evaluateHandle() 之間的唯一區別在於 Page.evaluateHandle() 傳回 JSHandle

如果傳遞給 Page.evaluateHandle() 的函式傳回 Promise,則 Page.evaluateHandle() 將等待 Promise 解析並傳回其值。

用法

// Handle for the window object.
JSHandle aWindowHandle = page.evaluateHandle("() => Promise.resolve(window)");

也可以傳遞字串而不是函式

JSHandle aHandle = page.evaluateHandle("document"); // Handle for the "document".

JSHandle 實例可以作為引數傳遞至 Page.evaluateHandle()

JSHandle aHandle = page.evaluateHandle("() => document.body");
JSHandle resultHandle = page.evaluateHandle("([body, suffix]) => body.innerHTML + suffix", Arrays.asList(aHandle, "hello"));
System.out.println(resultHandle.jsonValue());
resultHandle.dispose();

引數

  • expression 字串#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選用)#

    要傳遞至 expression 的選用引數。

傳回


exposeBinding

在 v1.9 之前新增 page.exposeBinding

此方法在頁面中每個框架的 window 物件上新增一個名為 name 的函式。呼叫時,此函式會執行 callback,並傳回一個 Promise,該 Promise 會解析為 callback 的傳回值。如果 callback 傳回 Promise,則將會等待它。

callback 函式的第一個引數包含有關呼叫者的資訊:{ browserContext: BrowserContext, page: Page, frame: Frame }

請參閱 BrowserContext.exposeBinding() 以取得內容範圍的版本。

注意

透過 Page.exposeBinding() 安裝的函式在導航後仍然存在。

用法

將頁面 URL 公開給頁面中所有框架的範例

import com.microsoft.playwright.*;

public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType webkit = playwright.webkit();
Browser browser = webkit.launch(new BrowserType.LaunchOptions().setHeadless(false));
BrowserContext context = browser.newContext();
Page page = context.newPage();
page.exposeBinding("pageURL", (source, args) -> source.page().url());
page.setContent("<script>\n" +
" async function onClick() {\n" +
" document.querySelector('div').textContent = await window.pageURL();\n" +
" }\n" +
"</script>\n" +
"<button onclick=\"onClick()\">Click me</button>\n" +
"<div></div>");
page.click("button");
}
}
}

引數

  • name 字串#

    window 物件上函式的名稱。

  • callback BindingCallback#

    將在 Playwright 的內容中呼叫的回呼函式。

  • options Page.ExposeBindingOptions (選用)

    • setHandle boolean (選用)#

      已淘汰

      此選項將在未來版本中移除。

      是否將引數作為控制代碼傳遞,而不是依值傳遞。當傳遞控制代碼時,僅支援一個引數。當依值傳遞時,支援多個引數。

傳回


exposeFunction

在 v1.9 之前新增 page.exposeFunction

此方法在頁面中每個框架的 window 物件上新增一個名為 name 的函式。呼叫時,此函式會執行 callback,並傳回一個 Promise,該 Promise 會解析為 callback 的傳回值。

如果 callback 傳回 Promise,則將會等待它。

請參閱 BrowserContext.exposeFunction() 以取得內容範圍的公開函式。

注意

透過 Page.exposeFunction() 安裝的函式在導航後仍然存在。

用法

sha256 函式新增至頁面的範例

import com.microsoft.playwright.*;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType webkit = playwright.webkit();
Browser browser = webkit.launch(new BrowserType.LaunchOptions().setHeadless(false));
Page page = browser.newPage();
page.exposeFunction("sha256", args -> {
try {
String text = (String) args[0];
MessageDigest crypto = MessageDigest.getInstance("SHA-256");
byte[] token = crypto.digest(text.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(token);
} catch (NoSuchAlgorithmException e) {
return null;
}
});
page.setContent(
"<script>\n" +
" async function onClick() {\n" +
" document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');\n" +
" }\n" +
"</script>\n" +
"<button onclick=\"onClick()\">Click me</button>\n" +
"<div></div>"
);
page.click("button");
}
}
}

引數

  • name 字串#

    window 物件上函式的名稱

  • callback FunctionCallback#

    將在 Playwright 的內容中呼叫的回呼函式。

傳回


frame

在 v1.9 之前新增 page.frame

傳回符合指定條件的框架。必須指定 nameurl 其中之一。

用法

Frame frame = page.frame("frame-name");
Frame frame = page.frameByUrl(Pattern.compile(".*domain.*"));

引數

  • name 字串在 v1.9 中新增#

    iframename 屬性中指定的框架名稱。

傳回


frameByUrl

在 v1.9 中新增 page.frameByUrl

傳回 URL 相符的 frame。

用法

Page.frameByUrl(url);

引數

傳回


frameLocator

新增於: v1.17 page.frameLocator

當使用 iframe 時,您可以建立一個 frame 定位器,它將進入 iframe 並允許在該 iframe 中選取元素。

用法

以下程式碼片段在 id 為 my-frame 的 iframe 中尋找文字為「Submit」的元素,例如 <iframe id="my-frame">

Locator locator = page.frameLocator("#my-iframe").getByText("Submit");
locator.click();

引數

  • selector String#

    用於解析 DOM 元素時使用的選取器。

傳回


frames

在 v1.9 之前新增 page.frames

附加到頁面的所有 frame 的陣列。

用法

Page.frames();

傳回


getByAltText

新增於: v1.27 page.getByAltText

允許透過元素的 alt 文字來定位元素。

用法

例如,此方法將透過 alt 文字「Playwright logo」找到圖片

<img alt='Playwright logo'>
page.getByAltText("Playwright logo").click();

引數

  • text String | Pattern#

    用於定位元素的文字。

  • options Page.GetByAltTextOptions (選填)

    • setExact boolean (選填)#

      是否尋找完全符合的項目:區分大小寫且完全字串符合。預設為 false。當透過正規表示式定位時會被忽略。請注意,完全符合仍然會修剪空白字元。

傳回


getByLabel

新增於: v1.27 page.getByLabel

允許透過相關聯的 <label>aria-labelledby 元素的文字,或透過 aria-label 屬性來定位輸入元素。

用法

例如,此方法將在以下 DOM 中透過標籤「Username」和「Password」找到輸入

<input aria-label="Username">
<label for="password-input">Password:</label>
<input id="password-input">
page.getByLabel("Username").fill("john");
page.getByLabel("Password").fill("secret");

引數

  • text String | Pattern#

    用於定位元素的文字。

  • options Page.GetByLabelOptions (選填)

    • setExact boolean (選填)#

      是否尋找完全符合的項目:區分大小寫且完全字串符合。預設為 false。當透過正規表示式定位時會被忽略。請注意,完全符合仍然會修剪空白字元。

傳回


getByPlaceholder

新增於: v1.27 page.getByPlaceholder

允許透過 placeholder 文字來定位輸入元素。

用法

例如,考慮以下 DOM 結構。

<input type="email" placeholder="name@example.com" />

您可以在透過 placeholder 文字定位輸入後填寫內容

page.getByPlaceholder("name@example.com").fill("playwright@microsoft.com");

引數

  • text String | Pattern#

    用於定位元素的文字。

  • options Page.GetByPlaceholderOptions (選填)

    • setExact boolean (選填)#

      是否尋找完全符合的項目:區分大小寫且完全字串符合。預設為 false。當透過正規表示式定位時會被忽略。請注意,完全符合仍然會修剪空白字元。

傳回


getByRole

新增於: v1.27 page.getByRole

允許透過元素的 ARIA 角色ARIA 屬性可訪問名稱來定位元素。

用法

考慮以下 DOM 結構。

<h3>Sign up</h3>
<label>
<input type="checkbox" /> Subscribe
</label>
<br/>
<button>Submit</button>

您可以透過其隱含角色來定位每個元素

assertThat(page
.getByRole(AriaRole.HEADING,
new Page.GetByRoleOptions().setName("Sign up")))
.isVisible();

page.getByRole(AriaRole.CHECKBOX,
new Page.GetByRoleOptions().setName("Subscribe"))
.check();

page.getByRole(AriaRole.BUTTON,
new Page.GetByRoleOptions().setName(
Pattern.compile("submit", Pattern.CASE_INSENSITIVE)))
.click();

引數

  • role enum AriaRole { ALERT, ALERTDIALOG, APPLICATION, ARTICLE, BANNER, BLOCKQUOTE, BUTTON, CAPTION, CELL, CHECKBOX, CODE, COLUMNHEADER, COMBOBOX, COMPLEMENTARY, CONTENTINFO, DEFINITION, DELETION, DIALOG, DIRECTORY, DOCUMENT, EMPHASIS, FEED, FIGURE, FORM, GENERIC, GRID, GRIDCELL, GROUP, HEADING, IMG, INSERTION, LINK, LIST, LISTBOX, LISTITEM, LOG, MAIN, MARQUEE, MATH, METER, MENU, MENUBAR, MENUITEM, MENUITEMCHECKBOX, MENUITEMRADIO, NAVIGATION, NONE, NOTE, OPTION, PARAGRAPH, PRESENTATION, PROGRESSBAR, RADIO, RADIOGROUP, REGION, ROW, ROWGROUP, ROWHEADER, SCROLLBAR, SEARCH, SEARCHBOX, SEPARATOR, SLIDER, SPINBUTTON, STATUS, STRONG, SUBSCRIPT, SUPERSCRIPT, SWITCH, TAB, TABLE, TABLIST, TABPANEL, TERM, TEXTBOX, TIME, TIMER, TOOLBAR, TOOLTIP, TREE, TREEGRID, TREEITEM }#

    必要的 aria 角色。

  • options Page.GetByRoleOptions (選填)

    • setChecked boolean (選填)#

      通常由 aria-checked 或原生 <input type=checkbox> 控制項設定的屬性。

      深入瞭解 aria-checked

    • setDisabled boolean (選填)#

      通常由 aria-disableddisabled 設定的屬性。

      注意

      與大多數其他屬性不同,disabled 是透過 DOM 階層繼承的。深入瞭解 aria-disabled

    • setExact boolean (選填)新增於: v1.28#

      是否完全比對 setName:區分大小寫且完全字串符合。預設為 false。當 setName 是正規表示式時會被忽略。請注意,完全符合仍然會修剪空白字元。

    • setExpanded boolean (選填)#

      通常由 aria-expanded 設定的屬性。

      深入瞭解 aria-expanded

    • setIncludeHidden boolean (選填)#

      控制是否匹配隱藏元素的選項。預設情況下,只有非隱藏元素(如 ARIA 定義)會被角色選取器匹配。

      深入瞭解 aria-hidden

    • setLevel int (選填)#

      數字屬性,通常存在於角色 headinglistitemrowtreeitem 中,對於 <h1>-<h6> 元素具有預設值。

      深入瞭解 aria-level

    • setName String | Pattern (選填)#

      用於匹配可訪問名稱的選項。預設情況下,匹配不區分大小寫並搜尋子字串,使用 setExact 來控制此行為。

      深入瞭解 可訪問名稱

    • setPressed boolean (選填)#

      通常由 aria-pressed 設定的屬性。

      深入瞭解 aria-pressed

    • setSelected boolean (選填)#

      通常由 aria-selected 設定的屬性。

      深入瞭解 aria-selected

傳回

詳細資訊

角色選取器不會取代可訪問性稽核和一致性測試,而是提供關於 ARIA 指南的早期回饋。

許多 html 元素具有隱含的 定義角色,角色選取器可以識別該角色。您可以在此處找到所有支援的角色。ARIA 指南不建議透過將 role 和/或 aria-* 屬性設定為預設值來複製隱含角色和屬性。


getByTestId

新增於: v1.27 page.getByTestId

透過測試 ID 定位元素。

用法

考慮以下 DOM 結構。

<button data-testid="directions">Itinéraire</button>

您可以透過元素的測試 ID 來定位元素

page.getByTestId("directions").click();

引數

傳回

詳細資訊

預設情況下,data-testid 屬性用作測試 ID。如有必要,請使用 Selectors.setTestIdAttribute() 來設定不同的測試 ID 屬性。


getByText

新增於: v1.27 page.getByText

允許定位包含給定文字的元素。

另請參閱 Locator.filter(),它允許透過其他條件(例如可訪問角色)進行匹配,然後透過文字內容進行篩選。

用法

考慮以下 DOM 結構

<div>Hello <span>world</span></div>
<div>Hello</div>

您可以透過文字子字串、完全字串或正規表示式進行定位

// Matches <span>
page.getByText("world");

// Matches first <div>
page.getByText("Hello world");

// Matches second <div>
page.getByText("Hello", new Page.GetByTextOptions().setExact(true));

// Matches both <div>s
page.getByText(Pattern.compile("Hello"));

// Matches second <div>
page.getByText(Pattern.compile("^hello$", Pattern.CASE_INSENSITIVE));

引數

  • text String | Pattern#

    用於定位元素的文字。

  • options Page.GetByTextOptions (選填)

    • setExact boolean (選填)#

      是否尋找完全符合的項目:區分大小寫且完全字串符合。預設為 false。當透過正規表示式定位時會被忽略。請注意,完全符合仍然會修剪空白字元。

傳回

詳細資訊

透過文字進行匹配始終會正規化空白字元,即使是完全符合也是如此。例如,它會將多個空格變成一個,將換行符號變成空格,並忽略開頭和結尾的空白字元。

類型為 buttonsubmit 的輸入元素會透過它們的 value 而不是文字內容進行匹配。例如,透過文字 "Log in" 定位會匹配 <input type=button value="Log in">


getByTitle

新增於: v1.27 page.getByTitle

允許透過元素的 title 屬性來定位元素。

用法

考慮以下 DOM 結構。

<span title='Issues count'>25 issues</span>

您可以在透過標題文字定位問題計數後檢查問題計數

assertThat(page.getByTitle("Issues count")).hasText("25 issues");

引數

  • text String | Pattern#

    用於定位元素的文字。

  • options Page.GetByTitleOptions (選填)

    • setExact boolean (選填)#

      是否尋找完全符合的項目:區分大小寫且完全字串符合。預設為 false。當透過正規表示式定位時會被忽略。請注意,完全符合仍然會修剪空白字元。

傳回


goBack

在 v1.9 之前新增 page.goBack

傳回主要資源回應。在多次重新導向的情況下,導航將解析為最後一次重新導向的回應。如果無法返回,則傳回 null

導航到歷史記錄中的前一頁。

用法

Page.goBack();
Page.goBack(options);

引數

  • options Page.GoBackOptions (選填)
    • setTimeout double (選填)#

      最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()BrowserContext.setDefaultTimeout()Page.setDefaultNavigationTimeout()Page.setDefaultTimeout() 方法進行變更。

    • setWaitUntil enum WaitUntilState { LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT } (選填)#

      何時視為操作成功,預設為 load。事件可以是

      • 'domcontentloaded' - 當觸發 DOMContentLoaded 事件時,視為操作完成。
      • 'load' - 當觸發 load 事件時,視為操作完成。
      • 'networkidle' - 不建議使用 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而應依賴 Web 斷言來評估就緒狀態。
      • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


goForward

在 v1.9 之前新增 page.goForward

傳回主要資源回應。在多次重新導向的情況下,導航將解析為最後一次重新導向的回應。如果無法前進,則傳回 null

導航到歷史記錄中的下一頁。

用法

Page.goForward();
Page.goForward(options);

引數

  • options Page.GoForwardOptions (選填)
    • setTimeout double (選填)#

      最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()BrowserContext.setDefaultTimeout()Page.setDefaultNavigationTimeout()Page.setDefaultTimeout() 方法進行變更。

    • setWaitUntil enum WaitUntilState { LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT } (選填)#

      何時視為操作成功,預設為 load。事件可以是

      • 'domcontentloaded' - 當觸發 DOMContentLoaded 事件時,視為操作完成。
      • 'load' - 當觸發 load 事件時,視為操作完成。
      • 'networkidle' - 不建議使用 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而應依賴 Web 斷言來評估就緒狀態。
      • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


isClosed

在 v1.9 之前新增 page.isClosed

表示頁面已關閉。

用法

Page.isClosed();

傳回


locator

在 v1.14 中新增 page.locator

此方法傳回元素定位器,可用於在此頁面/frame 上執行操作。定位器會在執行操作之前立即解析為元素,因此在同一個定位器上執行的一系列操作實際上可以在不同的 DOM 元素上執行。如果這些操作之間的 DOM 結構已變更,則會發生這種情況。

深入瞭解 定位器.

用法

Page.locator(selector);
Page.locator(selector, options);

引數

  • selector String#

    用於解析 DOM 元素時使用的選取器。

  • options Page.LocatorOptions (選填)

    • setHas Locator (選填)#

      將方法的結果縮小到那些包含與此相對定位器匹配的元素的結果。例如,具有 text=Playwrightarticle 會匹配 <article><div>Playwright</div></article>

      內部定位器必須相對於外部定位器,並且從外部定位器匹配開始查詢,而不是從文件根目錄開始查詢。例如,您可以找到 content,它在 <article><content><div>Playwright</div></content></article> 中具有 div。但是,尋找具有 article divcontent 將會失敗,因為內部定位器必須是相對的,並且不應使用 content 之外的任何元素。

      請注意,外部和內部定位器必須屬於同一個 frame。內部定位器不得包含 FrameLocator

    • setHasNot Locator (選填)新增於: v1.33#

      匹配不包含與內部定位器匹配的元素的元素。內部定位器是針對外部定位器查詢的。例如,沒有 divarticle 會匹配 <article><span>Playwright</span></article>

      請注意,外部和內部定位器必須屬於同一個 frame。內部定位器不得包含 FrameLocator

    • setHasNotText String | Pattern (選填)新增於: v1.33#

      匹配在內部某處(可能在子元素或後代元素中)不包含指定文字的元素。當傳遞 string 時,匹配不區分大小寫並搜尋子字串。

    • setHasText String | Pattern (選填)#

      匹配在內部某處(可能在子元素或後代元素中)包含指定文字的元素。當傳遞 string 時,匹配不區分大小寫並搜尋子字串。例如,"Playwright" 會匹配 <article><div>Playwright</div></article>

傳回


mainFrame

在 v1.9 之前新增 page.mainFrame

頁面的主 frame。頁面保證有一個在導航期間持續存在的主 frame。

用法

Page.mainFrame();

傳回


navigate

在 v1.9 之前新增 page.navigate

傳回主要資源回應。在多次重新導向的情況下,導航將解析為第一個非重新導向的回應。

如果發生以下情況,此方法將拋出錯誤

  • 存在 SSL 錯誤(例如,在自我簽署憑證的情況下)。
  • 目標 URL 無效。
  • 在導航期間超過 setTimeout
  • 遠端伺服器沒有回應或無法連線。
  • 主要資源載入失敗。

當遠端伺服器傳回任何有效的 HTTP 狀態碼(包括 404 "Not Found" 和 500 "Internal Server Error")時,此方法不會拋出錯誤。此類回應的狀態碼可以透過呼叫 Response.status() 來擷取。

注意

此方法會拋出錯誤或傳回主要資源回應。唯一的例外是導航到 about:blank 或使用不同雜湊導航到相同的 URL,這將會成功並傳回 null

注意

無頭模式不支援導航到 PDF 文件。請參閱 上游問題

用法

Page.navigate(url);
Page.navigate(url, options);

引數

  • url String#

    要導航到的頁面 URL。url 應包含 scheme,例如 https://。當透過上下文選項提供 setBaseURL 且傳遞的 URL 是路徑時,它會透過 new URL() 建構函式合併。

  • options Page.NavigateOptions (選填)

    • setReferer String (選填)#

      Referer 標頭值。如果提供,它將優先於由 Page.setExtraHTTPHeaders() 設定的 referer 標頭值。

    • setTimeout double (選填)#

      最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()BrowserContext.setDefaultTimeout()Page.setDefaultNavigationTimeout()Page.setDefaultTimeout() 方法進行變更。

    • setWaitUntil enum WaitUntilState { LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT } (選填)#

      何時視為操作成功,預設為 load。事件可以是

      • 'domcontentloaded' - 當觸發 DOMContentLoaded 事件時,視為操作完成。
      • 'load' - 當觸發 load 事件時,視為操作完成。
      • 'networkidle' - 不建議使用 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而應依賴 Web 斷言來評估就緒狀態。
      • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


onceDialog

新增於: v1.10 page.onceDialog

新增一次性的 Dialog 處理常式。處理常式將在下一個 Dialog 建立後立即移除。

page.onceDialog(dialog -> {
dialog.accept("foo");
});

// prints 'foo'
System.out.println(page.evaluate("prompt('Enter string:')"));

// prints 'null' as the dialog will be auto-dismissed because there are no handlers.
System.out.println(page.evaluate("prompt('Enter string:')"));

以上程式碼等效於

Consumer<Dialog> handler = new Consumer<Dialog>() {
@Override
public void accept(Dialog dialog) {
dialog.accept("foo");
page.offDialog(this);
}
};
page.onDialog(handler);

// prints 'foo'
System.out.println(page.evaluate("prompt('Enter string:')"));

// prints 'null' as the dialog will be auto-dismissed because there are no handlers.
System.out.println(page.evaluate("prompt('Enter string:')"));

用法

Page.onceDialog(handler);

引數


opener

在 v1.9 之前新增 page.opener

傳回彈出頁面的 opener,其他頁面則傳回 null。如果 opener 已關閉,則傳回 null

用法

Page.opener();

傳回


pause

在 v1.9 中新增 page.pause

暫停腳本執行。Playwright 將停止執行腳本,並等待使用者按下頁面覆蓋層中的「繼續」按鈕,或在 DevTools 控制台中呼叫 playwright.resume()

使用者可以在暫停時檢查選取器或執行手動步驟。「繼續」將從暫停的位置繼續執行原始腳本。

注意

此方法要求 Playwright 在有頭模式下啟動,且 setHeadless 選項為 falsy。

用法

Page.pause();

傳回


pdf

在 v1.9 之前新增 page.pdf

傳回 PDF 緩衝區。

page.pdf() 使用 print css 媒體產生頁面的 pdf。若要使用 screen 媒體產生 pdf,請在呼叫 page.pdf() 之前呼叫 Page.emulateMedia()

注意

預設情況下,page.pdf() 產生的 pdf 會修改顏色以進行列印。使用 -webkit-print-color-adjust 屬性來強制呈現精確的顏色。

用法

// Generates a PDF with "screen" media type.
page.emulateMedia(new Page.EmulateMediaOptions().setMedia(Media.SCREEN));
page.pdf(new Page.PdfOptions().setPath(Paths.get("page.pdf")));

setWidthsetHeightsetMargin 選項接受標記單位的數值。未標記單位的值會被視為像素。

一些範例

  • page.pdf({width: 100}) - 以寬度設定為 100 像素列印
  • page.pdf({width: '100px'}) - 以寬度設定為 100 像素列印
  • page.pdf({width: '10cm'}) - 以寬度設定為 10 公分列印。

所有可能的單位為

  • px - 像素
  • in - 英吋
  • cm - 公分
  • mm - 毫米

setFormat 選項為

  • Letter: 8.5 英吋 x 11 英吋
  • Legal: 8.5 英吋 x 14 英吋
  • Tabloid: 11 英吋 x 17 英吋
  • Ledger: 17 英吋 x 11 英吋
  • A0: 33.1 英吋 x 46.8 英吋
  • A1: 23.4 英吋 x 33.1 英吋
  • A2: 16.54 英吋 x 23.4 英吋
  • A3: 11.7 英吋 x 16.54 英吋
  • A4: 8.27 英吋 x 11.7 英吋
  • A5: 5.83 英吋 x 8.27 英吋
  • A6: 4.13 英吋 x 5.83 英吋
注意

setHeaderTemplatesetFooterTemplate 標記具有以下限制: > 1. 範本內的 Script 標籤不會被評估。 > 2. 頁面樣式在範本內不可見。

引數

  • options Page.PdfOptions (選填)
    • setDisplayHeaderFooter boolean (選填)#

      顯示頁首和頁尾。預設為 false

    • setFooterTemplate String (選填)#

      用於列印頁尾的 HTML 範本。應使用與 setHeaderTemplate 相同的格式。

    • setFormat String (選填)#

      紙張格式。如果設定,優先於 setWidthsetHeight 選項。預設值為 'Letter'。

    • setHeaderTemplate 字串 (String) (選填)#

      列印頁首的 HTML 範本。應為有效的 HTML 標記,並使用以下類別將列印值注入其中

      • 'date' 已格式化的列印日期
      • 'title' 文件標題
      • 'url' 文件位置
      • 'pageNumber' 目前頁碼
      • 'totalPages' 文件總頁數
    • setHeight 字串 (String) (選填)#

      紙張高度,接受帶單位的數值。

    • setLandscape 布林值 (boolean) (選填)#

      紙張方向。預設值為 false (直向)。

    • setMargin 邊界 (Margin) (選填)#

      • setTop 字串 (String) (選填)

        上邊界,接受帶單位的數值。預設值為 0

      • setRight 字串 (String) (選填)

        右邊界,接受帶單位的數值。預設值為 0

      • setBottom 字串 (String) (選填)

        下邊界,接受帶單位的數值。預設值為 0

      • setLeft 字串 (String) (選填)

        左邊界,接受帶單位的數值。預設值為 0

      紙張邊界,預設為無。

    • setOutline 布林值 (boolean) (選填)在 v1.42 中新增#

      是否將文件大綱嵌入 PDF 中。預設值為 false

    • setPageRanges 字串 (String) (選填)#

      要列印的頁面範圍,例如 '1-5, 8, 11-13'。預設值為空字串,表示列印所有頁面。

    • setPath 路徑 (Path) (選填)#

      儲存 PDF 的檔案路徑。如果 setPath 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,PDF 將不會儲存到磁碟。

    • setPreferCSSPageSize 布林值 (boolean) (選填)#

      優先採用頁面中宣告的任何 CSS @page 尺寸,而不是 setWidthsetHeightsetFormat 選項中宣告的尺寸。預設值為 false,這會縮放內容以符合紙張尺寸。

    • setPrintBackground 布林值 (boolean) (選填)#

      列印背景圖形。預設值為 false

    • setScale 雙精度浮點數 (double) (選填)#

      網頁呈現的縮放比例。預設值為 1。縮放比例必須介於 0.1 和 2 之間。

    • setTagged 布林值 (boolean) (選填)在 v1.42 中新增#

      是否產生標記 (無障礙) PDF。預設值為 false

    • setWidth 字串 (String) (選填)#

      紙張寬度,接受帶單位的數值。

傳回


重新載入 (reload)

在 v1.9 之前新增 page.reload

此方法重新載入目前頁面,與使用者觸發瀏覽器重新整理的方式相同。傳回主要資源回應。如果發生多次重新導向,導航將會以最後一次重新導向的回應來解析。

用法

Page.reload();
Page.reload(options);

引數

  • options Page.ReloadOptions (選填)
    • setTimeout 雙精度浮點數 (double) (選填)#

      最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()BrowserContext.setDefaultTimeout()Page.setDefaultNavigationTimeout()Page.setDefaultTimeout() 方法進行變更。

    • setWaitUntil enum WaitUntilState { LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT } (選填)#

      何時視為操作成功,預設為 load。事件可以是

      • 'domcontentloaded' - 當觸發 DOMContentLoaded 事件時,視為操作完成。
      • 'load' - 當觸發 load 事件時,視為操作完成。
      • 'networkidle' - 不建議使用 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而應依賴 Web 斷言來評估就緒狀態。
      • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


移除定位器處理程序 (removeLocatorHandler)

在 v1.44 中新增 page.removeLocatorHandler

移除由 Page.addLocatorHandler() 為特定定位器新增的所有定位器處理程序。

用法

Page.removeLocatorHandler(locator);

引數

傳回


請求垃圾回收 (requestGC)

新增於:v1.48 page.requestGC

請求頁面執行垃圾回收。請注意,不保證所有無法存取的物件都會被回收。

這對於協助偵測記憶體洩漏很有用。例如,如果您的頁面有一個可能洩漏的大型物件 'suspect',您可以使用 WeakRef 來檢查它是否沒有洩漏。

// 1. In your page, save a WeakRef for the "suspect".
page.evaluate("globalThis.suspectWeakRef = new WeakRef(suspect)");
// 2. Request garbage collection.
page.requestGC();
// 3. Check that weak ref does not deref to the original object.
assertTrue(page.evaluate("!globalThis.suspectWeakRef.deref()"));

用法

Page.requestGC();

傳回


路由 (route)

在 v1.9 之前新增 page.route

路由功能提供修改頁面所發出網路請求的能力。

啟用路由後,每個符合 URL 模式的請求都會暫停,除非它被繼續、滿足或中止。

注意

如果回應是重新導向,則只會為第一個 URL 呼叫處理程序。

注意

Page.route() 不會攔截 Service Worker 攔截的請求。請參閱 問題。我們建議在使用請求攔截時停用 Service Worker,方法是將 setServiceWorkers 設定為 'block'

注意

Page.route() 不會攔截彈出頁面的第一個請求。請改用 BrowserContext.route()

用法

一個中止所有圖片請求的簡單處理程序範例

Page page = browser.newPage();
page.route("**/*.{png,jpg,jpeg}", route -> route.abort());
page.navigate("https://example.com");
browser.close();

或使用正規表示式模式的相同程式碼片段

Page page = browser.newPage();
page.route(Pattern.compile("(\\.png$)|(\\.jpg$)"),route -> route.abort());
page.navigate("https://example.com");
browser.close();

可以檢查請求以決定路由動作。例如,模擬所有包含一些 post 資料的請求,並保持所有其他請求不變

page.route("/api/**", route -> {
if (route.request().postData().contains("my-string"))
route.fulfill(new Route.FulfillOptions().setBody("mocked-data"));
else
route.resume();
});

當請求同時符合頁面路由和瀏覽器內容路由 (使用 BrowserContext.route() 設定) 的處理程序時,頁面路由優先於瀏覽器內容路由。

若要移除路由及其處理程序,您可以使用 Page.unroute()

注意

啟用路由會停用 HTTP 快取。

引數

傳回


從 HAR 路由 (routeFromHAR)

新增於:v1.23 page.routeFromHAR

如果指定,則頁面中發出的網路請求將從 HAR 檔案提供。閱讀更多關於從 HAR 重新播放

Playwright 將不會從 HAR 檔案提供 Service Worker 攔截的請求。請參閱 問題。我們建議在使用請求攔截時停用 Service Worker,方法是將 setServiceWorkers 設定為 'block'

用法

Page.routeFromHAR(har);
Page.routeFromHAR(har, options);

引數

  • har 路徑 (Path)#

    包含預先錄製網路資料的 HAR 檔案路徑。如果 path 是相對路徑,則會相對於目前的工作目錄解析。

  • options Page.RouteFromHAROptions (選填)

    • setNotFound enum HarNotFound { ABORT, FALLBACK } (選填)#

      • 如果設定為 'abort',則 HAR 檔案中找不到的任何請求都將被中止。
      • 如果設定為 'fallback',則遺失的請求將被發送到網路。

      預設值為中止 (abort)。

    • setUpdate 布林值 (boolean) (選填)#

      如果指定,則會使用實際的網路資訊更新給定的 HAR,而不是從檔案提供。當呼叫 BrowserContext.close() 時,檔案會寫入磁碟。

    • setUpdateContent enum RouteFromHarUpdateContentPolicy { EMBED, ATTACH } (選填)新增於:v1.32#

      用於控制資源內容管理的選填設定。如果指定 attach,資源會以個別檔案或 ZIP 封存檔中的條目形式保存。如果指定 embed,內容會內嵌儲存在 HAR 檔案中。

    • setUpdateMode enum HarMode { FULL, MINIMAL } (選填)新增於:v1.32#

      當設定為 minimal 時,僅記錄從 HAR 路由所需的資訊。這會省略大小、時間、頁面、Cookie、安全性和其他在從 HAR 重新播放時未使用的 HAR 資訊。預設值為 minimal

    • setUrl 字串 (String) | 模式 (Pattern) (選填)#

      用於比對請求 URL 的 glob 模式、正規表示式或述詞。只有 URL 符合模式的請求才會從 HAR 檔案提供。如果未指定,則所有請求都從 HAR 檔案提供。

傳回


路由 WebSocket (routeWebSocket)

新增於:v1.48 page.routeWebSocket

此方法允許修改頁面建立的 WebSocket 連線。

請注意,只有在此方法呼叫之後建立的 WebSocket 才會被路由。建議在導航頁面之前呼叫此方法。

用法

以下是一個簡單模擬的範例,它回應單一訊息。請參閱 WebSocketRoute 以取得更多詳細資訊和範例。

page.routeWebSocket("/ws", ws -> {
ws.onMessage(frame -> {
if ("request".equals(frame.text()))
ws.send("response");
});
});

引數

傳回


螢幕截圖 (screenshot)

在 v1.9 之前新增 page.screenshot

傳回包含已擷取螢幕截圖的緩衝區。

用法

Page.screenshot();
Page.screenshot(options);

引數

  • options Page.ScreenshotOptions (選填)
    • setAnimations enum ScreenshotAnimations { DISABLED, ALLOW } (選填)#

      當設定為 "disabled" 時,停止 CSS 動畫、CSS 過渡和 Web Animations。動畫會根據其持續時間獲得不同的處理方式

      • 有限動畫會快速轉到完成,因此它們會觸發 transitionend 事件。
      • 無限動畫會取消到初始狀態,然後在螢幕截圖後重新播放。

      預設值為 "allow",這會保持動畫不變。

    • setCaret enum ScreenshotCaret { HIDE, INITIAL } (選填)#

      當設定為 "hide" 時,螢幕截圖將隱藏文字游標。當設定為 "initial" 時,文字游標行為將不會變更。預設值為 "hide"

    • setClip 裁切 (Clip) (選填)#

      指定結果影像裁切的物件。

    • setFullPage 布林值 (boolean) (選填)#

      當為 true 時,會擷取完整可捲動頁面的螢幕截圖,而不是目前可見的視窗。預設值為 false

    • setMask List<定位器 (Locator)> (選填)#

      指定在擷取螢幕截圖時應遮罩的定位器。遮罩元素將被粉紅色方框 #FF00FF (由 setMaskColor 自訂) 覆蓋,完全遮蓋其邊界框。

    • setMaskColor 字串 (String) (選填)新增於:v1.35#

      指定遮罩元素的覆蓋方框顏色,以 CSS 顏色格式 表示。預設顏色為粉紅色 #FF00FF

    • setOmitBackground 布林值 (boolean) (選填)#

      隱藏預設白色背景,並允許擷取具有透明度的螢幕截圖。不適用於 jpeg 影像。預設值為 false

    • setPath 路徑 (Path) (選填)#

      儲存影像的檔案路徑。螢幕截圖類型將從檔案副檔名推斷。如果 setPath 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,影像將不會儲存到磁碟。

    • setQuality 整數 (int) (選填)#

      影像品質,介於 0-100 之間。不適用於 png 影像。

    • setScale enum ScreenshotScale { CSS, DEVICE } (選填)#

      當設定為 "css" 時,螢幕截圖的每個 CSS 像素將有一個像素。對於高 DPI 裝置,這將使螢幕截圖保持較小。使用 "device" 選項將為每個裝置像素產生一個像素,因此高 DPI 裝置的螢幕截圖將是兩倍大甚至更大。

      預設值為 "device"

    • setStyle 字串 (String) (選填)新增於:v1.41#

      在製作螢幕截圖時要套用的樣式表文字。您可以在此處隱藏動態元素、使元素不可見或變更其屬性,以協助您建立可重複的螢幕截圖。此樣式表會穿透 Shadow DOM 並套用至內部框架。

    • setTimeout 雙精度浮點數 (double) (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setType enum ScreenshotType { PNG, JPEG } (選填)#

      指定螢幕截圖類型,預設值為 png

傳回


設定內容 (setContent)

在 v1.9 之前新增 page.setContent

此方法在內部呼叫 document.write(),繼承其所有特定特性和行為。

用法

Page.setContent(html);
Page.setContent(html, options);

引數

  • html 字串 (String)#

    要指派給頁面的 HTML 標記。

  • options Page.SetContentOptions (選填)

    • setTimeout 雙精度浮點數 (double) (選填)#

      最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()BrowserContext.setDefaultTimeout()Page.setDefaultNavigationTimeout()Page.setDefaultTimeout() 方法進行變更。

    • setWaitUntil enum WaitUntilState { LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT } (選填)#

      何時視為操作成功,預設為 load。事件可以是

      • 'domcontentloaded' - 當觸發 DOMContentLoaded 事件時,視為操作完成。
      • 'load' - 當觸發 load 事件時,視為操作完成。
      • 'networkidle' - 不建議使用 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而應依賴 Web 斷言來評估就緒狀態。
      • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


設定預設導航逾時 (setDefaultNavigationTimeout)

在 v1.9 之前新增 page.setDefaultNavigationTimeout

此設定將變更以下方法和相關快捷方式的預設最大導航時間

用法

Page.setDefaultNavigationTimeout(timeout);

引數


設定預設逾時 (setDefaultTimeout)

在 v1.9 之前新增 page.setDefaultTimeout

此設定將變更所有接受 timeout 選項的方法的預設最大時間。

用法

Page.setDefaultTimeout(timeout);

引數


設定額外 HTTP 標頭 (setExtraHTTPHeaders)

在 v1.9 之前新增 page.setExtraHTTPHeaders

額外的 HTTP 標頭將與頁面啟動的每個請求一起傳送。

注意

Page.setExtraHTTPHeaders() 不保證傳出請求中標頭的順序。

用法

Page.setExtraHTTPHeaders(headers);

引數

傳回


設定視窗尺寸 (setViewportSize)

在 v1.9 之前新增 page.setViewportSize

在單一瀏覽器中有多個頁面的情況下,每個頁面都可以有自己的視窗尺寸。但是,Browser.newContext() 允許一次為內容中的所有頁面設定視窗尺寸 (以及更多)。

Page.setViewportSize() 將調整頁面大小。許多網站不希望手機變更大小,因此您應該在導航到頁面之前設定視窗尺寸。Page.setViewportSize() 也會重設 screen 大小,如果您需要更好地控制這些屬性,請使用帶有 screenviewport 參數的 Browser.newContext()

用法

Page page = browser.newPage();
page.setViewportSize(640, 480);
page.navigate("https://example.com");

引數

  • width 整數 (int)新增於: v1.10#

    頁面寬度,以像素為單位。

  • height 整數 (int)新增於: v1.10#

    頁面高度,以像素為單位。

傳回


標題 (title)

在 v1.9 之前新增 page.title

傳回頁面的標題。

用法

Page.title();

傳回


取消路由 (unroute)

在 v1.9 之前新增 page.unroute

移除使用 Page.route() 建立的路由。當未指定 handler 時,移除 url 的所有路由。

用法

Page.unroute(url);
Page.unroute(url, handler);

引數

傳回


取消所有路由 (unrouteAll)

新增於:v1.41 page.unrouteAll

移除使用 Page.route()Page.routeFromHAR() 建立的所有路由。

用法

Page.unrouteAll();

傳回


網址 (url)

在 v1.9 之前新增 page.url

用法

Page.url();

傳回


影片 (video)

在 v1.9 之前新增 page.video

與此頁面關聯的影片物件。

用法

Page.video();

傳回


視窗尺寸 (viewportSize)

在 v1.9 之前新增 page.viewportSize

用法

Page.viewportSize();

傳回

  • null | 視窗尺寸 (ViewportSize)#

等待關閉 (waitForClose)

新增於:v1.11 page.waitForClose

執行動作並等待頁面關閉。

用法

Page.waitForClose(callback);
Page.waitForClose(callback, options);

引數

傳回


等待條件 (waitForCondition)

新增於:v1.32 page.waitForCondition

此方法將會封鎖,直到條件傳回 true。當方法等待條件時,將會分派所有 Playwright 事件。

用法

使用此方法等待取決於頁面事件的條件

List<String> messages = new ArrayList<>();
page.onConsoleMessage(m -> messages.add(m.text()));
page.getByText("Submit button").click();
page.waitForCondition(() -> messages.size() > 3);

引數

傳回


waitForConsoleMessage

在 v1.9 中新增 page.waitForConsoleMessage

執行動作並等待頁面中記錄 ConsoleMessage。如果提供 predicate,它會將 ConsoleMessage 值傳遞到 predicate 函數中,並等待 predicate(message) 返回真值。如果在 Page.onConsoleMessage(handler) 事件觸發之前頁面關閉,將拋出錯誤。

用法

Page.waitForConsoleMessage(callback);
Page.waitForConsoleMessage(callback, options);

引數

傳回


waitForDownload

在 v1.9 中新增 page.waitForDownload

執行動作並等待新的 Download。如果提供 predicate,它會將 Download 值傳遞到 predicate 函數中,並等待 predicate(download) 返回真值。如果在下載事件觸發之前頁面關閉,將拋出錯誤。

用法

Page.waitForDownload(callback);
Page.waitForDownload(callback, options);

引數

  • options Page.WaitForDownloadOptions (選填)

  • callback Runnable#

    執行觸發事件動作的回呼。

傳回


waitForFileChooser

在 v1.9 中新增 page.waitForFileChooser

執行動作並等待新的 FileChooser 被建立。如果提供 predicate,它會將 FileChooser 值傳遞到 predicate 函數中,並等待 predicate(fileChooser) 返回真值。如果在檔案選擇器開啟之前頁面關閉,將拋出錯誤。

用法

Page.waitForFileChooser(callback);
Page.waitForFileChooser(callback, options);

引數

  • options Page.WaitForFileChooserOptions (選填)

  • callback Runnable#

    執行觸發事件動作的回呼。

傳回


waitForFunction

在 v1.9 之前新增 page.waitForFunction

expression 返回真值時返回。它會解析為真值的 JSHandle。

用法

Page.waitForFunction() 可用於觀察視窗大小變更

import com.microsoft.playwright.*;

public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType webkit = playwright.webkit();
Browser browser = webkit.launch();
Page page = browser.newPage();
page.setViewportSize(50, 50);
page.waitForFunction("() => window.innerWidth < 100");
browser.close();
}
}
}

將參數傳遞給 Page.waitForFunction() 函數的 predicate

String selector = ".foo";
page.waitForFunction("selector => !!document.querySelector(selector)", selector);

引數

  • expression String#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選填)#

    傳遞給 expression 的選填參數。

  • options Page.WaitForFunctionOptions (選填)

    • setPollingInterval double (選填)#

      如果指定,則將其視為函數將被執行的間隔(以毫秒為單位)。預設情況下,如果未指定此選項,則 expression 將在 requestAnimationFrame 回呼中執行。

    • setTimeout double (選填)#

      最大等待時間,以毫秒為單位。預設值為 30000 (30 秒)。傳遞 0 以停用逾時。可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更預設值。

傳回


waitForLoadState

在 v1.9 之前新增 page.waitForLoadState

當達到所需的載入狀態時返回。

當頁面達到所需的載入狀態時,預設為 load 時,此方法會解析。當呼叫此方法時,導航必須已提交。如果當前文件已達到所需狀態,則立即解析。

注意

大多數情況下,不需要此方法,因為 Playwright 在每次操作前都會自動等待

用法

page.getByRole(AriaRole.BUTTON).click(); // Click triggers navigation.
page.waitForLoadState(); // The promise resolves after "load" event.
Page popup = page.waitForPopup(() -> {
page.getByRole(AriaRole.BUTTON).click(); // Click triggers a popup.
});
// Wait for the "DOMContentLoaded" event
popup.waitForLoadState(LoadState.DOMCONTENTLOADED);
System.out.println(popup.title()); // Popup is ready to use.

引數

  • state enum LoadState { LOAD, DOMCONTENTLOADED, NETWORKIDLE } (選填)#

    要等待的選填載入狀態,預設為 load。如果在載入當前文件時已達到該狀態,則該方法會立即解析。可以是以下之一

    • 'load' - 等待 load 事件被觸發。
    • 'domcontentloaded' - 等待 DOMContentLoaded 事件被觸發。
    • 'networkidle' - **不建議使用** 等待直到至少 500 毫秒沒有網路連線。請勿將此方法用於測試,而應依靠網路斷言來評估就緒狀態。
  • options Page.WaitForLoadStateOptions (選填)

傳回


waitForPopup

在 v1.9 中新增 page.waitForPopup

執行動作並等待彈出視窗 Page。如果提供 predicate,它會將 [Popup] 值傳遞到 predicate 函數中,並等待 predicate(page) 返回真值。如果在彈出視窗事件觸發之前頁面關閉,將拋出錯誤。

用法

Page.waitForPopup(callback);
Page.waitForPopup(callback, options);

引數

  • options Page.WaitForPopupOptions (選填)

    • setPredicate Predicate<Page> (選填)#

      接收 Page 物件,並在等待應解析時解析為真值。

    • setTimeout double (選填)#

      最大等待時間,以毫秒為單位。預設值為 30000 (30 秒)。傳遞 0 以停用逾時。可以使用 BrowserContext.setDefaultTimeout() 變更預設值。

  • callback Runnable#

    執行觸發事件動作的回呼。

傳回


waitForRequest

在 v1.9 之前新增 page.waitForRequest

等待符合的請求並返回它。有關事件的更多詳細資訊,請參閱等待事件

用法

// Waits for the next request with the specified url
Request request = page.waitForRequest("https://example.com/resource", () -> {
// Triggers the request
page.getByText("trigger request").click();
});

// Waits for the next request matching some conditions
Request request = page.waitForRequest(request -> "https://example.com".equals(request.url()) && "GET".equals(request.method()), () -> {
// Triggers the request
page.getByText("trigger request").click();
});

引數

  • urlOrPredicate String | Pattern | Predicate<Request>#

    請求 URL 字串、正則表達式或接收 Request 物件的 predicate。當透過 context 選項提供 setBaseURL,且傳遞的 URL 是路徑時,它會透過 new URL() 建構函式合併。

  • options Page.WaitForRequestOptions (選填)

    • setTimeout double (選填)#

      最大等待時間,以毫秒為單位,預設為 30 秒,傳遞 0 以停用逾時。可以使用 Page.setDefaultTimeout() 方法更改預設值。

  • callback Runnable在 v1.9 中新增#

    執行觸發事件動作的回呼。

傳回


waitForRequestFinished

在 v1.12 中新增 page.waitForRequestFinished

執行動作並等待 Request 完成載入。如果提供 predicate,它會將 Request 值傳遞到 predicate 函數中,並等待 predicate(request) 返回真值。如果在 Page.onRequestFinished(handler) 事件觸發之前頁面關閉,將拋出錯誤。

用法

Page.waitForRequestFinished(callback);
Page.waitForRequestFinished(callback, options);

引數

  • options Page.WaitForRequestFinishedOptions (選填)

  • callback Runnable#

    執行觸發事件動作的回呼。

傳回


waitForResponse

在 v1.9 之前新增 page.waitForResponse

返回符合的回應。有關事件的更多詳細資訊,請參閱等待事件

用法

// Waits for the next response with the specified url
Response response = page.waitForResponse("https://example.com/resource", () -> {
// Triggers the response
page.getByText("trigger response").click();
});

// Waits for the next response matching some conditions
Response response = page.waitForResponse(response -> "https://example.com".equals(response.url()) && response.status() == 200 && "GET".equals(response.request().method()), () -> {
// Triggers the response
page.getByText("trigger response").click();
});

引數

傳回


waitForURL

新增於:v1.11 page.waitForURL

等待主框架導航到給定的 URL。

用法

page.click("a.delayed-navigation"); // Clicking the link will indirectly cause a navigation
page.waitForURL("**/target.html");

引數

  • url String | Pattern | Predicate<String>#

    Glob 模式、正則表達式模式或接收 [URL] 的 predicate,以在等待導航時進行匹配。請注意,如果參數是不帶萬用字元的字串,則此方法將等待導航到與該字串完全相等的 URL。

  • options Page.WaitForURLOptions (選填)

    • setTimeout double (選填)#

      最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()BrowserContext.setDefaultTimeout()Page.setDefaultNavigationTimeout()Page.setDefaultTimeout() 方法進行變更。

    • setWaitUntil enum WaitUntilState { LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT } (選填)#

      何時視為操作成功,預設為 load。事件可以是

      • 'domcontentloaded' - 當觸發 DOMContentLoaded 事件時,視為操作完成。
      • 'load' - 當觸發 load 事件時,視為操作完成。
      • 'networkidle' - 不建議使用 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而應依賴 Web 斷言來評估就緒狀態。
      • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


waitForWebSocket

在 v1.9 中新增 page.waitForWebSocket

執行動作並等待新的 WebSocket。如果提供 predicate,它會將 WebSocket 值傳遞到 predicate 函數中,並等待 predicate(webSocket) 返回真值。如果在 WebSocket 事件觸發之前頁面關閉,將拋出錯誤。

用法

Page.waitForWebSocket(callback);
Page.waitForWebSocket(callback, options);

引數

  • options Page.WaitForWebSocketOptions (選填)

  • callback Runnable#

    執行觸發事件動作的回呼。

傳回


waitForWorker

在 v1.9 中新增 page.waitForWorker

執行動作並等待新的 Worker。如果提供 predicate,它會將 Worker 值傳遞到 predicate 函數中,並等待 predicate(worker) 返回真值。如果在 worker 事件觸發之前頁面關閉,將拋出錯誤。

用法

Page.waitForWorker(callback);
Page.waitForWorker(callback, options);

引數

  • options Page.WaitForWorkerOptions (選填)

  • callback Runnable#

    執行觸發事件動作的回呼。

傳回


workers

在 v1.9 之前新增 page.workers

此方法返回與頁面關聯的所有專用 WebWorker

注意

這不包含 ServiceWorker

用法

Page.workers();

傳回


屬性

clock()

Added in: v1.45 page.clock()

Playwright 具有模擬時鐘和時間流逝的能力。

用法

Page.clock()

傳回


keyboard()

在 v1.9 之前新增 page.keyboard()

用法

Page.keyboard()

傳回


mouse()

在 v1.9 之前新增 page.mouse()

用法

Page.mouse()

傳回


request()

Added in: v1.16 page.request()

與此頁面關聯的 API 測試輔助工具。此方法返回與頁面 context 上的 BrowserContext.request() 相同的實例。有關更多詳細資訊,請參閱 BrowserContext.request()

用法

Page.request()

傳回


touchscreen()

在 v1.9 之前新增 page.touchscreen()

用法

Page.touchscreen()

傳回


事件

onClose(handler)

在 v1.9 之前新增 page.onClose(handler)

當頁面關閉時發出。

用法

Page.onClose(handler)

事件資料


onConsoleMessage(handler)

在 v1.9 之前新增 page.onConsoleMessage(handler)

當頁面內的 JavaScript 呼叫其中一個 console API 方法時發出,例如 console.logconsole.dir

傳遞到 console.log 中的參數在 ConsoleMessage 事件處理常式參數中可用。

用法

page.onConsoleMessage(msg -> {
for (int i = 0; i < msg.args().size(); ++i)
System.out.println(i + ": " + msg.args().get(i).jsonValue());
});
page.evaluate("() => console.log('hello', 5, { foo: 'bar' })");

事件資料


onCrash(handler)

在 v1.9 之前新增 page.onCrash(handler)

當頁面崩潰時發出。如果瀏覽器頁面嘗試分配過多記憶體,則可能會崩潰。當頁面崩潰時,正在進行和後續的操作將拋出錯誤。

處理崩潰最常見的方法是捕獲異常

try {
// Crash might happen during a click.
page.click("button");
// Or while waiting for an event.
page.waitForPopup(() -> {});
} catch (PlaywrightException e) {
// When the page crashes, exception message contains "crash".
}

用法

Page.onCrash(handler)

事件資料


onDialog(handler)

在 v1.9 之前新增 page.onDialog(handler)

當 JavaScript 對話框出現時發出,例如 alertpromptconfirmbeforeunload。監聽器**必須** Dialog.accept()Dialog.dismiss() 對話框 - 否則頁面將凍結等待對話框,並且像 click 這樣的操作將永遠不會完成。

用法

page.onDialog(dialog -> {
dialog.accept();
});
注意

當沒有 Page.onDialog(handler)BrowserContext.onDialog(handler) 監聽器存在時,所有對話框都會自動關閉。

事件資料


onDOMContentLoaded(handler)

在 v1.9 中新增 page.onDOMContentLoaded(handler)

當 JavaScript DOMContentLoaded 事件被分派時發出。

用法

Page.onDOMContentLoaded(handler)

事件資料


onDownload(handler)

在 v1.9 之前新增 page.onDownload(handler)

當附件下載開始時發出。使用者可以透過傳遞的 Download 實例存取已下載內容的基本檔案操作。

用法

Page.onDownload(handler)

事件資料


onFileChooser(handler)

在 v1.9 中新增 page.onFileChooser(handler)

當檔案選擇器應該出現時發出,例如在點擊 <input type=file> 後。Playwright 可以透過使用 FileChooser.setFiles() 設定輸入檔案來回應它,之後可以上傳這些檔案。

page.onFileChooser(fileChooser -> {
fileChooser.setFiles(Paths.get("/tmp/myfile.pdf"));
});

用法

Page.onFileChooser(handler)

事件資料


onFrameAttached(handler)

在 v1.9 中新增 page.onFrameAttached(handler)

當框架被附加時發出。

用法

Page.onFrameAttached(handler)

事件資料


onFrameDetached(handler)

在 v1.9 中新增 page.onFrameDetached(handler)

當框架被分離時發出。

用法

Page.onFrameDetached(handler)

事件資料


onFrameNavigated(handler)

在 v1.9 中新增 page.onFrameNavigated(handler)

當框架導航到新的 URL 時發出。

用法

Page.onFrameNavigated(handler)

事件資料


onLoad(handler)

在 v1.9 之前新增 page.onLoad(handler)

當 JavaScript load 事件被分派時發出。

用法

Page.onLoad(handler)

事件資料


onPageError(handler)

在 v1.9 中新增 page.onPageError(handler)

當頁面內發生未捕獲的異常時發出。

// Log all uncaught errors to the terminal
page.onPageError(exception -> {
System.out.println("Uncaught exception: " + exception);
});

// Navigate to a page with an exception.
page.navigate("data:text/html,<script>throw new Error('Test')</script>");

用法

Page.onPageError(handler)

事件資料


onPopup(handler)

在 v1.9 之前新增 page.onPopup(handler)

當頁面開啟新的標籤頁或視窗時發出。此事件除了 BrowserContext.onPage(handler) 之外還會發出,但僅適用於與此頁面相關的彈出視窗。

頁面可用的最早時間是當它導航到初始 URL 時。例如,當使用 window.open('http://example.com') 開啟彈出視窗時,當對 "http://example.com" 的網路請求完成且其回應已開始在彈出視窗中載入時,將觸發此事件。如果您想路由/監聽此網路請求,請分別使用 BrowserContext.route()BrowserContext.onRequest(handler),而不是 Page 上的類似方法。

Page popup = page.waitForPopup(() -> {
page.getByText("open the popup").click();
});
System.out.println(popup.evaluate("location.href"));
注意

使用 Page.waitForLoadState() 等待頁面達到特定狀態(在大多數情況下您不需要它)。

用法

Page.onPopup(handler)

事件資料


onRequest(handler)

在 v1.9 之前新增 page.onRequest(handler)

當頁面發出請求時發出。request 物件是唯讀的。為了攔截和更改請求,請參閱 Page.route()BrowserContext.route()

用法

Page.onRequest(handler)

事件資料


onRequestFailed(handler)

在 v1.9 中新增 page.onRequestFailed(handler)

當請求失敗時發出,例如由於逾時。

page.onRequestFailed(request -> {
System.out.println(request.url() + " " + request.failure());
});
注意

HTTP 錯誤回應,例如 404 或 503,從 HTTP 的角度來看仍然是成功的回應,因此請求將使用 Page.onRequestFinished(handler) 事件完成,而不是 Page.onRequestFailed(handler)。僅當用戶端無法從伺服器取得 HTTP 回應時,例如由於網路錯誤 net::ERR_FAILED,請求才被視為失敗。

用法

Page.onRequestFailed(handler)

事件資料


onRequestFinished(handler)

在 v1.9 中新增 page.onRequestFinished(handler)

當請求在下載回應 body 後成功完成時發出。對於成功的回應,事件順序為 requestresponserequestfinished

用法

Page.onRequestFinished(handler)

事件資料


onResponse(handler)

在 v1.9 之前新增 page.onResponse(handler)

當接收到請求的 response 狀態和標頭時發出。對於成功的回應,事件順序為 requestresponserequestfinished

用法

Page.onResponse(handler)

事件資料


onWebSocket(handler)

在 v1.9 中新增 page.onWebSocket(handler)

WebSocket 請求被發送時發出。

用法

Page.onWebSocket(handler)

事件資料


onWorker(handler)

在 v1.9 之前新增 page.onWorker(handler)

當專用 WebWorker 由頁面衍生時發出。

用法

Page.onWorker(handler)

事件資料


已棄用

check

在 v1.9 之前新增 page.check
不建議使用

請改用基於定位器的 Locator.check()。閱讀更多關於定位器的資訊。

此方法透過執行以下步驟來檢查符合 selector 的元素

  1. 尋找符合選取器的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
  2. 確保匹配的元素是核取方塊或單選輸入框。如果不是,此方法會拋出錯誤。如果元素已經被選取,此方法會立即返回。
  3. 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
  4. 如果需要,將元素捲動到可視範圍內。
  5. 使用 Page.mouse() 在元素中心點擊。
  6. 確保元素現在已被選取。如果沒有,此方法會拋出錯誤。

當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。

用法

Page.check(selector);
Page.check(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.CheckOptions (選用)

    • setForce 布林值 (選用)#

      是否略過 可操作性 檢查。預設為 false

    • setNoWaitAfter 布林值 (選用)#

      已淘汰

      此選項無效。

      此選項無效。

    • setPosition 位置 (選用)新增於:v1.11#

      相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout 雙精度浮點數 (選用)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial 布林值 (選用)新增於:v1.11#

      設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為 false。用於等待元素準備好進行動作而無需執行它。

傳回


點擊

在 v1.9 之前新增 page.click
不建議使用

請改用基於定位器的 Locator.click()。閱讀更多關於定位器的資訊。

此方法通過執行以下步驟,點擊符合 選取器 的元素

  1. 尋找符合 選取器 的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
  2. 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
  3. 如果需要,將元素捲動到可視範圍內。
  4. 使用 Page.mouse() 在元素中心點擊,或在指定的 setPosition 位置點擊。
  5. 等待啟動的導航成功或失敗,除非設定了 setNoWaitAfter 選項。

當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。

用法

Page.click(selector);
Page.click(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.ClickOptions (選用)

    • setButton enum MouseButton { LEFT, RIGHT, MIDDLE } (選用)#

      預設為 left

    • setClickCount 整數 (選用)#

      預設為 1。請參閱 UIEvent.detail

    • setDelay 雙精度浮點數 (選用)#

      mousedownmouseup 之間等待的時間,以毫秒為單位。預設為 0。

    • setForce 布林值 (選用)#

      是否略過 可操作性 檢查。預設為 false

    • setModifiers 列表<enum KeyboardModifier { ALT, CONTROL, CONTROLORMETA, META, SHIFT }> (選用)#

      要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

    • setNoWaitAfter 布林值 (選用)#

      已淘汰

      此選項在未來將預設為 true

      啟動導航的動作會等待這些導航發生以及頁面開始載入。您可以通過設定此標誌來選擇不等待。您只需要在特殊情況下使用此選項,例如導航到無法訪問的頁面。預設為 false

    • setPosition 位置 (選用)#

      相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout 雙精度浮點數 (選用)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial 布林值 (選用)新增於:v1.11#

      設定後,此方法僅執行可操作性檢查並跳過動作。預設為 false。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論 trial 設定如何,都會按下鍵盤 modifiers,以便測試僅在按下這些鍵時才可見的元素。

傳回


雙擊

在 v1.9 之前新增 page.dblclick
不建議使用

請改用基於定位器的 Locator.dblclick()。閱讀更多關於定位器的資訊。

此方法通過執行以下步驟,雙擊符合 選取器 的元素

  1. 尋找符合 選取器 的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
  2. 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
  3. 如果需要,將元素捲動到可視範圍內。
  4. 使用 Page.mouse() 在元素中心雙擊,或在指定的 setPosition 位置雙擊。

當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。

注意

page.dblclick() 會派發兩個 click 事件和一個 dblclick 事件。

用法

Page.dblclick(selector);
Page.dblclick(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.DblclickOptions (選用)

    • setButton enum MouseButton { LEFT, RIGHT, MIDDLE } (選用)#

      預設為 left

    • setDelay 雙精度浮點數 (選用)#

      mousedownmouseup 之間等待的時間,以毫秒為單位。預設為 0。

    • setForce 布林值 (選用)#

      是否略過 可操作性 檢查。預設為 false

    • setModifiers 列表<enum KeyboardModifier { ALT, CONTROL, CONTROLORMETA, META, SHIFT }> (選用)#

      要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

    • setNoWaitAfter 布林值 (選用)#

      已淘汰

      此選項無效。

      此選項無效。

    • setPosition 位置 (選用)#

      相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout 雙精度浮點數 (選用)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial 布林值 (選用)新增於:v1.11#

      設定後,此方法僅執行可操作性檢查並跳過動作。預設為 false。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論 trial 設定如何,都會按下鍵盤 modifiers,以便測試僅在按下這些鍵時才可見的元素。

傳回


派發事件

在 v1.9 之前新增 page.dispatchEvent
不建議使用

請改用基於定位器的 Locator.dispatchEvent()。閱讀更多關於定位器的資訊。

以下程式碼片段在元素上派發 click 事件。無論元素的顯示狀態如何,都會派發 click 事件。這等同於呼叫 element.click()

用法

page.dispatchEvent("button#submit", "click");

在底層,它會根據給定的 type 建立一個事件實例,使用 eventInit 屬性初始化它,並在元素上派發它。事件預設為 composedcancelable 和 bubble。

由於 eventInit 是事件特定的,請參閱事件文檔以獲取初始屬性列表

如果您希望將即時物件傳遞到事件中,也可以將 JSHandle 指定為屬性值

// Note you can only create DataTransfer in Chromium and Firefox
JSHandle dataTransfer = page.evaluateHandle("() => new DataTransfer()");
Map<String, Object> arg = new HashMap<>();
arg.put("dataTransfer", dataTransfer);
page.dispatchEvent("#source", "dragstart", arg);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • type 字串#

    DOM 事件類型:"click""dragstart" 等。

  • eventInit EvaluationArgument (選用)#

    選用的事件特定初始化屬性。

  • options Page.DispatchEventOptions (選用)

傳回


evalOnSelector

在 v1.9 中新增 page.evalOnSelector
不建議使用

此方法不會等待元素通過可操作性檢查,因此可能導致測試不穩定。請改用 Locator.evaluate()、其他 Locator 輔助方法或以網頁優先的斷言。

此方法在頁面中尋找符合指定選取器的元素,並將其作為第一個參數傳遞給 expression。如果沒有元素符合選取器,此方法會拋出錯誤。返回 expression 的值。

如果 expression 返回一個 Promise,則 Page.evalOnSelector() 將等待 Promise 解析並返回其值。

用法

String searchValue = (String) page.evalOnSelector("#search", "el => el.value");
String preloadHref = (String) page.evalOnSelector("link[rel=preload]", "el => el.href");
String html = (String) page.evalOnSelector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello");

引數

  • selector 字串#

    要查詢的選取器。

  • expression 字串#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選用)#

    傳遞給 expression 的選用參數。

  • options Page.EvalOnSelectorOptions (選用)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

傳回


evalOnSelectorAll

在 v1.9 中新增 page.evalOnSelectorAll
不建議使用

在大多數情況下,Locator.evaluateAll()、其他 Locator 輔助方法和以網頁優先的斷言效果更好。

此方法在頁面中尋找符合指定選取器的所有元素,並將匹配元素的陣列作為第一個參數傳遞給 expression。返回 expression 呼叫的結果。

如果 expression 返回一個 Promise,則 Page.evalOnSelectorAll() 將等待 Promise 解析並返回其值。

用法

boolean divCounts = (boolean) page.evalOnSelectorAll("div", "(divs, min) => divs.length >= min", 10);

引數

  • selector 字串#

    要查詢的選取器。

  • expression 字串#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選用)#

    傳遞給 expression 的選用參數。

傳回


填寫

在 v1.9 之前新增 page.fill
不建議使用

請改用基於定位器的 Locator.fill()。閱讀更多關於定位器的資訊。

此方法等待符合 選取器 的元素,等待可操作性檢查,聚焦元素,填寫它,並在填寫後觸發 input 事件。請注意,您可以傳遞空字串來清除輸入欄位。

如果目標元素不是 <input><textarea>[contenteditable] 元素,此方法會拋出錯誤。但是,如果元素位於 <label> 元素內,且該元素具有關聯的 control,則將改為填寫該 control。

若要發送細粒度的鍵盤事件,請使用 Locator.pressSequentially()

用法

Page.fill(selector, value);
Page.fill(selector, value, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • value 字串#

    要為 <input><textarea>[contenteditable] 元素填寫的值。

  • options Page.FillOptions (選用)

    • setForce 布林值 (選用)在 v1.13 中新增#

      是否略過 可操作性 檢查。預設為 false

    • setNoWaitAfter 布林值 (選用)#

      已淘汰

      此選項無效。

      此選項無效。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout 雙精度浮點數 (選用)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


聚焦

在 v1.9 之前新增 page.focus
不建議使用

請改用基於定位器的 Locator.focus()。閱讀更多關於定位器的資訊。

此方法獲取具有 選取器 的元素並聚焦它。如果沒有元素符合 選取器,則此方法會等待直到符合的元素出現在 DOM 中。

用法

Page.focus(selector);
Page.focus(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.FocusOptions (選用)

傳回


getAttribute

在 v1.9 之前新增 page.getAttribute
不建議使用

請改用基於定位器的 Locator.getAttribute()。閱讀更多關於定位器的資訊。

返回元素屬性值。

用法

Page.getAttribute(selector, name);
Page.getAttribute(selector, name, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • name 字串#

    要獲取值的屬性名稱。

  • options Page.GetAttributeOptions (選用)

傳回


懸停

在 v1.9 之前新增 page.hover
不建議使用

請改用基於定位器的 Locator.hover()。閱讀更多關於定位器的資訊。

此方法通過執行以下步驟,懸停在符合 選取器 的元素上

  1. 尋找符合 選取器 的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
  2. 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
  3. 如果需要,將元素捲動到可視範圍內。
  4. 使用 Page.mouse() 在元素中心懸停,或在指定的 setPosition 位置懸停。

當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。

用法

Page.hover(selector);
Page.hover(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.HoverOptions (選用)

    • setForce 布林值 (選用)#

      是否略過 可操作性 檢查。預設為 false

    • setModifiers 列表<enum KeyboardModifier { ALT, CONTROL, CONTROLORMETA, META, SHIFT }> (選用)#

      要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

    • setNoWaitAfter boolean (選用)新增於: v1.28#

      已淘汰

      此選項無效。

      此選項無效。

    • setPosition 位置 (選用)#

      相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout 雙精度浮點數 (選用)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial 布林值 (選用)新增於:v1.11#

      設定後,此方法僅執行可操作性檢查並跳過動作。預設為 false。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論 trial 設定如何,都會按下鍵盤 modifiers,以便測試僅在按下這些鍵時才可見的元素。

傳回


innerHTML

在 v1.9 之前新增 page.innerHTML
不建議使用

請改用基於定位器的 Locator.innerHTML()。閱讀更多關於定位器的資訊。

返回 element.innerHTML

用法

Page.innerHTML(selector);
Page.innerHTML(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.InnerHTMLOptions (選用)

傳回


innerText

在 v1.9 之前新增 page.innerText
不建議使用

請改用基於定位器的 Locator.innerText()。閱讀更多關於定位器的資訊。

返回 element.innerText

用法

Page.innerText(selector);
Page.innerText(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.InnerTextOptions (選用)

傳回


inputValue

在 v1.13 中新增 page.inputValue
不建議使用

請改用基於定位器的 Locator.inputValue()。閱讀更多關於定位器的資訊。

返回選定的 <input><textarea><select> 元素的 input.value

對於非輸入元素拋出錯誤。但是,如果元素位於 <label> 元素內,且該元素具有關聯的 control,則返回該 control 的值。

用法

Page.inputValue(selector);
Page.inputValue(selector, options);

引數

  • selector 字串#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.InputValueOptions (選用)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


isChecked

在 v1.9 之前新增 page.isChecked
不建議使用

請改用基於 locator 的 Locator.isChecked()。閱讀更多關於 locators 的資訊。

傳回元素是否被勾選。如果元素不是核取方塊或單選輸入,則會拋出錯誤。

用法

Page.isChecked(selector);
Page.isChecked(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.IsCheckedOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


isDisabled

在 v1.9 之前新增 page.isDisabled
不建議使用

請改用基於 locator 的 Locator.isDisabled()。閱讀更多關於 locators 的資訊。

傳回元素是否為停用狀態,與 enabled 相反。

用法

Page.isDisabled(selector);
Page.isDisabled(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.IsDisabledOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


isEditable

在 v1.9 之前新增 page.isEditable
不建議使用

請改用基於 locator 的 Locator.isEditable()。閱讀更多關於 locators 的資訊。

傳回元素是否為 可編輯 狀態。

用法

Page.isEditable(selector);
Page.isEditable(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.IsEditableOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


isEnabled

在 v1.9 之前新增 page.isEnabled
不建議使用

請改用基於 locator 的 Locator.isEnabled()。閱讀更多關於 locators 的資訊。

傳回元素是否為 啟用 狀態。

用法

Page.isEnabled(selector);
Page.isEnabled(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.IsEnabledOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


isHidden

在 v1.9 之前新增 page.isHidden
不建議使用

請改用基於 locator 的 Locator.isHidden()。閱讀更多關於 locators 的資訊。

傳回元素是否為隱藏狀態,與 visible 相反。不符合任何元素的 selector 會被視為隱藏。

用法

Page.isHidden(selector);
Page.isHidden(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.IsHiddenOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      已淘汰

      此選項會被忽略。Page.isHidden() 不會等待元素變成隱藏狀態,並立即傳回結果。

傳回


isVisible

在 v1.9 之前新增 page.isVisible
不建議使用

請改用基於 locator 的 Locator.isVisible()。閱讀更多關於 locators 的資訊。

傳回元素是否為 可見 狀態。不符合任何元素的 selector 會被視為不可見。

用法

Page.isVisible(selector);
Page.isVisible(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.IsVisibleOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      已淘汰

      此選項會被忽略。Page.isVisible() 不會等待元素變成可見狀態,並立即傳回結果。

傳回


press

在 v1.9 之前新增 page.press
不建議使用

請改用基於 locator 的 Locator.press()。閱讀更多關於 locators 的資訊。

聚焦元素,然後使用 Keyboard.down()Keyboard.up()

key 可以指定預期的 keyboardEvent.key 值或單一字元來產生文字。 key 值的超集可以在 這裡 找到。按鍵範例有:

F1 - F12Digit0- Digit9KeyA- KeyZBackquoteMinusEqualBackslashBackspaceTabDeleteEscapeArrowDownEndEnterHomeInsertPageDownPageUpArrowRightArrowUp 等。

也支援以下修改快捷鍵:ShiftControlAltMetaShiftLeftControlOrMetaControlOrMeta 在 Windows 和 Linux 上解析為 Control,在 macOS 上解析為 Meta

按住 Shift 鍵將會輸入與 key 對應的大寫文字。

如果 key 是單一字元,則區分大小寫,因此值 aA 將會產生不同的對應文字。

也支援諸如 key: "Control+o"key: "Control++key: "Control+Shift+T" 等快捷鍵。當使用修飾鍵指定時,在按下後續按鍵時,修飾鍵會被按下並保持按住。

用法

Page page = browser.newPage();
page.navigate("https://keycode.info");
page.press("body", "A");
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("A.png")));
page.press("body", "ArrowLeft");
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("ArrowLeft.png" )));
page.press("body", "Shift+O");
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("O.png" )));

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • key String#

    要按下的按鍵名稱或要產生的字元,例如 ArrowLefta

  • options Page.PressOptions (選填)

    • setDelay double (選填)#

      keydownkeyup 之間等待的時間,以毫秒為單位。預設值為 0。

    • setNoWaitAfter boolean (選填)#

      已淘汰

      此選項在未來將預設為 true

      啟動導航的動作會等待這些導航發生以及頁面開始載入。您可以通過設定此標誌來選擇不等待。您只需要在特殊情況下使用此選項,例如導航到無法訪問的頁面。預設為 false

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


querySelector

在 v1.9 中新增 page.querySelector
不建議使用

請改用基於 locator 的 Page.locator()。閱讀更多關於 locators 的資訊。

此方法在頁面中尋找符合指定 selector 的元素。如果沒有元素符合 selector,則傳回值會解析為 null。若要等待頁面上的元素,請使用 Locator.waitFor()

用法

Page.querySelector(selector);
Page.querySelector(selector, options);

引數

  • selector String#

    要查詢的選取器。

  • options Page.QuerySelectorOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

傳回


querySelectorAll

在 v1.9 中新增 page.querySelectorAll
不建議使用

請改用基於 locator 的 Page.locator()。閱讀更多關於 locators 的資訊。

此方法在頁面中尋找符合指定 selector 的所有元素。如果沒有元素符合 selector,則傳回值會解析為 []

用法

Page.querySelectorAll(selector);

引數

  • selector String#

    要查詢的選取器。

傳回


selectOption

在 v1.9 之前新增 page.selectOption
不建議使用

請改用基於 locator 的 Locator.selectOption()。閱讀更多關於 locators 的資訊。

此方法會等待符合 selector 的元素,等待 actionability 檢查,等待直到所有指定的選項都出現在 <select> 元素中,然後選取這些選項。

如果目標元素不是 <select> 元素,此方法會拋出錯誤。但是,如果元素位於具有關聯 control<label> 元素內,則會改為使用該 control。

傳回已成功選取的選項值陣列。

在選取所有提供的選項後,觸發 changeinput 事件。

用法

// Single selection matching the value or label
page.selectOption("select#colors", "blue");
// single selection matching both the value and the label
page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
// multiple selection
page.selectOption("select#colors", new String[] {"red", "green", "blue"});

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • values null | String | ElementHandle | String[] | SelectOption | ElementHandle[] | SelectOption[]#

    • setValue String (選填)

      option.value 比對。選填。

    • setLabel String (選填)

      option.label 比對。選填。

    • setIndex int (選填)

      依索引比對。選填。

    要選取的選項。如果 <select> 具有 multiple 屬性,則會選取所有符合的選項,否則只會選取第一個符合傳遞選項之一的選項。字串值會比對值和標籤。如果所有指定的屬性都符合,則選項會被視為符合。

  • options Page.SelectOptionOptions (選填)

    • setForce 布林值 (選用)在 v1.13 中新增#

      是否略過 可操作性 檢查。預設為 false

    • setNoWaitAfter boolean (選填)#

      已淘汰

      此選項無效。

      此選項無效。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


setChecked

在 v1.15 中新增 page.setChecked
不建議使用

請改用基於 locator 的 Locator.setChecked()。閱讀更多關於 locators 的資訊。

此方法透過執行以下步驟來勾選或取消勾選符合 selector 的元素:

  1. 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
  2. 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。
  3. 如果元素已處於正確的勾選狀態,此方法會立即傳回。
  4. 等待符合元素上的 actionability 檢查,除非設定了 setForce 選項。如果在檢查期間元素被分離,則會重試整個動作。
  5. 如果需要,將元素捲動到可視範圍內。
  6. 使用 Page.mouse() 在元素中心點擊。
  7. 確保元素現在已勾選或取消勾選。如果不是,此方法會拋出錯誤。

當所有步驟組合在一起未在指定的 setTimeout 期間完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。

用法

Page.setChecked(selector, checked);
Page.setChecked(selector, checked, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • checked boolean#

    是否要勾選或取消勾選核取方塊。

  • options Page.SetCheckedOptions (選填)

    • setForce boolean (選填)#

      是否略過 可操作性 檢查。預設為 false

    • setNoWaitAfter boolean (選填)#

      已淘汰

      此選項無效。

      此選項無效。

    • setPosition Position (選填)#

      相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。

    • setStrict boolean (選填)#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial boolean (選填)#

      設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為 false。用於等待元素準備好進行動作而無需執行它。

傳回


setInputFiles

在 v1.9 之前新增 page.setInputFiles
不建議使用

請改用基於 locator 的 Locator.setInputFiles()。閱讀更多關於 locators 的資訊。

設定檔案輸入的值為這些檔案路徑或檔案。如果某些 filePaths 是相對路徑,則它們會相對於目前的工作目錄解析。對於空陣列,清除選取的檔案。對於具有 [webkitdirectory] 屬性的輸入,僅支援單一目錄路徑。

此方法預期 selector 指向 input 元素。但是,如果元素位於具有關聯 control<label> 元素內,則會改為以該 control 為目標。

用法

Page.setInputFiles(selector, files);
Page.setInputFiles(selector, files, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • files Path | Path[] | FilePayload | FilePayload[]#

    • setName String

      檔案名稱

    • setMimeType String

      檔案類型

    • setBuffer byte[]

      檔案內容

  • options Page.SetInputFilesOptions (選填)

    • setNoWaitAfter boolean (選填)#

      已淘汰

      此選項無效。

      此選項無效。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


tap

在 v1.9 之前新增 page.tap
不建議使用

請改用基於 locator 的 Locator.tap()。閱讀更多關於 locators 的資訊。

此方法透過執行以下步驟來點擊符合 selector 的元素:

  1. 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
  2. 等待符合元素上的 actionability 檢查,除非設定了 setForce 選項。如果在檢查期間元素被分離,則會重試整個動作。
  3. 如果需要,將元素捲動到可視範圍內。
  4. 使用 Page.touchscreen() 點擊元素的中心,或指定的 setPosition

當所有步驟組合在一起未在指定的 setTimeout 期間完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。

注意

如果瀏覽器內容的 setHasTouch 選項為 false,則 Page.tap() 方法將會拋出錯誤。

用法

Page.tap(selector);
Page.tap(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.TapOptions (選填)

    • setForce boolean (選填)#

      是否略過 可操作性 檢查。預設為 false

    • setModifiers List<enum KeyboardModifier { ALT, CONTROL, CONTROLORMETA, META, SHIFT }> (選填)#

      要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

    • setNoWaitAfter boolean (選填)#

      已淘汰

      此選項無效。

      此選項無效。

    • setPosition Position (選填)#

      相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial 布林值 (選用)新增於:v1.11#

      設定後,此方法僅執行可操作性檢查並跳過動作。預設為 false。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論 trial 設定如何,都會按下鍵盤 modifiers,以便測試僅在按下這些鍵時才可見的元素。

傳回


textContent

在 v1.9 之前新增 page.textContent
不建議使用

請改用基於 locator 的 Locator.textContent()。閱讀更多關於 locators 的資訊。

傳回 element.textContent

用法

Page.textContent(selector);
Page.textContent(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.TextContentOptions (選填)

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


type

在 v1.9 之前新增 page.type
已淘汰

在大多數情況下,您應該改用 Locator.fill()。只有在頁面上有特殊的鍵盤處理時,才需要逐個按下按鍵 - 在這種情況下,請使用 Locator.pressSequentially()

為文字中的每個字元傳送 keydownkeypress/inputkeyup 事件。 page.type 可用於傳送細緻的鍵盤事件。若要在表單欄位中填寫值,請使用 Page.fill()

若要按下特殊按鍵,例如 ControlArrowDown,請使用 Keyboard.press()

用法

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • text String#

    要輸入到聚焦元素中的文字。

  • options Page.TypeOptions (選填)

    • setDelay double (選填)#

      按鍵按下之間等待的時間,以毫秒為單位。預設值為 0。

    • setNoWaitAfter boolean (選填)#

      已淘汰

      此選項無效。

      此選項無效。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


uncheck

在 v1.9 之前新增 page.uncheck
不建議使用

請改用基於 locator 的 Locator.uncheck()。閱讀更多關於 locators 的資訊。

此方法透過執行以下步驟來取消勾選符合 selector 的元素:

  1. 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
  2. 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。如果元素已取消勾選,此方法會立即傳回。
  3. 等待符合元素上的 actionability 檢查,除非設定了 setForce 選項。如果在檢查期間元素被分離,則會重試整個動作。
  4. 如果需要,將元素捲動到可視範圍內。
  5. 使用 Page.mouse() 在元素中心點擊。
  6. 確保元素現在已取消勾選。如果不是,此方法會拋出錯誤。

當所有步驟組合在一起未在指定的 setTimeout 期間完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。

用法

Page.uncheck(selector);
Page.uncheck(selector, options);

引數

  • selector String#

    用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。

  • options Page.UncheckOptions (選填)

    • setForce boolean (選填)#

      是否略過 可操作性 檢查。預設為 false

    • setNoWaitAfter boolean (選填)#

      已淘汰

      此選項無效。

      此選項無效。

    • setPosition 位置 (選用)新增於:v1.11#

      相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。

    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

    • setTrial 布林值 (選用)新增於:v1.11#

      設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為 false。用於等待元素準備好進行動作而無需執行它。

傳回


waitForNavigation

在 v1.9 之前新增 page.waitForNavigation
已淘汰

此方法本質上具有競爭性,請改用 Page.waitForURL()

等待主要框架導航並傳回主要資源回應。在多次重新導向的情況下,導航將會解析為最後一次重新導向的回應。在導航到不同的錨點或由於 History API 使用而導航的情況下,導航將會解析為 null

用法

當頁面導航到新的 URL 或重新載入時,此方法會解析。當您執行會間接導致頁面導航的程式碼時,此方法非常有用。例如,點擊目標具有 onclick 處理常式,該處理常式從 setTimeout 觸發導航。請考慮以下範例:

// The method returns after navigation has finished
Response response = page.waitForNavigation(() -> {
// This action triggers the navigation after a timeout.
page.getByText("Navigate after timeout").click();
});
注意

使用 History API 變更 URL 會被視為導航。

引數

  • options Page.WaitForNavigationOptions (選填)

    • setTimeout double (選填)#

      最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()BrowserContext.setDefaultTimeout()Page.setDefaultNavigationTimeout()Page.setDefaultTimeout() 方法進行變更。

    • setUrl String | Pattern | Predicate<String> (選填)#

      Glob 模式、正則表達式模式或接收 [URL] 的 predicate,以在等待導航時進行匹配。請注意,如果參數是不帶萬用字元的字串,則此方法將等待導航到與該字串完全相等的 URL。

    • setWaitUntil enum WaitUntilState { LOAD, DOMCONTENTLOADED, NETWORKIDLE, COMMIT } (選填)#

      何時視為操作成功,預設為 load。事件可以是

      • 'domcontentloaded' - 當觸發 DOMContentLoaded 事件時,視為操作完成。
      • 'load' - 當觸發 load 事件時,視為操作完成。
      • 'networkidle' - 不建議使用 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而應依賴 Web 斷言來評估就緒狀態。
      • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。
  • callback Runnable在 v1.9 中新增#

    執行觸發事件動作的回呼。

傳回


waitForSelector

在 v1.9 之前新增 page.waitForSelector
不建議使用

請改用網頁斷言來斷言可見性或基於 locator 的 Locator.waitFor()。閱讀更多關於 locators 的資訊。

當 selector 指定的元素滿足 setState 選項時,此方法會傳回。如果等待 hiddendetached,則傳回 null

注意

Playwright 會自動等待元素準備就緒,然後再執行動作。使用 Locator 物件和網頁優先的斷言,可以使程式碼無需使用 wait-for-selector。

等待 selector 滿足 setState 選項 (出現/從 DOM 中消失,或變成可見/隱藏)。如果在呼叫此方法時,selector 已經滿足條件,則此方法會立即返回。如果 selector 在 setTimeout 毫秒內未滿足條件,則此函數將拋出錯誤。

用法

此方法適用於跨頁面導航

import com.microsoft.playwright.*;

public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType chromium = playwright.chromium();
Browser browser = chromium.launch();
Page page = browser.newPage();
for (String currentURL : Arrays.asList("https://google.com", "https://bbc.com")) {
page.navigate(currentURL);
ElementHandle element = page.waitForSelector("img");
System.out.println("Loaded image: " + element.getAttribute("src"));
}
browser.close();
}
}
}

引數

  • selector String#

    要查詢的選取器。

  • options Page.WaitForSelectorOptions (選填)

    • setState enum WaitForSelectorState { ATTACHED, DETACHED, VISIBLE, HIDDEN } (選填)#

      預設為 'visible'。可以是下列其中之一

      • 'attached' - 等待元素出現在 DOM 中。
      • 'detached' - 等待元素不要出現在 DOM 中。
      • 'visible' - 等待元素具有非空的邊界框且沒有 visibility:hidden。請注意,沒有任何內容或具有 display:none 的元素具有空的邊界框,且不被視為可見。
      • 'hidden' - 等待元素從 DOM 中分離,或具有空的邊界框或 visibility:hidden。這與 'visible' 選項相反。
    • setStrict boolean (選用)在 v1.14 中新增#

      為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

    • setTimeout double (選填)#

      以毫秒為單位的最長時間。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout()Page.setDefaultTimeout() 方法變更。

傳回


waitForTimeout

在 v1.9 之前新增 page.waitForTimeout
不建議使用

在生產環境中永遠不要等待超時。等待時間的測試本質上是不穩定的。請使用 Locator 動作和自動等待的 Web 斷言。

等待指定的 timeout 毫秒數。

請注意,page.waitForTimeout() 應僅用於偵錯。在生產環境中使用計時器的測試將會是不穩定的。請改用網路事件、選擇器變成可見等訊號。

用法

// wait for 1 second
page.waitForTimeout(1000);

引數

  • timeout double#

    等待的超時時間

傳回