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
方法(例如 on
、once
或 removeListener
)來處理這些事件。
此範例記錄單一頁面 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 之前新增新增一個腳本,該腳本將在下列其中一種情況下評估
- 每當頁面導航時。
- 每當子框架附加或導航時。在這種情況下,腳本會在新附加的框架的內容中評估。
腳本在文件建立後但在其任何腳本執行之前評估。這對於修改 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() 安裝的多個腳本的評估順序。
引數
傳回
addLocatorHandler
在 v1.42 中新增在測試網頁時,有時會出現意外的覆蓋層,例如「註冊」對話方塊,並封鎖您想要自動化的動作,例如按一下按鈕。這些覆蓋層不一定以相同的方式或在相同的時間顯示,使其在自動化測試中難以處理。
此方法可讓您設定一個特殊函式,稱為處理常式,當偵測到覆蓋層可見時,該函式會啟動。處理常式的工作是移除覆蓋層,讓您的測試繼續進行,就像覆蓋層不存在一樣。
請記住的事項
- 當覆蓋層可預測地顯示時,我們建議在您的測試中明確等待它,並將其作為正常測試流程的一部分解除,而不是使用 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 出現,應執行的函式。此函式應移除封鎖動作(例如按一下)的元素。
-
options
Page.AddLocatorHandlerOptions
(選用)
傳回
addScriptTag
在 v1.9 之前新增將 <script>
標籤新增到頁面中,其中包含所需的 URL 或內容。當腳本的 onload 事件觸發或腳本內容注入到框架中時,傳回新增的標籤。
用法
Page.addScriptTag();
Page.addScriptTag(options);
引數
options
Page.AddScriptTagOptions
(選用)
傳回
addStyleTag
在 v1.9 之前新增將 <link rel="stylesheet">
標籤新增到頁面中,其中包含所需的 URL 或包含內容的 <style type="text/css">
標籤。當樣式表的 onload 事件觸發或 CSS 內容注入到框架中時,傳回新增的標籤。
用法
Page.addStyleTag();
Page.addStyleTag(options);
引數
options
Page.AddStyleTagOptions
(選用)
傳回
bringToFront
在 v1.9 之前新增將頁面帶到前景(啟動分頁)。
用法
Page.bringToFront();
傳回
close
在 v1.9 之前新增如果 setRunBeforeUnload 為 false
,則不會執行任何卸載處理常式,並等待頁面關閉。如果 setRunBeforeUnload 為 true
,則此方法將執行卸載處理常式,但不會等待頁面關閉。
依預設,page.close()
不會執行 beforeunload
處理常式。
如果 setRunBeforeUnload 傳遞為 true,則可能會傳喚 beforeunload
對話方塊,應透過 Page.onDialog(handler) 事件手動處理。
用法
Page.close();
Page.close(options);
引數
options
Page.CloseOptions
(選用)-
要向頁面關閉中斷的操作報告的原因。
-
setRunBeforeUnload
boolean (選用)#預設為
false
。是否執行 before unload 頁面處理常式。
-
傳回
content
在 v1.9 之前新增取得頁面的完整 HTML 內容,包括 doctype。
用法
Page.content();
傳回
context
在 v1.9 之前新增取得頁面所屬的瀏覽器內容。
用法
Page.context();
傳回
dragAndDrop
在 v1.13 中新增此方法將來源元素拖曳到目標元素。它會先移動到來源元素,執行 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));
引數
-
要搜尋要拖曳的元素的選取器。如果有多個元素符合選取器,將使用第一個。
-
要搜尋要拖放到的元素的選取器。如果有多個元素符合選取器,將使用第一個。
-
options
Page.DragAndDropOptions
(選用)-
是否略過 可操作性 檢查。預設為
false
。 -
已淘汰
此選項無效。
此選項無效。
-
setSourcePosition
SourcePosition (選用)在 v1.14 中新增#在此點按一下來源元素,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某些可見點。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
setTargetPosition
TargetPosition (選用)在 v1.14 中新增#在此點拖放到目標元素上,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某些可見點。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為
false
。用於等待元素準備好進行動作而無需執行它。
-
傳回
emulateMedia
在 v1.9 之前新增此方法透過 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 之前新增傳回 expression 呼叫的值。
如果傳遞給 Page.evaluate() 的函式傳回 Promise,則 Page.evaluate() 將等待 Promise 解析並傳回其值。
如果傳遞給 Page.evaluate() 的函式傳回非 Serializable 值,則 Page.evaluate() 會解析為 undefined
。Playwright 也支援傳輸一些其他無法透過 JSON
序列化的值:-0
、NaN
、Infinity
、-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();
引數
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選用)#要傳遞至 expression 的選用引數。
傳回
evaluateHandle
在 v1.9 之前新增傳回 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();
引數
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選用)#要傳遞至 expression 的選用引數。
傳回
exposeBinding
在 v1.9 之前新增此方法在頁面中每個框架的 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");
}
}
}
引數
-
window 物件上函式的名稱。
-
callback
BindingCallback
#將在 Playwright 的內容中呼叫的回呼函式。
-
options
Page.ExposeBindingOptions
(選用)
傳回
exposeFunction
在 v1.9 之前新增此方法在頁面中每個框架的 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");
}
}
}
引數
傳回
frame
在 v1.9 之前新增傳回符合指定條件的框架。必須指定 name
或 url
其中之一。
用法
Frame frame = page.frame("frame-name");
Frame frame = page.frameByUrl(Pattern.compile(".*domain.*"));
引數
傳回
frameByUrl
在 v1.9 中新增傳回 URL 相符的 frame。
用法
Page.frameByUrl(url);
引數
傳回
frameLocator
新增於: v1.17當使用 iframe 時,您可以建立一個 frame 定位器,它將進入 iframe 並允許在該 iframe 中選取元素。
用法
以下程式碼片段在 id 為 my-frame
的 iframe 中尋找文字為「Submit」的元素,例如 <iframe id="my-frame">
Locator locator = page.frameLocator("#my-iframe").getByText("Submit");
locator.click();
引數
傳回
frames
在 v1.9 之前新增附加到頁面的所有 frame 的陣列。
用法
Page.frames();
傳回
getByAltText
新增於: v1.27允許透過元素的 alt 文字來定位元素。
用法
例如,此方法將透過 alt 文字「Playwright logo」找到圖片
<img alt='Playwright logo'>
page.getByAltText("Playwright logo").click();
引數
-
用於定位元素的文字。
-
options
Page.GetByAltTextOptions
(選填)
傳回
getByLabel
新增於: v1.27允許透過相關聯的 <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");
引數
-
用於定位元素的文字。
-
options
Page.GetByLabelOptions
(選填)
傳回
getByPlaceholder
新增於: v1.27允許透過 placeholder 文字來定位輸入元素。
用法
例如,考慮以下 DOM 結構。
<input type="email" placeholder="name@example.com" />
您可以在透過 placeholder 文字定位輸入後填寫內容
page.getByPlaceholder("name@example.com").fill("playwright@microsoft.com");
引數
-
用於定位元素的文字。
-
options
Page.GetByPlaceholderOptions
(選填)
傳回
getByRole
新增於: v1.27允許透過元素的 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
(選填)-
通常由
aria-checked
或原生<input type=checkbox>
控制項設定的屬性。深入瞭解
aria-checked
。 -
通常由
aria-disabled
或disabled
設定的屬性。注意與大多數其他屬性不同,
disabled
是透過 DOM 階層繼承的。深入瞭解aria-disabled
。 -
setExact
boolean (選填)新增於: v1.28#是否完全比對 setName:區分大小寫且完全字串符合。預設為 false。當 setName 是正規表示式時會被忽略。請注意,完全符合仍然會修剪空白字元。
-
通常由
aria-expanded
設定的屬性。深入瞭解
aria-expanded
。 -
setIncludeHidden
boolean (選填)#控制是否匹配隱藏元素的選項。預設情況下,只有非隱藏元素(如 ARIA 定義)會被角色選取器匹配。
深入瞭解
aria-hidden
。 -
數字屬性,通常存在於角色
heading
、listitem
、row
、treeitem
中,對於<h1>-<h6>
元素具有預設值。深入瞭解
aria-level
。 -
setName
String | Pattern (選填)#用於匹配可訪問名稱的選項。預設情況下,匹配不區分大小寫並搜尋子字串,使用 setExact 來控制此行為。
深入瞭解 可訪問名稱。
-
通常由
aria-pressed
設定的屬性。深入瞭解
aria-pressed
。 -
通常由
aria-selected
設定的屬性。深入瞭解
aria-selected
。
-
傳回
詳細資訊
角色選取器不會取代可訪問性稽核和一致性測試,而是提供關於 ARIA 指南的早期回饋。
許多 html 元素具有隱含的 定義角色,角色選取器可以識別該角色。您可以在此處找到所有支援的角色。ARIA 指南不建議透過將 role
和/或 aria-*
屬性設定為預設值來複製隱含角色和屬性。
getByTestId
新增於: v1.27透過測試 ID 定位元素。
用法
考慮以下 DOM 結構。
<button data-testid="directions">Itinéraire</button>
您可以透過元素的測試 ID 來定位元素
page.getByTestId("directions").click();
引數
傳回
詳細資訊
預設情況下,data-testid
屬性用作測試 ID。如有必要,請使用 Selectors.setTestIdAttribute() 來設定不同的測試 ID 屬性。
getByText
新增於: v1.27允許定位包含給定文字的元素。
另請參閱 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));
引數
-
用於定位元素的文字。
-
options
Page.GetByTextOptions
(選填)
傳回
詳細資訊
透過文字進行匹配始終會正規化空白字元,即使是完全符合也是如此。例如,它會將多個空格變成一個,將換行符號變成空格,並忽略開頭和結尾的空白字元。
類型為 button
和 submit
的輸入元素會透過它們的 value
而不是文字內容進行匹配。例如,透過文字 "Log in"
定位會匹配 <input type=button value="Log in">
。
getByTitle
新增於: v1.27允許透過元素的 title 屬性來定位元素。
用法
考慮以下 DOM 結構。
<span title='Issues count'>25 issues</span>
您可以在透過標題文字定位問題計數後檢查問題計數
assertThat(page.getByTitle("Issues count")).hasText("25 issues");
引數
-
用於定位元素的文字。
-
options
Page.GetByTitleOptions
(選填)
傳回
goBack
在 v1.9 之前新增傳回主要資源回應。在多次重新導向的情況下,導航將解析為最後一次重新導向的回應。如果無法返回,則傳回 null
。
導航到歷史記錄中的前一頁。
用法
Page.goBack();
Page.goBack(options);
引數
options
Page.GoBackOptions
(選填)-
最大操作時間(毫秒),預設為 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 之前新增傳回主要資源回應。在多次重新導向的情況下,導航將解析為最後一次重新導向的回應。如果無法前進,則傳回 null
。
導航到歷史記錄中的下一頁。
用法
Page.goForward();
Page.goForward(options);
引數
options
Page.GoForwardOptions
(選填)-
最大操作時間(毫秒),預設為 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();
傳回
locator
在 v1.14 中新增此方法傳回元素定位器,可用於在此頁面/frame 上執行操作。定位器會在執行操作之前立即解析為元素,因此在同一個定位器上執行的一系列操作實際上可以在不同的 DOM 元素上執行。如果這些操作之間的 DOM 結構已變更,則會發生這種情況。
用法
Page.locator(selector);
Page.locator(selector, options);
引數
-
用於解析 DOM 元素時使用的選取器。
-
options
Page.LocatorOptions
(選填)-
將方法的結果縮小到那些包含與此相對定位器匹配的元素的結果。例如,具有
text=Playwright
的article
會匹配<article><div>Playwright</div></article>
。內部定位器必須相對於外部定位器,並且從外部定位器匹配開始查詢,而不是從文件根目錄開始查詢。例如,您可以找到
content
,它在<article><content><div>Playwright</div></content></article>
中具有div
。但是,尋找具有article div
的content
將會失敗,因為內部定位器必須是相對的,並且不應使用content
之外的任何元素。請注意,外部和內部定位器必須屬於同一個 frame。內部定位器不得包含 FrameLocator。
-
setHasNot
Locator (選填)新增於: v1.33#匹配不包含與內部定位器匹配的元素的元素。內部定位器是針對外部定位器查詢的。例如,沒有
div
的article
會匹配<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 之前新增頁面的主 frame。頁面保證有一個在導航期間持續存在的主 frame。
用法
Page.mainFrame();
傳回
navigate
在 v1.9 之前新增傳回主要資源回應。在多次重新導向的情況下,導航將解析為第一個非重新導向的回應。
如果發生以下情況,此方法將拋出錯誤
- 存在 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。url 應包含 scheme,例如
https://
。當透過上下文選項提供 setBaseURL 且傳遞的 URL 是路徑時,它會透過new URL()
建構函式合併。 -
options
Page.NavigateOptions
(選填)-
Referer 標頭值。如果提供,它將優先於由 Page.setExtraHTTPHeaders() 設定的 referer 標頭值。
-
最大操作時間(毫秒),預設為 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新增一次性的 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);
引數
-
接收 Dialog 物件,它必須 Dialog.accept() 或 Dialog.dismiss() 對話方塊 - 否則頁面將會 凍結 等待對話方塊,而點擊等動作將永遠不會完成。
opener
在 v1.9 之前新增傳回彈出頁面的 opener,其他頁面則傳回 null
。如果 opener 已關閉,則傳回 null
。
用法
Page.opener();
傳回
pause
在 v1.9 中新增暫停腳本執行。Playwright 將停止執行腳本,並等待使用者按下頁面覆蓋層中的「繼續」按鈕,或在 DevTools 控制台中呼叫 playwright.resume()
。
使用者可以在暫停時檢查選取器或執行手動步驟。「繼續」將從暫停的位置繼續執行原始腳本。
此方法要求 Playwright 在有頭模式下啟動,且 setHeadless 選項為 falsy。
用法
Page.pause();
傳回
pdf
在 v1.9 之前新增傳回 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")));
setWidth、setHeight 和 setMargin 選項接受標記單位的數值。未標記單位的值會被視為像素。
一些範例
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 英吋
setHeaderTemplate 和 setFooterTemplate 標記具有以下限制: > 1. 範本內的 Script 標籤不會被評估。 > 2. 頁面樣式在範本內不可見。
引數
options
Page.PdfOptions
(選填)-
setDisplayHeaderFooter
boolean (選填)#顯示頁首和頁尾。預設為
false
。 -
setFooterTemplate
String (選填)#用於列印頁尾的 HTML 範本。應使用與 setHeaderTemplate 相同的格式。
-
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'。預設值為空字串,表示列印所有頁面。
-
儲存 PDF 的檔案路徑。如果 setPath 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,PDF 將不會儲存到磁碟。
-
setPreferCSSPageSize
布林值 (boolean) (選填)#優先採用頁面中宣告的任何 CSS
@page
尺寸,而不是 setWidth 和 setHeight 或 setFormat 選項中宣告的尺寸。預設值為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(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.addLocatorHandler() 為特定定位器新增的所有定位器處理程序。
用法
Page.removeLocatorHandler(locator);
引數
-
locator
定位器 (Locator)#傳遞至 Page.addLocatorHandler() 的定位器。
傳回
請求垃圾回收 (requestGC)
新增於:v1.48請求頁面執行垃圾回收。請注意,不保證所有無法存取的物件都會被回收。
這對於協助偵測記憶體洩漏很有用。例如,如果您的頁面有一個可能洩漏的大型物件 '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 之前新增路由功能提供修改頁面所發出網路請求的能力。
啟用路由後,每個符合 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 快取。
引數
-
url
字串 (String) | 模式 (Pattern) | Predicate<字串 (String)>#在路由時要比對的 glob 模式、正規表示式模式或接收 [URL] 的述詞。當透過內容選項提供 setBaseURL 且傳遞的 URL 是路徑時,它會透過
new URL()
建構子合併。 -
handler
消費者 (Consumer)<路由 (Route)>#用於路由請求的處理程序函數。
-
options
Page.RouteOptions
(選填)
傳回
從 HAR 路由 (routeFromHAR)
新增於:v1.23如果指定,則頁面中發出的網路請求將從 HAR 檔案提供。閱讀更多關於從 HAR 重新播放。
Playwright 將不會從 HAR 檔案提供 Service Worker 攔截的請求。請參閱 此 問題。我們建議在使用請求攔截時停用 Service Worker,方法是將 setServiceWorkers 設定為 'block'
。
用法
Page.routeFromHAR(har);
Page.routeFromHAR(har, options);
引數
-
包含預先錄製網路資料的 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此方法允許修改頁面建立的 WebSocket 連線。
請注意,只有在此方法呼叫之後建立的 WebSocket
才會被路由。建議在導航頁面之前呼叫此方法。
用法
以下是一個簡單模擬的範例,它回應單一訊息。請參閱 WebSocketRoute 以取得更多詳細資訊和範例。
page.routeWebSocket("/ws", ws -> {
ws.onMessage(frame -> {
if ("request".equals(frame.text()))
ws.send("response");
});
});
引數
-
url
字串 (String) | 模式 (Pattern) | Predicate<字串 (String)>#只有 URL 符合此模式的 WebSocket 會被路由。字串模式可以是相對於 setBaseURL 內容選項的相對路徑。
-
handler
消費者 (Consumer)<WebSocketRoute>#用於路由 WebSocket 的處理程序函數。
傳回
螢幕截圖 (screenshot)
在 v1.9 之前新增傳回包含已擷取螢幕截圖的緩衝區。
用法
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) (選填)#-
setX
double裁切區域左上角的 x 座標
-
setY
double裁切區域左上角的 y 座標
-
setWidth
雙精度浮點數 (double)裁切區域的寬度
-
setHeight
雙精度浮點數 (double)裁切區域的高度
指定結果影像裁切的物件。
-
-
setFullPage
布林值 (boolean) (選填)#當為 true 時,會擷取完整可捲動頁面的螢幕截圖,而不是目前可見的視窗。預設值為
false
。 -
setMask
List<定位器 (Locator)> (選填)#指定在擷取螢幕截圖時應遮罩的定位器。遮罩元素將被粉紅色方框
#FF00FF
(由 setMaskColor 自訂) 覆蓋,完全遮蓋其邊界框。 -
setMaskColor
字串 (String) (選填)新增於:v1.35#指定遮罩元素的覆蓋方框顏色,以 CSS 顏色格式 表示。預設顏色為粉紅色
#FF00FF
。 -
setOmitBackground
布林值 (boolean) (選填)#隱藏預設白色背景,並允許擷取具有透明度的螢幕截圖。不適用於
jpeg
影像。預設值為false
。 -
儲存影像的檔案路徑。螢幕截圖類型將從檔案副檔名推斷。如果 setPath 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,影像將不會儲存到磁碟。
-
影像品質,介於 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 之前新增此方法在內部呼叫 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.goBack()
- Page.goForward()
- Page.navigate()
- Page.reload()
- Page.setContent()
- Page.waitForNavigation()
- Page.waitForURL()
用法
Page.setDefaultNavigationTimeout(timeout);
引數
-
timeout
雙精度浮點數 (double)#最大導航時間,以毫秒為單位
設定預設逾時 (setDefaultTimeout)
在 v1.9 之前新增此設定將變更所有接受 timeout 選項的方法的預設最大時間。
用法
Page.setDefaultTimeout(timeout);
引數
-
timeout
雙精度浮點數 (double)#最大時間,以毫秒為單位。傳遞
0
以停用逾時。
設定額外 HTTP 標頭 (setExtraHTTPHeaders)
在 v1.9 之前新增額外的 HTTP 標頭將與頁面啟動的每個請求一起傳送。
Page.setExtraHTTPHeaders() 不保證傳出請求中標頭的順序。
用法
Page.setExtraHTTPHeaders(headers);
引數
-
headers
Map<字串 (String), 字串 (String)>#包含要與每個請求一起傳送的額外 HTTP 標頭的物件。所有標頭值都必須是字串。
傳回
設定視窗尺寸 (setViewportSize)
在 v1.9 之前新增在單一瀏覽器中有多個頁面的情況下,每個頁面都可以有自己的視窗尺寸。但是,Browser.newContext() 允許一次為內容中的所有頁面設定視窗尺寸 (以及更多)。
Page.setViewportSize() 將調整頁面大小。許多網站不希望手機變更大小,因此您應該在導航到頁面之前設定視窗尺寸。Page.setViewportSize() 也會重設 screen
大小,如果您需要更好地控制這些屬性,請使用帶有 screen
和 viewport
參數的 Browser.newContext()。
用法
Page page = browser.newPage();
page.setViewportSize(640, 480);
page.navigate("https://example.com");
引數
傳回
標題 (title)
在 v1.9 之前新增傳回頁面的標題。
用法
Page.title();
傳回
取消路由 (unroute)
在 v1.9 之前新增移除使用 Page.route() 建立的路由。當未指定 handler 時,移除 url 的所有路由。
用法
Page.unroute(url);
Page.unroute(url, handler);
引數
-
url
字串 (String) | 模式 (Pattern) | Predicate<字串 (String)>#在路由時要比對的 glob 模式、正規表示式模式或接收 [URL] 的述詞。
-
handler
消費者 (Consumer)<路由 (Route)> (選填)#用於路由請求的選填處理程序函數。
傳回
取消所有路由 (unrouteAll)
新增於:v1.41移除使用 Page.route() 和 Page.routeFromHAR() 建立的所有路由。
用法
Page.unrouteAll();
傳回
網址 (url)
在 v1.9 之前新增用法
Page.url();
傳回
影片 (video)
在 v1.9 之前新增與此頁面關聯的影片物件。
用法
Page.video();
傳回
視窗尺寸 (viewportSize)
在 v1.9 之前新增用法
Page.viewportSize();
傳回
等待關閉 (waitForClose)
新增於:v1.11執行動作並等待頁面關閉。
用法
Page.waitForClose(callback);
Page.waitForClose(callback, options);
引數
-
options
Page.WaitForCloseOptions
(選填)-
setTimeout
雙精度浮點數 (double) (選填)在 v1.9 中新增#最大等待時間,以毫秒為單位。預設值為
30000
(30 秒)。傳遞0
以停用逾時。可以使用 BrowserContext.setDefaultTimeout() 變更預設值。
-
-
執行觸發事件動作的回呼。
傳回
等待條件 (waitForCondition)
新增於:v1.32此方法將會封鎖,直到條件傳回 true。當方法等待條件時,將會分派所有 Playwright 事件。
用法
使用此方法等待取決於頁面事件的條件
List<String> messages = new ArrayList<>();
page.onConsoleMessage(m -> messages.add(m.text()));
page.getByText("Submit button").click();
page.waitForCondition(() -> messages.size() > 3);
引數
-
condition
[BooleanSupplier]#要等待的條件。
-
options
Page.WaitForConditionOptions
(選填)-
setTimeout
雙精度浮點數 (double) (選填)#最大等待時間,以毫秒為單位。預設值為
30000
(30 秒)。傳遞0
以停用逾時。可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更預設值。
-
傳回
waitForConsoleMessage
在 v1.9 中新增執行動作並等待頁面中記錄 ConsoleMessage。如果提供 predicate,它會將 ConsoleMessage 值傳遞到 predicate
函數中,並等待 predicate(message)
返回真值。如果在 Page.onConsoleMessage(handler) 事件觸發之前頁面關閉,將拋出錯誤。
用法
Page.waitForConsoleMessage(callback);
Page.waitForConsoleMessage(callback, options);
引數
-
options
Page.WaitForConsoleMessageOptions
(選填)-
setPredicate
Predicate<ConsoleMessage> (選填)#接收 ConsoleMessage 物件,並在等待應解析時解析為真值。
-
最大等待時間,以毫秒為單位。預設值為
30000
(30 秒)。傳遞0
以停用逾時。可以使用 BrowserContext.setDefaultTimeout() 變更預設值。
-
-
執行觸發事件動作的回呼。
傳回
waitForDownload
在 v1.9 中新增執行動作並等待新的 Download。如果提供 predicate,它會將 Download 值傳遞到 predicate
函數中,並等待 predicate(download)
返回真值。如果在下載事件觸發之前頁面關閉,將拋出錯誤。
用法
Page.waitForDownload(callback);
Page.waitForDownload(callback, options);
引數
-
options
Page.WaitForDownloadOptions
(選填) -
執行觸發事件動作的回呼。
傳回
waitForFileChooser
在 v1.9 中新增執行動作並等待新的 FileChooser 被建立。如果提供 predicate,它會將 FileChooser 值傳遞到 predicate
函數中,並等待 predicate(fileChooser)
返回真值。如果在檔案選擇器開啟之前頁面關閉,將拋出錯誤。
用法
Page.waitForFileChooser(callback);
Page.waitForFileChooser(callback, options);
引數
-
options
Page.WaitForFileChooserOptions
(選填)-
setPredicate
Predicate<FileChooser> (選填)#接收 FileChooser 物件,並在等待應解析時解析為真值。
-
最大等待時間,以毫秒為單位。預設值為
30000
(30 秒)。傳遞0
以停用逾時。可以使用 BrowserContext.setDefaultTimeout() 變更預設值。
-
-
執行觸發事件動作的回呼。
傳回
waitForFunction
在 v1.9 之前新增當 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);
引數
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選填)#傳遞給 expression 的選填參數。
-
options
Page.WaitForFunctionOptions
(選填)-
setPollingInterval
double (選填)#如果指定,則將其視為函數將被執行的間隔(以毫秒為單位)。預設情況下,如果未指定此選項,則 expression 將在
requestAnimationFrame
回呼中執行。 -
最大等待時間,以毫秒為單位。預設值為
30000
(30 秒)。傳遞0
以停用逾時。可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更預設值。
-
傳回
waitForLoadState
在 v1.9 之前新增當達到所需的載入狀態時返回。
當頁面達到所需的載入狀態時,預設為 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
(選填)-
最大操作時間(毫秒),預設為 30 秒,傳遞
0
以停用逾時。預設值可以使用 BrowserContext.setDefaultNavigationTimeout()、BrowserContext.setDefaultTimeout()、Page.setDefaultNavigationTimeout() 或 Page.setDefaultTimeout() 方法進行變更。
-
傳回
waitForPopup
在 v1.9 中新增執行動作並等待彈出視窗 Page。如果提供 predicate,它會將 [Popup] 值傳遞到 predicate
函數中,並等待 predicate(page)
返回真值。如果在彈出視窗事件觸發之前頁面關閉,將拋出錯誤。
用法
Page.waitForPopup(callback);
Page.waitForPopup(callback, options);
引數
-
options
Page.WaitForPopupOptions
(選填) -
執行觸發事件動作的回呼。
傳回
waitForRequest
在 v1.9 之前新增等待符合的請求並返回它。有關事件的更多詳細資訊,請參閱等待事件。
用法
// 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
(選填)-
最大等待時間,以毫秒為單位,預設為 30 秒,傳遞
0
以停用逾時。可以使用 Page.setDefaultTimeout() 方法更改預設值。
-
-
執行觸發事件動作的回呼。
傳回
waitForRequestFinished
在 v1.12 中新增執行動作並等待 Request 完成載入。如果提供 predicate,它會將 Request 值傳遞到 predicate
函數中,並等待 predicate(request)
返回真值。如果在 Page.onRequestFinished(handler) 事件觸發之前頁面關閉,將拋出錯誤。
用法
Page.waitForRequestFinished(callback);
Page.waitForRequestFinished(callback, options);
引數
-
options
Page.WaitForRequestFinishedOptions
(選填) -
執行觸發事件動作的回呼。
傳回
waitForResponse
在 v1.9 之前新增返回符合的回應。有關事件的更多詳細資訊,請參閱等待事件。
用法
// 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();
});
引數
-
urlOrPredicate
String | Pattern | Predicate<Response>#請求 URL 字串、正則表達式或接收 Response 物件的 predicate。當透過 context 選項提供 setBaseURL,且傳遞的 URL 是路徑時,它會透過
new URL()
建構函式合併。 -
options
Page.WaitForResponseOptions
(選填)-
最大等待時間,以毫秒為單位,預設為 30 秒,傳遞
0
以停用逾時。可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法更改預設值。
-
-
執行觸發事件動作的回呼。
傳回
waitForURL
新增於:v1.11等待主框架導航到給定的 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
(選填)-
最大操作時間(毫秒),預設為 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 中新增執行動作並等待新的 WebSocket。如果提供 predicate,它會將 WebSocket 值傳遞到 predicate
函數中,並等待 predicate(webSocket)
返回真值。如果在 WebSocket 事件觸發之前頁面關閉,將拋出錯誤。
用法
Page.waitForWebSocket(callback);
Page.waitForWebSocket(callback, options);
引數
-
options
Page.WaitForWebSocketOptions
(選填) -
執行觸發事件動作的回呼。
傳回
waitForWorker
在 v1.9 中新增執行動作並等待新的 Worker。如果提供 predicate,它會將 Worker 值傳遞到 predicate
函數中,並等待 predicate(worker)
返回真值。如果在 worker 事件觸發之前頁面關閉,將拋出錯誤。
用法
Page.waitForWorker(callback);
Page.waitForWorker(callback, options);
引數
-
options
Page.WaitForWorkerOptions
(選填) -
執行觸發事件動作的回呼。
傳回
workers
在 v1.9 之前新增此方法返回與頁面關聯的所有專用 WebWorker。
這不包含 ServiceWorker
用法
Page.workers();
傳回
屬性
clock()
Added in: v1.45Playwright 具有模擬時鐘和時間流逝的能力。
用法
Page.clock()
傳回
keyboard()
在 v1.9 之前新增用法
Page.keyboard()
傳回
mouse()
在 v1.9 之前新增用法
Page.mouse()
傳回
request()
Added in: v1.16與此頁面關聯的 API 測試輔助工具。此方法返回與頁面 context 上的 BrowserContext.request() 相同的實例。有關更多詳細資訊,請參閱 BrowserContext.request()。
用法
Page.request()
傳回
touchscreen()
在 v1.9 之前新增用法
Page.touchscreen()
傳回
事件
onClose(handler)
在 v1.9 之前新增當頁面關閉時發出。
用法
Page.onClose(handler)
事件資料
onConsoleMessage(handler)
在 v1.9 之前新增當頁面內的 JavaScript 呼叫其中一個 console API 方法時發出,例如 console.log
或 console.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 之前新增當頁面崩潰時發出。如果瀏覽器頁面嘗試分配過多記憶體,則可能會崩潰。當頁面崩潰時,正在進行和後續的操作將拋出錯誤。
處理崩潰最常見的方法是捕獲異常
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 之前新增當 JavaScript 對話框出現時發出,例如 alert
、prompt
、confirm
或 beforeunload
。監聽器**必須** Dialog.accept() 或 Dialog.dismiss() 對話框 - 否則頁面將凍結等待對話框,並且像 click 這樣的操作將永遠不會完成。
用法
page.onDialog(dialog -> {
dialog.accept();
});
當沒有 Page.onDialog(handler) 或 BrowserContext.onDialog(handler) 監聽器存在時,所有對話框都會自動關閉。
事件資料
onDOMContentLoaded(handler)
在 v1.9 中新增當 JavaScript DOMContentLoaded
事件被分派時發出。
用法
Page.onDOMContentLoaded(handler)
事件資料
onDownload(handler)
在 v1.9 之前新增當附件下載開始時發出。使用者可以透過傳遞的 Download 實例存取已下載內容的基本檔案操作。
用法
Page.onDownload(handler)
事件資料
onFileChooser(handler)
在 v1.9 中新增當檔案選擇器應該出現時發出,例如在點擊 <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)
事件資料
onFrameDetached(handler)
在 v1.9 中新增當框架被分離時發出。
用法
Page.onFrameDetached(handler)
事件資料
onFrameNavigated(handler)
在 v1.9 中新增當框架導航到新的 URL 時發出。
用法
Page.onFrameNavigated(handler)
事件資料
onLoad(handler)
在 v1.9 之前新增當 JavaScript load
事件被分派時發出。
用法
Page.onLoad(handler)
事件資料
onPageError(handler)
在 v1.9 中新增當頁面內發生未捕獲的異常時發出。
// 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 之前新增當頁面開啟新的標籤頁或視窗時發出。此事件除了 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 之前新增當頁面發出請求時發出。request 物件是唯讀的。為了攔截和更改請求,請參閱 Page.route() 或 BrowserContext.route()。
用法
Page.onRequest(handler)
事件資料
onRequestFailed(handler)
在 v1.9 中新增當請求失敗時發出,例如由於逾時。
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 中新增當請求在下載回應 body 後成功完成時發出。對於成功的回應,事件順序為 request
、response
和 requestfinished
。
用法
Page.onRequestFinished(handler)
事件資料
onResponse(handler)
在 v1.9 之前新增當接收到請求的 response 狀態和標頭時發出。對於成功的回應,事件順序為 request
、response
和 requestfinished
。
用法
Page.onResponse(handler)
事件資料
onWebSocket(handler)
在 v1.9 中新增當 WebSocket 請求被發送時發出。
用法
Page.onWebSocket(handler)
事件資料
onWorker(handler)
在 v1.9 之前新增當專用 WebWorker 由頁面衍生時發出。
用法
Page.onWorker(handler)
事件資料
已棄用
check
在 v1.9 之前新增請改用基於定位器的 Locator.check()。閱讀更多關於定位器的資訊。
此方法透過執行以下步驟來檢查符合 selector 的元素
- 尋找符合選取器的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
- 確保匹配的元素是核取方塊或單選輸入框。如果不是,此方法會拋出錯誤。如果元素已經被選取,此方法會立即返回。
- 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
- 如果需要,將元素捲動到可視範圍內。
- 使用 Page.mouse() 在元素中心點擊。
- 確保元素現在已被選取。如果沒有,此方法會拋出錯誤。
當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。
用法
Page.check(selector);
Page.check(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.CheckOptions
(選用)-
是否略過 可操作性 檢查。預設為
false
。 -
已淘汰
此選項無效。
此選項無效。
-
setPosition
位置 (選用)新增於:v1.11#相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為
false
。用於等待元素準備好進行動作而無需執行它。
-
傳回
點擊
在 v1.9 之前新增請改用基於定位器的 Locator.click()。閱讀更多關於定位器的資訊。
此方法通過執行以下步驟,點擊符合 選取器 的元素
- 尋找符合 選取器 的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
- 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
- 如果需要,將元素捲動到可視範圍內。
- 使用 Page.mouse() 在元素中心點擊,或在指定的 setPosition 位置點擊。
- 等待啟動的導航成功或失敗,除非設定了 setNoWaitAfter 選項。
當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。
用法
Page.click(selector);
Page.click(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.ClickOptions
(選用)-
setButton
enum MouseButton { LEFT, RIGHT, MIDDLE }
(選用)#預設為
left
。 -
預設為 1。請參閱 UIEvent.detail。
-
mousedown
和mouseup
之間等待的時間,以毫秒為單位。預設為 0。 -
是否略過 可操作性 檢查。預設為
false
。 -
setModifiers
列表<enum KeyboardModifier { ALT, CONTROL, CONTROLORMETA, META, SHIFT }
> (選用)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已淘汰
此選項在未來將預設為
true
。啟動導航的動作會等待這些導航發生以及頁面開始載入。您可以通過設定此標誌來選擇不等待。您只需要在特殊情況下使用此選項,例如導航到無法訪問的頁面。預設為
false
。 -
setPosition
位置 (選用)#相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查並跳過動作。預設為
false
。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論trial
設定如何,都會按下鍵盤modifiers
,以便測試僅在按下這些鍵時才可見的元素。
-
傳回
雙擊
在 v1.9 之前新增請改用基於定位器的 Locator.dblclick()。閱讀更多關於定位器的資訊。
此方法通過執行以下步驟,雙擊符合 選取器 的元素
- 尋找符合 選取器 的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
- 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
- 如果需要,將元素捲動到可視範圍內。
- 使用 Page.mouse() 在元素中心雙擊,或在指定的 setPosition 位置雙擊。
當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。
page.dblclick()
會派發兩個 click
事件和一個 dblclick
事件。
用法
Page.dblclick(selector);
Page.dblclick(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.DblclickOptions
(選用)-
setButton
enum MouseButton { LEFT, RIGHT, MIDDLE }
(選用)#預設為
left
。 -
mousedown
和mouseup
之間等待的時間,以毫秒為單位。預設為 0。 -
是否略過 可操作性 檢查。預設為
false
。 -
setModifiers
列表<enum KeyboardModifier { ALT, CONTROL, CONTROLORMETA, META, SHIFT }
> (選用)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已淘汰
此選項無效。
此選項無效。
-
setPosition
位置 (選用)#相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查並跳過動作。預設為
false
。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論trial
設定如何,都會按下鍵盤modifiers
,以便測試僅在按下這些鍵時才可見的元素。
-
傳回
派發事件
在 v1.9 之前新增請改用基於定位器的 Locator.dispatchEvent()。閱讀更多關於定位器的資訊。
以下程式碼片段在元素上派發 click
事件。無論元素的顯示狀態如何,都會派發 click
事件。這等同於呼叫 element.click()。
用法
page.dispatchEvent("button#submit", "click");
在底層,它會根據給定的 type 建立一個事件實例,使用 eventInit 屬性初始化它,並在元素上派發它。事件預設為 composed
、cancelable
和 bubble。
由於 eventInit 是事件特定的,請參閱事件文檔以獲取初始屬性列表
- DeviceMotionEvent
- DeviceOrientationEvent
- DragEvent
- Event
- FocusEvent
- KeyboardEvent
- MouseEvent
- PointerEvent
- TouchEvent
- WheelEvent
如果您希望將即時物件傳遞到事件中,也可以將 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);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
DOM 事件類型:
"click"
、"dragstart"
等。 -
eventInit
EvaluationArgument (選用)#選用的事件特定初始化屬性。
-
options
Page.DispatchEventOptions
(選用)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
evalOnSelector
在 v1.9 中新增此方法不會等待元素通過可操作性檢查,因此可能導致測試不穩定。請改用 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");
引數
-
要查詢的選取器。
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選用)#傳遞給 expression 的選用參數。
-
options
Page.EvalOnSelectorOptions
(選用)
傳回
evalOnSelectorAll
在 v1.9 中新增在大多數情況下,Locator.evaluateAll()、其他 Locator 輔助方法和以網頁優先的斷言效果更好。
此方法在頁面中尋找符合指定選取器的所有元素,並將匹配元素的陣列作為第一個參數傳遞給 expression。返回 expression 呼叫的結果。
如果 expression 返回一個 Promise,則 Page.evalOnSelectorAll() 將等待 Promise 解析並返回其值。
用法
boolean divCounts = (boolean) page.evalOnSelectorAll("div", "(divs, min) => divs.length >= min", 10);
引數
-
要查詢的選取器。
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選用)#傳遞給 expression 的選用參數。
傳回
填寫
在 v1.9 之前新增請改用基於定位器的 Locator.fill()。閱讀更多關於定位器的資訊。
此方法等待符合 選取器 的元素,等待可操作性檢查,聚焦元素,填寫它,並在填寫後觸發 input
事件。請注意,您可以傳遞空字串來清除輸入欄位。
如果目標元素不是 <input>
、<textarea>
或 [contenteditable]
元素,此方法會拋出錯誤。但是,如果元素位於 <label>
元素內,且該元素具有關聯的 control,則將改為填寫該 control。
若要發送細粒度的鍵盤事件,請使用 Locator.pressSequentially()。
用法
Page.fill(selector, value);
Page.fill(selector, value, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
要為
<input>
、<textarea>
或[contenteditable]
元素填寫的值。 -
options
Page.FillOptions
(選用)-
是否略過 可操作性 檢查。預設為
false
。 -
已淘汰
此選項無效。
此選項無效。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
聚焦
在 v1.9 之前新增請改用基於定位器的 Locator.focus()。閱讀更多關於定位器的資訊。
此方法獲取具有 選取器 的元素並聚焦它。如果沒有元素符合 選取器,則此方法會等待直到符合的元素出現在 DOM 中。
用法
Page.focus(selector);
Page.focus(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.FocusOptions
(選用)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
getAttribute
在 v1.9 之前新增請改用基於定位器的 Locator.getAttribute()。閱讀更多關於定位器的資訊。
返回元素屬性值。
用法
Page.getAttribute(selector, name);
Page.getAttribute(selector, name, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
要獲取值的屬性名稱。
-
options
Page.GetAttributeOptions
(選用)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
懸停
在 v1.9 之前新增請改用基於定位器的 Locator.hover()。閱讀更多關於定位器的資訊。
此方法通過執行以下步驟,懸停在符合 選取器 的元素上
- 尋找符合 選取器 的元素。如果沒有找到,則等待直到符合的元素被添加到 DOM 中。
- 等待對匹配的元素執行可操作性檢查,除非設定了 setForce 選項。如果在檢查期間元素被移除,則整個動作會重試。
- 如果需要,將元素捲動到可視範圍內。
- 使用 Page.mouse() 在元素中心懸停,或在指定的 setPosition 位置懸停。
當所有步驟在指定的 setTimeout 時間內未完成時,此方法會拋出 TimeoutError。傳遞零超時時間將禁用此功能。
用法
Page.hover(selector);
Page.hover(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.HoverOptions
(選用)-
是否略過 可操作性 檢查。預設為
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 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查並跳過動作。預設為
false
。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論trial
設定如何,都會按下鍵盤modifiers
,以便測試僅在按下這些鍵時才可見的元素。
-
傳回
innerHTML
在 v1.9 之前新增請改用基於定位器的 Locator.innerHTML()。閱讀更多關於定位器的資訊。
返回 element.innerHTML
。
用法
Page.innerHTML(selector);
Page.innerHTML(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.InnerHTMLOptions
(選用)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
innerText
在 v1.9 之前新增請改用基於定位器的 Locator.innerText()。閱讀更多關於定位器的資訊。
返回 element.innerText
。
用法
Page.innerText(selector);
Page.innerText(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.InnerTextOptions
(選用)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
inputValue
在 v1.13 中新增請改用基於定位器的 Locator.inputValue()。閱讀更多關於定位器的資訊。
返回選定的 <input>
或 <textarea>
或 <select>
元素的 input.value
。
對於非輸入元素拋出錯誤。但是,如果元素位於 <label>
元素內,且該元素具有關聯的 control,則返回該 control 的值。
用法
Page.inputValue(selector);
Page.inputValue(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.InputValueOptions
(選用)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
isChecked
在 v1.9 之前新增請改用基於 locator 的 Locator.isChecked()。閱讀更多關於 locators 的資訊。
傳回元素是否被勾選。如果元素不是核取方塊或單選輸入,則會拋出錯誤。
用法
Page.isChecked(selector);
Page.isChecked(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.IsCheckedOptions
(選填)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
isDisabled
在 v1.9 之前新增請改用基於 locator 的 Locator.isDisabled()。閱讀更多關於 locators 的資訊。
傳回元素是否為停用狀態,與 enabled 相反。
用法
Page.isDisabled(selector);
Page.isDisabled(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.IsDisabledOptions
(選填)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
isEditable
在 v1.9 之前新增請改用基於 locator 的 Locator.isEditable()。閱讀更多關於 locators 的資訊。
傳回元素是否為 可編輯 狀態。
用法
Page.isEditable(selector);
Page.isEditable(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.IsEditableOptions
(選填)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
isEnabled
在 v1.9 之前新增請改用基於 locator 的 Locator.isEnabled()。閱讀更多關於 locators 的資訊。
傳回元素是否為 啟用 狀態。
用法
Page.isEnabled(selector);
Page.isEnabled(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.IsEnabledOptions
(選填)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
isHidden
在 v1.9 之前新增請改用基於 locator 的 Locator.isHidden()。閱讀更多關於 locators 的資訊。
傳回元素是否為隱藏狀態,與 visible 相反。不符合任何元素的 selector 會被視為隱藏。
用法
Page.isHidden(selector);
Page.isHidden(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.IsHiddenOptions
(選填)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
已淘汰
此選項會被忽略。Page.isHidden() 不會等待元素變成隱藏狀態,並立即傳回結果。
-
傳回
isVisible
在 v1.9 之前新增請改用基於 locator 的 Locator.isVisible()。閱讀更多關於 locators 的資訊。
傳回元素是否為 可見 狀態。不符合任何元素的 selector 會被視為不可見。
用法
Page.isVisible(selector);
Page.isVisible(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.IsVisibleOptions
(選填)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
已淘汰
此選項會被忽略。Page.isVisible() 不會等待元素變成可見狀態,並立即傳回結果。
-
傳回
press
在 v1.9 之前新增請改用基於 locator 的 Locator.press()。閱讀更多關於 locators 的資訊。
聚焦元素,然後使用 Keyboard.down() 和 Keyboard.up()。
key 可以指定預期的 keyboardEvent.key 值或單一字元來產生文字。 key 值的超集可以在 這裡 找到。按鍵範例有:
F1
- F12
、Digit0
- Digit9
、KeyA
- KeyZ
、Backquote
、Minus
、Equal
、Backslash
、Backspace
、Tab
、Delete
、Escape
、ArrowDown
、End
、Enter
、Home
、Insert
、PageDown
、PageUp
、ArrowRight
、ArrowUp
等。
也支援以下修改快捷鍵:Shift
、Control
、Alt
、Meta
、ShiftLeft
、ControlOrMeta
。 ControlOrMeta
在 Windows 和 Linux 上解析為 Control
,在 macOS 上解析為 Meta
。
按住 Shift
鍵將會輸入與 key 對應的大寫文字。
如果 key 是單一字元,則區分大小寫,因此值 a
和 A
將會產生不同的對應文字。
也支援諸如 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" )));
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
要按下的按鍵名稱或要產生的字元,例如
ArrowLeft
或a
。 -
options
Page.PressOptions
(選填)-
keydown
和keyup
之間等待的時間,以毫秒為單位。預設值為 0。 -
已淘汰
此選項在未來將預設為
true
。啟動導航的動作會等待這些導航發生以及頁面開始載入。您可以通過設定此標誌來選擇不等待。您只需要在特殊情況下使用此選項,例如導航到無法訪問的頁面。預設為
false
。 -
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
querySelector
在 v1.9 中新增請改用基於 locator 的 Page.locator()。閱讀更多關於 locators 的資訊。
此方法在頁面中尋找符合指定 selector 的元素。如果沒有元素符合 selector,則傳回值會解析為 null
。若要等待頁面上的元素,請使用 Locator.waitFor()。
用法
Page.querySelector(selector);
Page.querySelector(selector, options);
引數
-
要查詢的選取器。
-
options
Page.QuerySelectorOptions
(選填)
傳回
querySelectorAll
在 v1.9 中新增請改用基於 locator 的 Page.locator()。閱讀更多關於 locators 的資訊。
此方法在頁面中尋找符合指定 selector 的所有元素。如果沒有元素符合 selector,則傳回值會解析為 []
。
用法
Page.querySelectorAll(selector);
引數
傳回
selectOption
在 v1.9 之前新增請改用基於 locator 的 Locator.selectOption()。閱讀更多關於 locators 的資訊。
此方法會等待符合 selector 的元素,等待 actionability 檢查,等待直到所有指定的選項都出現在 <select>
元素中,然後選取這些選項。
如果目標元素不是 <select>
元素,此方法會拋出錯誤。但是,如果元素位於具有關聯 control 的 <label>
元素內,則會改為使用該 control。
傳回已成功選取的選項值陣列。
在選取所有提供的選項後,觸發 change
和 input
事件。
用法
// 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"});
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
values
null | String | ElementHandle | String[] |SelectOption
| ElementHandle[] |SelectOption
[]#-
setValue
String (選填)依
option.value
比對。選填。 -
setLabel
String (選填)依
option.label
比對。選填。 -
setIndex
int (選填)依索引比對。選填。
要選取的選項。如果
<select>
具有multiple
屬性,則會選取所有符合的選項,否則只會選取第一個符合傳遞選項之一的選項。字串值會比對值和標籤。如果所有指定的屬性都符合,則選項會被視為符合。 -
-
options
Page.SelectOptionOptions
(選填)-
是否略過 可操作性 檢查。預設為
false
。 -
已淘汰
此選項無效。
此選項無效。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
setChecked
在 v1.15 中新增請改用基於 locator 的 Locator.setChecked()。閱讀更多關於 locators 的資訊。
此方法透過執行以下步驟來勾選或取消勾選符合 selector 的元素:
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。
- 如果元素已處於正確的勾選狀態,此方法會立即傳回。
- 等待符合元素上的 actionability 檢查,除非設定了 setForce 選項。如果在檢查期間元素被分離,則會重試整個動作。
- 如果需要,將元素捲動到可視範圍內。
- 使用 Page.mouse() 在元素中心點擊。
- 確保元素現在已勾選或取消勾選。如果不是,此方法會拋出錯誤。
當所有步驟組合在一起未在指定的 setTimeout 期間完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
Page.setChecked(selector, checked);
Page.setChecked(selector, checked, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
是否要勾選或取消勾選核取方塊。
-
options
Page.SetCheckedOptions
(選填)-
是否略過 可操作性 檢查。預設為
false
。 -
已淘汰
此選項無效。
此選項無效。
-
setPosition
Position (選填)#相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。
-
為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為
false
。用於等待元素準備好進行動作而無需執行它。
-
傳回
setInputFiles
在 v1.9 之前新增請改用基於 locator 的 Locator.setInputFiles()。閱讀更多關於 locators 的資訊。
設定檔案輸入的值為這些檔案路徑或檔案。如果某些 filePaths
是相對路徑,則它們會相對於目前的工作目錄解析。對於空陣列,清除選取的檔案。對於具有 [webkitdirectory]
屬性的輸入,僅支援單一目錄路徑。
此方法預期 selector 指向 input 元素。但是,如果元素位於具有關聯 control 的 <label>
元素內,則會改為以該 control 為目標。
用法
Page.setInputFiles(selector, files);
Page.setInputFiles(selector, files, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.SetInputFilesOptions
(選填)-
已淘汰
此選項無效。
此選項無效。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
tap
在 v1.9 之前新增請改用基於 locator 的 Locator.tap()。閱讀更多關於 locators 的資訊。
此方法透過執行以下步驟來點擊符合 selector 的元素:
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 等待符合元素上的 actionability 檢查,除非設定了 setForce 選項。如果在檢查期間元素被分離,則會重試整個動作。
- 如果需要,將元素捲動到可視範圍內。
- 使用 Page.touchscreen() 點擊元素的中心,或指定的 setPosition。
當所有步驟組合在一起未在指定的 setTimeout 期間完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
如果瀏覽器內容的 setHasTouch 選項為 false,則 Page.tap() 方法將會拋出錯誤。
用法
Page.tap(selector);
Page.tap(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.TapOptions
(選填)-
是否略過 可操作性 檢查。預設為
false
。 -
setModifiers
List<enum KeyboardModifier { ALT, CONTROL, CONTROLORMETA, META, SHIFT }
> (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已淘汰
此選項無效。
此選項無效。
-
setPosition
Position (選填)#相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查並跳過動作。預設為
false
。適用於等待元素準備好執行動作,但不實際執行動作的情況。請注意,無論trial
設定如何,都會按下鍵盤modifiers
,以便測試僅在按下這些鍵時才可見的元素。
-
傳回
textContent
在 v1.9 之前新增請改用基於 locator 的 Locator.textContent()。閱讀更多關於 locators 的資訊。
傳回 element.textContent
。
用法
Page.textContent(selector);
Page.textContent(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.TextContentOptions
(選填)-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
type
在 v1.9 之前新增在大多數情況下,您應該改用 Locator.fill()。只有在頁面上有特殊的鍵盤處理時,才需要逐個按下按鍵 - 在這種情況下,請使用 Locator.pressSequentially()。
為文字中的每個字元傳送 keydown
、keypress
/input
和 keyup
事件。 page.type
可用於傳送細緻的鍵盤事件。若要在表單欄位中填寫值,請使用 Page.fill()。
若要按下特殊按鍵,例如 Control
或 ArrowDown
,請使用 Keyboard.press()。
用法
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
要輸入到聚焦元素中的文字。
-
options
Page.TypeOptions
(選填)-
按鍵按下之間等待的時間,以毫秒為單位。預設值為 0。
-
已淘汰
此選項無效。
此選項無效。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
uncheck
在 v1.9 之前新增請改用基於 locator 的 Locator.uncheck()。閱讀更多關於 locators 的資訊。
此方法透過執行以下步驟來取消勾選符合 selector 的元素:
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。如果元素已取消勾選,此方法會立即傳回。
- 等待符合元素上的 actionability 檢查,除非設定了 setForce 選項。如果在檢查期間元素被分離,則會重試整個動作。
- 如果需要,將元素捲動到可視範圍內。
- 使用 Page.mouse() 在元素中心點擊。
- 確保元素現在已取消勾選。如果不是,此方法會拋出錯誤。
當所有步驟組合在一起未在指定的 setTimeout 期間完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
Page.uncheck(selector);
Page.uncheck(selector, options);
引數
-
用於搜尋元素的選取器。如果有多個元素符合選取器,將會使用第一個。
-
options
Page.UncheckOptions
(選填)-
是否略過 可操作性 檢查。預設為
false
。 -
已淘汰
此選項無效。
此選項無效。
-
setPosition
位置 (選用)新增於:v1.11#相對於元素內邊距框左上角使用的點。如果未指定,則使用元素的某個可見點。
-
setStrict
boolean (選用)在 v1.14 中新增#為 true 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行 可操作性 檢查,並略過動作。預設為
false
。用於等待元素準備好進行動作而無需執行它。
-
傳回
waitForNavigation
在 v1.9 之前新增此方法本質上具有競爭性,請改用 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
(選填)-
最大操作時間(毫秒),預設為 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'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
-
執行觸發事件動作的回呼。
傳回
waitForSelector
在 v1.9 之前新增請改用網頁斷言來斷言可見性或基於 locator 的 Locator.waitFor()。閱讀更多關於 locators 的資訊。
當 selector 指定的元素滿足 setState 選項時,此方法會傳回。如果等待 hidden
或 detached
,則傳回 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();
}
}
}
引數
-
要查詢的選取器。
-
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 時,呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最長時間。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 BrowserContext.setDefaultTimeout() 或 Page.setDefaultTimeout() 方法變更。
-
傳回
waitForTimeout
在 v1.9 之前新增在生產環境中永遠不要等待超時。等待時間的測試本質上是不穩定的。請使用 Locator 動作和自動等待的 Web 斷言。
等待指定的 timeout 毫秒數。
請注意,page.waitForTimeout()
應僅用於偵錯。在生產環境中使用計時器的測試將會是不穩定的。請改用網路事件、選擇器變成可見等訊號。
用法
// wait for 1 second
page.waitForTimeout(1000);
引數
傳回