Page
Page 提供了與 Browser 中的單個分頁互動,或 Chromium 中擴充功能背景頁面的方法。一個 Browser 實例可能有多個 Page 實例。
此範例建立一個頁面,導航到 URL,然後儲存螢幕截圖
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'screenshot.png' });
await browser.close();
})();
Page 類別發出各種事件(如下所述),可以使用任何 Node.js 原生 EventEmitter
方法(例如 on
、once
或 removeListener
)來處理這些事件。
此範例記錄單個頁面 load
事件的訊息
page.once('load', () => console.log('Page loaded!'));
若要取消訂閱事件,請使用 removeListener
方法
function logRequest(interceptedRequest) {
console.log('A request was made:', interceptedRequest.url());
}
page.on('request', logRequest);
// Sometime later...
page.removeListener('request', 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
await page.addInitScript({ path: './preload.js' });
await page.addInitScript(mock => {
window.mock = mock;
}, mock);
透過 browserContext.addInitScript() 和 page.addInitScript() 安裝的多個腳本的評估順序未定義。
引數
傳回
addLocatorHandler
新增於:v1.42在測試網頁時,有時會出現意外的覆蓋層,例如「註冊」對話方塊,並阻止您想要自動化的操作,例如點擊按鈕。這些覆蓋層不一定以相同的方式或在同一時間顯示,因此在自動化測試中很難處理。
此方法可讓您設定一個特殊的函數(稱為處理常式),當偵測到覆蓋層可見時,該函數會啟動。處理常式的工作是移除覆蓋層,讓您的測試繼續進行,就像覆蓋層不存在一樣。
注意事項
- 當覆蓋層可預測地顯示時,我們建議在您的測試中明確等待它,並將其作為正常測試流程的一部分解除,而不是使用 page.addLocatorHandler()。
- Playwright 在每次執行或重試需要 可操作性檢查 的操作之前,或在執行自動等待斷言檢查之前,都會檢查覆蓋層。當覆蓋層可見時,Playwright 會先呼叫處理常式,然後繼續執行操作/斷言。請注意,只有在您執行操作/斷言時才會呼叫處理常式 - 如果覆蓋層變得可見,但您未執行任何操作,則不會觸發處理常式。
- 執行處理常式後,Playwright 將確保觸發處理常式的覆蓋層不再可見。您可以使用 noWaitAfter 選擇退出此行為。
- 處理常式的執行時間計入執行處理常式的操作/斷言的逾時時間。如果您的處理常式花費太長時間,可能會導致逾時。
- 您可以註冊多個處理常式。但是,一次只會執行一個處理常式。請確保處理常式內的操作不依賴另一個處理常式。
執行處理常式將在測試過程中變更您的頁面狀態。例如,它會變更目前焦點元素並移動滑鼠。請確保在處理常式之後執行的操作是獨立的,並且不依賴焦點和滑鼠狀態保持不變。
例如,考慮一個測試,該測試呼叫 locator.focus(),然後呼叫 keyboard.press()。如果您的處理常式在這兩個操作之間點擊一個按鈕,則焦點元素很可能不正確,並且按鍵會發生在意外的元素上。請改用 locator.press() 以避免此問題。
另一個範例是一系列滑鼠操作,其中 mouse.move() 後面接著 mouse.down()。同樣,當處理常式在這兩個操作之間執行時,滑鼠位置在滑鼠按下期間會不正確。請偏好獨立的操作,例如 locator.click(),這些操作不依賴處理常式變更狀態。
用法
關閉「註冊電子報」對話方塊(當它出現時)的範例
// Setup the handler.
await page.addLocatorHandler(page.getByText('Sign up to the newsletter'), async () => {
await page.getByRole('button', { name: 'No thanks' }).click();
});
// Write the test as usual.
await page.goto('https://example.com');
await page.getByRole('button', { name: 'Start here' }).click();
跳過「確認您的安全詳細資訊」頁面(當它顯示時)的範例
// Setup the handler.
await page.addLocatorHandler(page.getByText('Confirm your security details'), async () => {
await page.getByRole('button', { name: 'Remind me later' }).click();
});
// Write the test as usual.
await page.goto('https://example.com');
await page.getByRole('button', { name: 'Start here' }).click();
具有每個可操作性檢查的自訂回呼的範例。它使用始終可見的 <body>
定位器,因此在每次可操作性檢查之前都會呼叫處理常式。指定 noWaitAfter 很重要,因為處理常式不會隱藏 <body>
元素。
// Setup the handler.
await page.addLocatorHandler(page.locator('body'), async () => {
await page.evaluate(() => window.removeObstructionsForTestIfNeeded());
}, { noWaitAfter: true });
// Write the test as usual.
await page.goto('https://example.com');
await page.getByRole('button', { name: 'Start here' }).click();
處理常式將原始定位器作為引數。您也可以透過設定 times 在多次調用後自動移除處理常式
await page.addLocatorHandler(page.getByLabel('Close'), async locator => {
await locator.click();
}, { times: 1 });
引數
-
觸發處理常式的定位器。
-
handler
function(Locator):Promise<Object>#一旦 locator 出現,就應該執行的函數。此函數應移除阻擋點擊等動作的元素。
-
options
Object (選用)
傳回
addScriptTag
在 v1.9 版本之前新增將 <script>
標籤新增到具有所需 URL 或內容的頁面中。當腳本的 onload 事件觸發或腳本內容注入到框架中時,傳回新增的標籤。
用法
await page.addScriptTag();
await page.addScriptTag(options);
引數
options
Object (選用)
傳回
addStyleTag
在 v1.9 版本之前新增將具有所需 URL 的 <link rel="stylesheet">
標籤或具有內容的 <style type="text/css">
標籤新增到頁面中。當樣式表的 onload 事件觸發或 CSS 內容注入到框架中時,傳回新增的標籤。
用法
await page.addStyleTag();
await page.addStyleTag(options);
引數
options
Object (選用)
傳回
bringToFront
在 v1.9 版本之前新增將頁面帶到最前面(啟動分頁)。
用法
await page.bringToFront();
傳回
close
在 v1.9 版本之前新增如果 runBeforeUnload 為 false
,則不執行任何卸載處理常式,並等待頁面關閉。如果 runBeforeUnload 為 true
,則此方法將執行卸載處理常式,但不會等待頁面關閉。
預設情況下,page.close()
不會執行 beforeunload
處理常式。
如果 runBeforeUnload 作為 true 傳遞,則可能會召喚 beforeunload
對話方塊,應透過 page.on('dialog') 事件手動處理。
用法
await page.close();
await page.close(options);
引數
options
Object (選用)-
要報告給頁面關閉中斷的操作的原因。
-
預設為
false
。是否執行 before unload 頁面處理常式。
-
傳回
content
在 v1.9 版本之前新增取得頁面的完整 HTML 內容,包括 doctype。
用法
await page.content();
傳回
context
在 v1.9 版本之前新增取得頁面所屬的瀏覽器內容。
用法
page.context();
傳回
dragAndDrop
新增於:v1.13此方法將來源元素拖曳到目標元素。它將首先移動到來源元素,執行 mousedown
,然後移動到目標元素並執行 mouseup
。
用法
await page.dragAndDrop('#source', '#target');
// or specify exact positions relative to the top-left corners of the elements:
await page.dragAndDrop('#source', '#target', {
sourcePosition: { x: 34, y: 7 },
targetPosition: { x: 10, y: 20 },
});
引數
-
用於搜尋要拖曳的元素的選取器。如果有滿足選取器的多個元素,將使用第一個元素。
-
用於搜尋要放置的元素的選取器。如果有滿足選取器的多個元素,將使用第一個元素。
-
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
已棄用
此選項無效。
此選項無效。
-
sourcePosition
Object (選用)新增於:v1.14#在來源元素上,相對於元素內邊距框的左上角,點擊此點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
targetPosition
Object (選用)新增於:v1.14#在目標元素上,相對於元素內邊距框的左上角,放置在此點。如果未指定,則使用元素的某些可見點。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。在不執行動作的情況下,等待元素準備好執行動作時很有用。
-
傳回
emulateMedia
在 v1.9 版本之前新增此方法透過 media
引數變更 CSS 媒體類型
,和/或使用 colorScheme
引數變更 'prefers-colors-scheme'
媒體功能。
用法
await page.evaluate(() => matchMedia('screen').matches);
// → true
await page.evaluate(() => matchMedia('print').matches);
// → false
await page.emulateMedia({ media: 'print' });
await page.evaluate(() => matchMedia('screen').matches);
// → false
await page.evaluate(() => matchMedia('print').matches);
// → true
await page.emulateMedia({});
await page.evaluate(() => matchMedia('screen').matches);
// → true
await page.evaluate(() => matchMedia('print').matches);
// → false
await page.emulateMedia({ colorScheme: 'dark' });
await page.evaluate(() => matchMedia('(prefers-color-scheme: dark)').matches);
// → true
await page.evaluate(() => matchMedia('(prefers-color-scheme: light)').matches);
// → false
引數
options
Object (選用)-
colorScheme
null | "light" | "dark" | "no-preference" (選用)新增於:v1.9#模擬 prefers-colors-scheme 媒體功能,支援的值為
'light'
和'dark'
。傳遞null
會停用色彩配置模擬。'no-preference'
已棄用。 -
forcedColors
null | "active" | "none" (選用)新增於:v1.15#模擬
'forced-colors'
媒體功能,支援的值為'active'
和'none'
。傳遞null
會停用強制色彩模擬。 -
media
null | "screen" | "print" (選用)新增於:v1.9#變更頁面的 CSS 媒體類型。唯一允許的值為
'screen'
、'print'
和null
。傳遞null
會停用 CSS 媒體模擬。 -
reducedMotion
null | "reduce" | "no-preference" (選用)新增於:v1.12#模擬
'prefers-reduced-motion'
媒體功能,支援的值為'reduce'
、'no-preference'
。傳遞null
會停用減少動態效果模擬。
-
傳回
evaluate
在 v1.9 版本之前新增傳回 pageFunction 調用的值。
如果傳遞給 page.evaluate() 的函數傳回 Promise,則 page.evaluate() 將等待 Promise 解析並傳回其值。
如果傳遞給 page.evaluate() 的函數傳回非 Serializable 值,則 page.evaluate() 解析為 undefined
。Playwright 也支援傳輸一些其他無法透過 JSON
序列化的值:-0
、NaN
、Infinity
、-Infinity
。
用法
將引數傳遞給 pageFunction
const result = await page.evaluate(([x, y]) => {
return Promise.resolve(x * y);
}, [7, 8]);
console.log(result); // prints "56"
也可以傳入字串來代替函數
console.log(await page.evaluate('1 + 2')); // prints "3"
const x = 10;
console.log(await page.evaluate(`1 + ${x}`)); // prints "11"
ElementHandle 實例可以作為引數傳遞給 page.evaluate()
const bodyHandle = await page.evaluate('document.body');
const html = await page.evaluate<string, HTMLElement>(([body, suffix]) =>
body.innerHTML + suffix, [bodyHandle, 'hello']
);
await bodyHandle.dispose();
引數
-
pageFunction
function | string#要在頁面上下文中評估的函數。
-
arg
EvaluationArgument (選用)#要傳遞給 pageFunction 的選用引數。
傳回
evaluateHandle
在 v1.9 版本之前新增將 pageFunction 調用的值作為 JSHandle 傳回。
page.evaluate() 和 page.evaluateHandle() 之間的唯一區別在於 page.evaluateHandle() 傳回 JSHandle。
如果傳遞給 page.evaluateHandle() 的函數傳回 Promise,則 page.evaluateHandle() 將等待 Promise 解析並傳回其值。
用法
// Handle for the window object.
const aWindowHandle = await page.evaluateHandle(() => Promise.resolve(window));
也可以傳入字串來代替函數
const aHandle = await page.evaluateHandle('document'); // Handle for the 'document'
JSHandle 實例可以作為引數傳遞給 page.evaluateHandle()
const aHandle = await page.evaluateHandle(() => document.body);
const resultHandle = await page.evaluateHandle(body => body.innerHTML, aHandle);
console.log(await resultHandle.jsonValue());
await resultHandle.dispose();
引數
-
pageFunction
function | string#要在頁面上下文中評估的函數。
-
arg
EvaluationArgument (選用)#要傳遞給 pageFunction 的選用引數。
傳回
exposeBinding
在 v1.9 版本之前新增此方法在頁面中每個框架的 window
物件上新增一個名為 name 的函數。呼叫時,該函數會執行 callback 並傳回一個 Promise,該 Promise 解析為 callback 的傳回值。如果 callback 傳回 Promise,則將會等待它。
callback 函數的第一個引數包含關於呼叫者的資訊:{ browserContext: BrowserContext, page: Page, frame: Frame }
。
請參閱 browserContext.exposeBinding() 以取得內容範圍版本。
透過 page.exposeBinding() 安裝的函數在導航後仍然存在。
用法
向頁面中所有框架公開頁面 URL 的範例
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
(async () => {
const browser = await webkit.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
await page.exposeBinding('pageURL', ({ page }) => page.url());
await page.setContent(`
<script>
async function onClick() {
document.querySelector('div').textContent = await window.pageURL();
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
`);
await page.click('button');
})();
引數
-
name
字串 (string)#window 物件上的函式名稱。
-
callback
函式 (function)#將在 Playwright 環境中呼叫的回呼函式。
-
options
Object (選用)-
handle
布林值 (boolean) (選填)#已棄用此選項將在未來移除。
是否將引數作為 handle 傳遞,而不是傳值。當傳遞 handle 時,僅支援一個引數。當傳值時,支援多個引數。
-
傳回
exposeFunction
在 v1.9 版本之前新增此方法在頁面中每個 frame 的 window
物件上新增一個名為 name 的函式。當被呼叫時,此函式會執行 callback 並回傳一個 Promise,此 Promise 會解析為 callback 的回傳值。
如果 callback 回傳一個 Promise,則會等待其完成。
請參閱 browserContext.exposeFunction() 以了解 context-wide 暴露函式。
透過 page.exposeFunction() 安裝的函式在導航後仍然存在。
用法
一個將 sha256
函式新增至頁面的範例
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
const crypto = require('crypto');
(async () => {
const browser = await webkit.launch({ headless: false });
const page = await browser.newPage();
await page.exposeFunction('sha256', text =>
crypto.createHash('sha256').update(text).digest('hex'),
);
await page.setContent(`
<script>
async function onClick() {
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
`);
await page.click('button');
})();
引數
-
name
字串 (string)#window 物件上的函式名稱
-
callback
函式 (function)#將在 Playwright 環境中呼叫的回呼函式。
傳回
frame
在 v1.9 版本之前新增回傳符合指定條件的 frame。必須指定 name
或 url
其中一個。
用法
const frame = page.frame('frame-name');
const frame = page.frame({ url: /.*domain.*/ });
引數
frameSelector
字串 (string) | 物件 (Object)#-
name
字串 (string) (選填)在
iframe
的name
屬性中指定的 frame 名稱。選填。 -
url
字串 (string) | 正規表示式 (RegExp) | 函式 (function)(URL):布林值 (boolean) (選填)一個 glob 模式、正規表示式模式或謂詞,接收 frame 的
url
作為 URL 物件。選填。
-
傳回
frameLocator
新增於:v1.17當使用 iframe 時,您可以建立一個 frame locator,它將進入 iframe 並允許在該 iframe 中選取元素。
用法
以下程式碼片段在 id 為 my-frame
的 iframe 中,找到文字為 "Submit" 的元素,例如 <iframe id="my-frame">
const locator = page.frameLocator('#my-iframe').getByText('Submit');
await locator.click();
引數
-
selector
字串 (string)#用於解析 DOM 元素的 selector。
傳回
frames
在 v1.9 版本之前新增附加到頁面的所有 frame 的陣列。
用法
page.frames();
傳回
getByAltText
新增於:v1.27允許透過元素的 alt 文字定位元素。
用法
例如,此方法將透過 alt 文字 "Playwright logo" 找到圖片
<img alt='Playwright logo'>
await page.getByAltText('Playwright logo').click();
引數
-
text
字串 (string) | 正規表示式 (RegExp)#用於定位元素的文字。
-
options
Object (選用)-
exact
布林值 (boolean) (選填)#是否尋找完全符合:區分大小寫且全字串比對。預設為 false。當透過正規表示式定位時忽略。請注意,完全符合仍然會修剪空白字元。
-
傳回
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">
await page.getByLabel('Username').fill('john');
await page.getByLabel('Password').fill('secret');
引數
-
text
字串 (string) | 正規表示式 (RegExp)#用於定位元素的文字。
-
options
Object (選用)-
exact
布林值 (boolean) (選填)#是否尋找完全符合:區分大小寫且全字串比對。預設為 false。當透過正規表示式定位時忽略。請注意,完全符合仍然會修剪空白字元。
-
傳回
getByPlaceholder
新增於:v1.27允許透過 placeholder 文字定位輸入元素。
用法
例如,考慮以下 DOM 結構。
<input type="email" placeholder="name@example.com" />
您可以在透過 placeholder 文字定位輸入框後,填寫內容
await page
.getByPlaceholder('name@example.com')
.fill('playwright@microsoft.com');
引數
-
text
字串 (string) | 正規表示式 (RegExp)#用於定位元素的文字。
-
options
Object (選用)-
exact
布林值 (boolean) (選填)#是否尋找完全符合:區分大小寫且全字串比對。預設為 false。當透過正規表示式定位時忽略。請注意,完全符合仍然會修剪空白字元。
-
傳回
getByRole
新增於:v1.27允許透過元素的 ARIA role、ARIA 屬性和 accessible name 定位元素。
用法
考慮以下 DOM 結構。
<h3>Sign up</h3>
<label>
<input type="checkbox" /> Subscribe
</label>
<br/>
<button>Submit</button>
您可以透過每個元素的隱含 role 定位它們
await expect(page.getByRole('heading', { name: 'Sign up' })).toBeVisible();
await page.getByRole('checkbox', { name: 'Subscribe' }).check();
await page.getByRole('button', { name: /submit/i }).click();
引數
-
role
"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 role。
-
options
Object (選用)-
checked
布林值 (boolean) (選填)#一個通常由
aria-checked
或原生<input type=checkbox>
控制項設定的屬性。深入了解
aria-checked
。 -
disabled
布林值 (boolean) (選填)#一個通常由
aria-disabled
或disabled
設定的屬性。注意與大多數其他屬性不同,
disabled
是透過 DOM 階層繼承的。深入了解aria-disabled
。 -
exact
布林值 (boolean) (選填)新增於:v1.28#是否完全符合 name:區分大小寫且全字串比對。預設為 false。當 name 是正規表示式時忽略。請注意,完全符合仍然會修剪空白字元。
-
expanded
布林值 (boolean) (選填)#一個通常由
aria-expanded
設定的屬性。深入了解
aria-expanded
。 -
includeHidden
布林值 (boolean) (選填)#控制是否比對隱藏元素的選項。預設情況下,role selector 僅比對非隱藏元素,如 ARIA 所定義。
深入了解
aria-hidden
。 -
level
數字 (number) (選填)#一個數字屬性,通常用於 role
heading
、listitem
、row
、treeitem
,<h1>-<h6>
元素具有預設值。深入了解
aria-level
。 -
name
字串 (string) | 正規表示式 (RegExp) (選填)#比對 accessible name 的選項。預設情況下,比對不區分大小寫並搜尋子字串,使用 exact 來控制此行為。
深入了解 accessible name。
-
pressed
布林值 (boolean) (選填)#一個通常由
aria-pressed
設定的屬性。深入了解
aria-pressed
。 -
selected
布林值 (boolean) (選填)#一個通常由
aria-selected
設定的屬性。深入了解
aria-selected
。
-
傳回
詳細資訊
Role selector 並不能取代 accessibility 稽核和一致性測試,而是提供關於 ARIA 指南的早期回饋。
許多 html 元素具有 role selector 識別的隱含定義 role。您可以在此處找到所有支援的 role。ARIA 指南不建議透過將 role
和/或 aria-*
屬性設定為預設值來複製隱含 role 和屬性。
getByTestId
新增於:v1.27透過 test id 定位元素。
用法
考慮以下 DOM 結構。
<button data-testid="directions">Itinéraire</button>
您可以透過元素的 test id 定位它
await page.getByTestId('directions').click();
引數
-
testId
字串 (string) | 正規表示式 (RegExp)#用於定位元素的 Id。
傳回
詳細資訊
預設情況下,data-testid
屬性用作 test id。如有必要,請使用 selectors.setTestIdAttribute() 來設定不同的 test id 屬性。
// Set custom test id attribute from @playwright/test config:
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
testIdAttribute: 'data-pw'
},
});
getByText
新增於:v1.27允許定位包含給定文字的元素。
另請參閱 locator.filter(),它允許透過其他條件(例如 accessible role)進行比對,然後透過文字內容進行篩選。
用法
考慮以下 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', { exact: true });
// Matches both <div>s
page.getByText(/Hello/);
// Matches second <div>
page.getByText(/^hello$/i);
引數
-
text
字串 (string) | 正規表示式 (RegExp)#用於定位元素的文字。
-
options
Object (選用)-
exact
布林值 (boolean) (選填)#是否尋找完全符合:區分大小寫且全字串比對。預設為 false。當透過正規表示式定位時忽略。請注意,完全符合仍然會修剪空白字元。
-
傳回
詳細資訊
即使是完全符合,透過文字比對也總是會正規化空白字元。例如,它將多個空格變成一個,將換行符號變成空格,並忽略開頭和結尾的空白字元。
類型為 button
和 submit
的輸入元素會透過它們的 value
而不是文字內容進行比對。例如,透過文字 "Log in"
定位會比對 <input type=button value="Log in">
。
getByTitle
新增於:v1.27允許透過元素的 title 屬性定位元素。
用法
考慮以下 DOM 結構。
<span title='Issues count'>25 issues</span>
您可以在透過 title 文字定位後,檢查 issues 數量
await expect(page.getByTitle('Issues count')).toHaveText('25 issues');
引數
-
text
字串 (string) | 正規表示式 (RegExp)#用於定位元素的文字。
-
options
Object (選用)-
exact
布林值 (boolean) (選填)#是否尋找完全符合:區分大小寫且全字串比對。預設為 false。當透過正規表示式定位時忽略。請注意,完全符合仍然會修剪空白字元。
-
傳回
goBack
在 v1.9 版本之前新增回傳主要資源回應。在多個重定向的情況下,導航將解析為最後一個重定向的回應。如果無法返回,則回傳 null
。
導航到歷史記錄中的上一頁。
用法
await page.goBack();
await page.goBack(options);
引數
options
Object (選用)-
timeout
數字 (number) (選填)#最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。 -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (選填)#何時視為操作成功,預設為
load
。事件可以是:'domcontentloaded'
- 當DOMContentLoaded
事件被觸發時,視為操作完成。'load'
- 當load
事件被觸發時,視為操作完成。'networkidle'
- 不建議使用 當至少500
毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,請改為依賴 web assertions 來評估就緒狀態。'commit'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
傳回
goForward
在 v1.9 版本之前新增回傳主要資源回應。在多個重定向的情況下,導航將解析為最後一個重定向的回應。如果無法前進,則回傳 null
。
導航到歷史記錄中的下一頁。
用法
await page.goForward();
await page.goForward(options);
引數
options
Object (選用)-
timeout
數字 (number) (選填)#最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。 -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (選填)#何時視為操作成功,預設為
load
。事件可以是:'domcontentloaded'
- 當DOMContentLoaded
事件被觸發時,視為操作完成。'load'
- 當load
事件被觸發時,視為操作完成。'networkidle'
- 不建議使用 當至少500
毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,請改為依賴 web assertions 來評估就緒狀態。'commit'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
傳回
goto
在 v1.9 版本之前新增回傳主要資源回應。在多個重定向的情況下,導航將解析為第一個非重定向的回應。
如果發生以下情況,此方法將拋出錯誤:
- 發生 SSL 錯誤 (例如,在自簽憑證的情況下)。
- 目標 URL 無效。
- 在導航期間超過 timeout 時間。
- 遠端伺服器沒有回應或無法連線。
- 主要資源載入失敗。
當遠端伺服器回傳任何有效的 HTTP 狀態碼時,此方法不會拋出錯誤,包括 404 "Not Found" 和 500 "Internal Server Error"。此類回應的狀態碼可以透過呼叫 response.status() 取得。
此方法要么拋出錯誤,要么回傳主要資源回應。唯一的例外是導航到 about:blank
或導航到具有不同雜湊的相同 URL,這將成功並回傳 null
。
無頭模式不支援導航到 PDF 文件。請參閱 upstream issue。
用法
await page.goto(url);
await page.goto(url, options);
引數
-
url
字串 (string)#要導航頁面到的 URL。url 應包含 scheme,例如
https://
。當透過 context 選項提供了 baseURL,且傳遞的 URL 是路徑時,它會透過new URL()
建構函式合併。 -
options
Object (選用)-
referer
字串 (string) (選填)#Referer 標頭值。如果提供,它將優先於 page.setExtraHTTPHeaders() 設定的 referer 標頭值。
-
timeout
數字 (number) (選填)#最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。 -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (選填)#何時視為操作成功,預設為
load
。事件可以是:'domcontentloaded'
- 當DOMContentLoaded
事件被觸發時,視為操作完成。'load'
- 當load
事件被觸發時,視為操作完成。'networkidle'
- 不建議使用 當至少500
毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,請改為依賴 web assertions 來評估就緒狀態。'commit'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
傳回
isClosed
在 v1.9 版本之前新增指示頁面已關閉。
用法
page.isClosed();
傳回
locator
新增於:v1.14此方法回傳一個元素 locator,可用於在此頁面/frame 上執行動作。Locator 會在執行動作之前立即解析為元素,因此在同一個 locator 上執行的一系列動作實際上可以在不同的 DOM 元素上執行。如果這些動作之間的 DOM 結構發生變化,就會發生這種情況。
用法
page.locator(selector);
page.locator(selector, options);
引數
-
selector
字串 (string)#用於解析 DOM 元素的 selector。
-
options
Object (選用)-
將此方法的结果缩小到那些包含与此相对定位器匹配的元素的元素。例如,具有
text=Playwright
的article
匹配<article><div>Playwright</div></article>
。內部 locator 必須相對於外部 locator,並且查詢從外部 locator 比對開始,而不是從文件根目錄開始。例如,您可以在
<article><content><div>Playwright</div></content></article>
中找到具有div
的content
。但是,尋找具有article div
的content
將會失敗,因為內部 locator 必須是相對的,並且不應使用content
之外的任何元素。請注意,外部和內部 locator 必須屬於同一個 frame。內部 locator 不得包含 FrameLocator。
-
比對不包含與內部 locator 比對的元素的元素。內部 locator 是針對外部 locator 查詢的。例如,不具有
div
的article
匹配<article><span>Playwright</span></article>
。請注意,外部和內部 locator 必須屬於同一個 frame。內部 locator 不得包含 FrameLocator。
-
hasNotText
字串 (string) | 正規表示式 (RegExp) (選填)新增於:v1.33#比對不包含指定文字在內部的某處的元素,可能在子元素或後代元素中。當傳遞字串時,比對不區分大小寫並搜尋子字串。
-
hasText
字串 (string) | 正規表示式 (RegExp) (選填)#比對包含指定文字在內部的某處的元素,可能在子元素或後代元素中。當傳遞字串時,比對不區分大小寫並搜尋子字串。例如,
"Playwright"
匹配<article><div>Playwright</div></article>
。
-
傳回
mainFrame
在 v1.9 版本之前新增頁面的主要框架。保證 Page 會有一個在導航期間持續存在的主要框架。
用法
page.mainFrame();
傳回
opener
在 v1.9 版本之前新增為彈出式頁面返回 opener,為其他頁面返回 null
。如果 opener 已經關閉,則返回 null
。
用法
await page.opener();
傳回
pause
新增於:v1.9暫停腳本執行。Playwright 將停止執行腳本,並等待使用者按下頁面覆蓋中的「繼續」按鈕,或在 DevTools 控制台中呼叫 playwright.resume()
。
使用者可以在暫停時檢查選擇器或執行手動步驟。「繼續」將從暫停的位置繼續執行原始腳本。
此方法需要 Playwright 在有 head 模式下啟動,且 headless 選項為 falsy。
用法
await page.pause();
傳回
pdf
在 v1.9 版本之前新增返回 PDF buffer。
page.pdf()
使用 print
css media 生成頁面的 pdf。若要使用 screen
media 生成 pdf,請在呼叫 page.pdf()
之前呼叫 page.emulateMedia()。
預設情況下,page.pdf()
生成的 pdf 會修改列印顏色。使用 -webkit-print-color-adjust
屬性強制渲染精確的顏色。
用法
// Generates a PDF with 'screen' media type.
await page.emulateMedia({ media: 'screen' });
await page.pdf({ path: 'page.pdf' });
width、height 和 margin 選項接受帶有單位的數值。未標記的數值將被視為像素。
一些範例
page.pdf({width: 100})
- 以寬度設定為 100 像素列印page.pdf({width: '100px'})
- 以寬度設定為 100 像素列印page.pdf({width: '10cm'})
- 以寬度設定為 10 公分列印。
所有可能的單位為
px
- 像素in
- 英吋cm
- 公分mm
- 毫米
format 選項為
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 英吋
headerTemplate 和 footerTemplate 標記有以下限制: > 1. 範本內的 Script 標籤不會被評估。 > 2. 頁面樣式在範本內不可見。
引數
options
Object (選用)-
displayHeaderFooter
boolean (可選)#顯示頁首和頁尾。預設為
false
。 -
用於列印頁尾的 HTML 範本。應使用與 headerTemplate 相同的格式。
-
用於列印頁首的 HTML 範本。應為有效的 HTML 標記,並使用以下類別將列印值注入其中
'date'
格式化的列印日期'title'
文件標題'url'
文件位置'pageNumber'
當前頁碼'totalPages'
文件中的總頁數
-
紙張高度,接受帶有單位的數值。
-
紙張方向。預設為
false
。 -
-
上邊距,接受帶有單位的數值。預設為
0
。 -
右邊距,接受帶有單位的數值。預設為
0
。 -
下邊距,接受帶有單位的數值。預設為
0
。 -
左邊距,接受帶有單位的數值。預設為
0
。
紙張邊距,預設為無。
-
-
outline
boolean (可選)新增於:v1.42#是否將文件外框嵌入到 PDF 中。預設為
false
。 -
要列印的紙張範圍,例如 '1-5, 8, 11-13'。預設為空字串,表示列印所有頁面。
-
要將 PDF 儲存到的檔案路徑。如果 path 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,則 PDF 將不會儲存到磁碟。
-
preferCSSPageSize
boolean (可選)#優先使用頁面中宣告的任何 CSS
@page
大小,而非 width 和 height 或 format 選項中宣告的大小。預設為false
,這將縮放內容以適合紙張大小。 -
列印背景圖形。預設為
false
。 -
網頁渲染的比例。預設為
1
。比例量必須介於 0.1 和 2 之間。 -
是否生成標記 (可訪問) PDF。預設為
false
。 -
紙張寬度,接受帶有單位的數值。
-
傳回
reload
在 v1.9 版本之前新增此方法重新載入目前頁面,方式與使用者觸發瀏覽器重新整理相同。返回主要資源回應。在多次重新導向的情況下,導航將以最後一次重新導向的回應解析。
用法
await page.reload();
await page.reload(options);
引數
options
Object (選用)-
最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。 -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (可選)#何時視為操作成功,預設為
load
。事件可以是:'domcontentloaded'
- 當DOMContentLoaded
事件被觸發時,視為操作完成。'load'
- 當load
事件被觸發時,視為操作完成。'networkidle'
- 不建議使用 當至少500
毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,請改為依賴 web assertions 來評估就緒狀態。'commit'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
傳回
removeAllListeners
新增於:v1.47移除給定類型的所有監聽器 (如果未給定類型,則移除所有已註冊的監聽器)。允許等待異步監聽器完成,或忽略這些監聽器後續的錯誤。
用法
page.on('request', async request => {
const response = await request.response();
const body = await response.body();
console.log(body.byteLength);
});
await page.goto('https://playwright.dev.org.tw', { waitUntil: 'domcontentloaded' });
// Waits for all the reported 'request' events to resolve.
await page.removeAllListeners('request', { behavior: 'wait' });
引數
type
string (可選)#options
Object (選用)-
behavior
"wait" | "ignoreErrors" | "default" (可選)#指定是否等待已在執行的監聽器,以及如果它們拋出錯誤時該怎麼做
'default'
- 不等待當前監聽器呼叫 (如果有的話) 完成,如果監聽器拋出錯誤,可能會導致未處理的錯誤'wait'
- 等待當前監聽器呼叫 (如果有的話) 完成'ignoreErrors'
- 不等待當前監聽器呼叫 (如果有的話) 完成,移除後監聽器拋出的所有錯誤都會被靜默捕獲
-
傳回
removeLocatorHandler
新增於:v1.44移除由 page.addLocatorHandler() 為特定 locator 新增的所有 locator 處理程序。
用法
await page.removeLocatorHandler(locator);
引數
-
傳遞給 page.addLocatorHandler() 的 Locator。
傳回
requestGC
新增於:v1.48請求頁面執行垃圾回收。請注意,不保證會回收所有無法訪問的物件。
這對於幫助檢測記憶體洩漏很有用。例如,如果您的頁面有一個可能洩漏的大物件 'suspect'
,您可以使用 WeakRef
來檢查它是否沒有洩漏。
// 1. In your page, save a WeakRef for the "suspect".
await page.evaluate(() => globalThis.suspectWeakRef = new WeakRef(suspect));
// 2. Request garbage collection.
await page.requestGC();
// 3. Check that weak ref does not deref to the original object.
expect(await page.evaluate(() => !globalThis.suspectWeakRef.deref())).toBe(true);
用法
await page.requestGC();
傳回
route
在 v1.9 版本之前新增路由提供了修改頁面發出的網路請求的功能。
一旦啟用路由,每個符合 url 模式的請求都會暫停,除非它被繼續、滿足或中止。
如果回應是重新導向,則只會為第一個 url 呼叫處理程序。
page.route() 不會攔截 Service Worker 攔截的請求。請參閱 此 問題。我們建議在使用請求攔截時停用 Service Worker,方法是將 serviceWorkers 設定為 'block'
。
page.route() 不會攔截彈出式頁面的第一個請求。請改用 browserContext.route()。
用法
一個中止所有圖片請求的簡單處理程序範例
const page = await browser.newPage();
await page.route('**/*.{png,jpg,jpeg}', route => route.abort());
await page.goto('https://example.com');
await browser.close();
或使用 regex 模式的相同程式碼片段
const page = await browser.newPage();
await page.route(/(\.png$)|(\.jpg$)/, route => route.abort());
await page.goto('https://example.com');
await browser.close();
可以檢查請求以決定路由動作。例如,模擬所有包含某些 post 數據的請求,並保持所有其他請求不變
await page.route('/api/**', async route => {
if (route.request().postData().includes('my-string'))
await route.fulfill({ body: 'mocked-data' });
else
await route.continue();
});
當請求同時符合頁面路由和瀏覽器內容路由 (使用 browserContext.route() 設定) 的處理程序時,頁面路由優先於瀏覽器內容路由。
若要移除具有其處理程序的路由,您可以使用 page.unroute()。
啟用路由會停用 http 快取。
引數
-
url
string | RegExp | function(URL):boolean#glob 模式、regex 模式或謂詞,接收 URL 以在路由時進行匹配。當透過內容選項提供了 baseURL,且傳遞的 URL 是路徑時,它會透過
new URL()
建構函式合併。 -
handler
function(Route, Request):Promise<Object> | Object#用於路由請求的處理程序函式。
-
options
Object (選用)
傳回
routeFromHAR
新增於:v1.23如果指定,則頁面中發出的網路請求將從 HAR 檔案提供。閱讀更多關於 從 HAR 重新播放。
Playwright 不會從 HAR 檔案提供 Service Worker 攔截的請求。請參閱 此 問題。我們建議在使用請求攔截時停用 Service Worker,方法是將 serviceWorkers 設定為 'block'
。
用法
await page.routeFromHAR(har);
await page.routeFromHAR(har, options);
引數
-
具有預先錄製網路數據的 HAR 檔案路徑。如果
path
是相對路徑,則會相對於目前的工作目錄解析。 -
options
Object (選用)-
notFound
"abort" | "fallback" (可選)#- 如果設定為 'abort',則 HAR 檔案中找不到的任何請求都將被中止。
- 如果設定為 'fallback',則遺失的請求將被發送到網路。
預設為中止。
-
如果指定,則使用實際的網路資訊更新給定的 HAR,而不是從檔案提供。當呼叫 browserContext.close() 時,該檔案會寫入磁碟。
-
updateContent
"embed" | "attach" (可選)新增於:v1.32#用於控制資源內容管理的選用設定。如果指定
attach
,則資源會以個別檔案或 ZIP 封存檔中的條目形式持久保存。如果指定embed
,則內容會內嵌儲存在 HAR 檔案中。 -
updateMode
"full" | "minimal" (可選)新增於:v1.32#當設定為
minimal
時,僅記錄從 HAR 路由所需的資訊。這省略了大小、時間、頁面、cookie、安全性以及其他在從 HAR 重新播放時未使用的 HAR 資訊。預設為minimal
。 -
用於匹配請求 URL 的 glob 模式、正則表達式或謂詞。只有 URL 符合模式的請求才會從 HAR 檔案提供。如果未指定,則所有請求都從 HAR 檔案提供。
-
傳回
routeWebSocket
新增於:v1.48此方法允許修改頁面建立的 websocket 連線。
請注意,只有在此方法被呼叫後建立的 WebSocket
s 才会被路由。建議在導航頁面之前呼叫此方法。
用法
以下是一個簡單 mock 的範例,它回應單一訊息。請參閱 WebSocketRoute 以取得更多詳細資訊和範例。
await page.routeWebSocket('/ws', ws => {
ws.onMessage(message => {
if (message === 'request')
ws.send('response');
});
});
引數
-
url
string | RegExp | function(URL):boolean#只有 url 符合此模式的 WebSocket 才会被路由。字串模式可以相對於 baseURL 內容選項。
-
handler
function(WebSocketRoute):Promise<Object> | Object#用於路由 WebSocket 的處理程序函式。
傳回
screenshot
在 v1.9 版本之前新增返回包含已捕獲螢幕截圖的 buffer。
用法
await page.screenshot();
await page.screenshot(options);
引數
options
Object (選用)-
animations
"disabled" | "allow" (可選)#當設定為
"disabled"
時,停止 CSS 動畫、CSS 過渡和 Web Animations。動畫會根據其持續時間獲得不同的處理- 有限動畫會快速轉發到完成,因此它們會觸發
transitionend
事件。 - 無限動畫會取消到初始狀態,然後在螢幕截圖後重新播放。
預設為
"allow"
,保持動畫不受影響。 - 有限動畫會快速轉發到完成,因此它們會觸發
-
caret
"hide" | "initial" (可選)#當設定為
"hide"
時,螢幕截圖將隱藏文字游標。當設定為"initial"
時,文字游標行為將不會更改。預設為"hide"
。 -
指定結果影像剪裁的物件。
-
如果為 true,則拍攝整個可滾動頁面的螢幕截圖,而不是目前可見的 viewport。預設為
false
。 -
指定在拍攝螢幕截圖時應遮罩的 locator。遮罩的元素將以粉紅色框
#FF00FF
(由 maskColor 自訂) 覆蓋,該框完全覆蓋其邊界框。 -
maskColor
string (可選)新增於:v1.35#指定遮罩元素之覆蓋框的顏色,以 CSS 顏色格式表示。預設顏色為粉紅色
#FF00FF
。 -
隱藏預設白色背景,並允許捕獲具有透明度的螢幕截圖。不適用於
jpeg
影像。預設為false
。 -
要將影像儲存到的檔案路徑。螢幕截圖類型將從檔案擴展名推斷。如果 path 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,則影像將不會儲存到磁碟。
-
影像品質,介於 0-100 之間。不適用於
png
影像。 -
scale
"css" | "device" (可選)#當設定為
"css"
時,螢幕截圖將為頁面上每個 css 像素提供單個像素。對於高 dpi 裝置,這將使螢幕截圖保持較小。使用"device"
選項將為每個裝置像素產生單個像素,因此高 dpi 裝置的螢幕截圖將會大兩倍甚至更大。預設為
"device"
。 -
製作螢幕截圖時要套用的樣式表文字。您可以在此處隱藏動態元素、使元素不可見或變更其屬性,以協助您建立可重複的螢幕截圖。此樣式表會穿透 Shadow DOM 並套用於內部框架。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
type
"png" | "jpeg" (可選)#指定螢幕截圖類型,預設為
png
。
-
傳回
setContent
在 v1.9 版本之前新增此方法在內部呼叫 document.write(),繼承其所有特定特性和行為。
用法
await page.setContent(html);
await page.setContent(html, options);
引數
-
要指派給頁面的 HTML 標記。
-
options
Object (選用)-
最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。 -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (可選)#何時視為操作成功,預設為
load
。事件可以是:'domcontentloaded'
- 當DOMContentLoaded
事件被觸發時,視為操作完成。'load'
- 當load
事件被觸發時,視為操作完成。'networkidle'
- 不建議使用 當至少500
毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,請改為依賴 web assertions 來評估就緒狀態。'commit'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
傳回
setDefaultNavigationTimeout
在 v1.9 版本之前新增此設定將變更以下方法和相關捷徑的預設最大導航時間
- page.goBack()
- page.goForward()
- page.goto()
- page.reload()
- page.setContent()
- page.waitForNavigation()
- page.waitForURL()
用法
page.setDefaultNavigationTimeout(timeout);
引數
setDefaultTimeout
在 v1.9 版本之前新增此設定將變更所有接受 timeout 選項的方法的預設逾時時間上限。
用法
page.setDefaultTimeout(timeout);
引數
setExtraHTTPHeaders
在 v1.9 版本之前新增額外的 HTTP 標頭將會隨著頁面發起的每個請求一起傳送。
page.setExtraHTTPHeaders() 不保證傳出請求中標頭的順序。
用法
await page.setExtraHTTPHeaders(headers);
引數
傳回
setViewportSize
在 v1.9 版本之前新增在單一瀏覽器中有多個頁面的情況下,每個頁面都可以有自己的 viewport 大小。然而,browser.newContext() 允許一次為 context 中的所有頁面設定 viewport 大小(以及更多設定)。
page.setViewportSize() 將調整頁面大小。許多網站不預期手機會變更大小,因此您應該在導航到頁面之前設定 viewport 大小。page.setViewportSize() 也會重設 screen
大小,如果您需要更好地控制這些屬性,請將 browser.newContext() 與 screen
和 viewport
參數一起使用。
用法
const page = await browser.newPage();
await page.setViewportSize({
width: 640,
height: 480,
});
await page.goto('https://example.com');
引數
傳回
title
在 v1.9 版本之前新增傳回頁面的標題。
用法
await page.title();
傳回
unroute
在 v1.9 版本之前新增移除使用 page.route() 建立的路由。當未指定 handler 時,會移除 url 的所有路由。
用法
await page.unroute(url);
await page.unroute(url, handler);
引數
-
url
string | RegExp | function(URL):boolean#在路由時要比對的 glob 模式、regex 模式或接收 URL 的謂詞。
-
handler
function(Route, Request):Promise<Object> | Object (optional)#用於路由請求的可選處理函式。
傳回
unrouteAll
新增於:v1.41移除所有使用 page.route() 和 page.routeFromHAR() 建立的路由。
用法
await page.unrouteAll();
await page.unrouteAll(options);
引數
options
Object (選用)-
behavior
"wait" | "ignoreErrors" | "default" (optional)#指定是否等待已在執行的處理常式,以及如果它們拋出錯誤時該怎麼做
'default'
- 不等待目前的處理常式呼叫(如果有的話)完成,如果未路由的處理常式拋出錯誤,可能會導致未處理的錯誤'wait'
- 等待目前的處理常式呼叫(如果有的話)完成'ignoreErrors'
- 不等待目前的處理常式呼叫(如果有的話)完成,所有在取消路由後由處理常式拋出的錯誤都會被靜默捕獲
-
傳回
url
在 v1.9 版本之前新增用法
page.url();
傳回
video
在 v1.9 版本之前新增與此頁面相關聯的 Video 物件。
用法
page.video();
傳回
viewportSize
在 v1.9 版本之前新增用法
page.viewportSize();
傳回
waitForEvent
在 v1.9 版本之前新增等待事件觸發,並將其值傳遞到 predicate 函式中。當 predicate 傳回 truthy 值時傳回。如果在事件觸發之前頁面關閉,將拋出錯誤。傳回事件資料值。
用法
// Start waiting for download before clicking. Note no await.
const downloadPromise = page.waitForEvent('download');
await page.getByText('Download file').click();
const download = await downloadPromise;
引數
-
事件名稱,與通常傳遞到
*.on(event)
中的名稱相同。 -
optionsOrPredicate
function | Object (optional)#-
predicate
function接收事件資料,並在等待應解析時解析為 truthy 值。
-
timeout
number (optional)等待的最大時間,單位為毫秒。預設為
0
- 無逾時。預設值可以透過 config 中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
接收事件的 predicate 或選項物件。可選。
-
-
options
Object (選用)
傳回
waitForFunction
在 v1.9 版本之前新增當 pageFunction 傳回 truthy 值時傳回。它會解析為 truthy 值的 JSHandle。
用法
page.waitForFunction() 可用於觀察 viewport 大小變更
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
const watchDog = page.waitForFunction(() => window.innerWidth < 100);
await page.setViewportSize({ width: 50, height: 50 });
await watchDog;
await browser.close();
})();
將引數傳遞給 page.waitForFunction() 函式的 predicate
const selector = '.foo';
await page.waitForFunction(selector => !!document.querySelector(selector), selector);
引數
-
pageFunction
function | string#要在頁面上下文中評估的函數。
-
arg
EvaluationArgument (optional)#要傳遞給 pageFunction 的可選引數。
-
options
Object (選用)-
polling
number | "raf" (optional)#如果 polling 為
'raf'
,則 pageFunction 會在requestAnimationFrame
回呼中持續執行。如果 polling 是數字,則會將其視為函式執行的間隔,單位為毫秒。預設為raf
。 -
等待的最大時間,單位為毫秒。預設為
0
- 無逾時。預設值可以透過 config 中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
waitForLoadState
在 v1.9 版本之前新增當達到所需的載入狀態時傳回。
當頁面達到所需的載入狀態時,預設為 load
時,此方法會解析。導航必須在此方法被呼叫時已提交。如果目前的文檔已達到所需的狀態,則會立即解析。
大多數情況下,不需要此方法,因為 Playwright 在 每次操作前都會自動等待。
用法
await page.getByRole('button').click(); // Click triggers navigation.
await page.waitForLoadState(); // The promise resolves after 'load' event.
const popupPromise = page.waitForEvent('popup');
await page.getByRole('button').click(); // Click triggers a popup.
const popup = await popupPromise;
await popup.waitForLoadState('domcontentloaded'); // Wait for the 'DOMContentLoaded' event.
console.log(await popup.title()); // Popup is ready to use.
引數
-
state
"load" | "domcontentloaded" | "networkidle" (optional)#要等待的可選載入狀態,預設為
load
。如果在載入目前文檔時已達到該狀態,則此方法會立即解析。可以是以下其中之一'load'
- 等待load
事件觸發。'domcontentloaded'
- 等待DOMContentLoaded
事件觸發。'networkidle'
- **不建議** 等待直到至少500
毫秒沒有網路連線。請勿將此方法用於測試,而是依靠網頁斷言來評估就緒狀態。
-
options
Object (選用)-
最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。
-
傳回
waitForRequest
在 v1.9 版本之前新增等待符合的請求並傳回它。有關事件的更多詳細資訊,請參閱 等待事件。
用法
// Start waiting for request before clicking. Note no await.
const requestPromise = page.waitForRequest('https://example.com/resource');
await page.getByText('trigger request').click();
const request = await requestPromise;
// Alternative way with a predicate. Note no await.
const requestPromise = page.waitForRequest(request =>
request.url() === 'https://example.com' && request.method() === 'GET',
);
await page.getByText('trigger request').click();
const request = await requestPromise;
引數
-
urlOrPredicate
string | RegExp | function(Request):boolean | Promise<boolean>#請求 URL 字串、regex 或接收 Request 物件的 predicate。
-
options
Object (選用)-
最長等待時間,單位為毫秒,預設為 30 秒,傳遞
0
以停用逾時。預設值可以使用 page.setDefaultTimeout() 方法變更。
-
傳回
waitForResponse
在 v1.9 版本之前新增傳回符合的回應。有關事件的更多詳細資訊,請參閱 等待事件。
用法
// Start waiting for response before clicking. Note no await.
const responsePromise = page.waitForResponse('https://example.com/resource');
await page.getByText('trigger response').click();
const response = await responsePromise;
// Alternative way with a predicate. Note no await.
const responsePromise = page.waitForResponse(response =>
response.url() === 'https://example.com' && response.status() === 200
&& response.request().method() === 'GET'
);
await page.getByText('trigger response').click();
const response = await responsePromise;
引數
-
urlOrPredicate
string | RegExp | function(Response):boolean | Promise<boolean>#請求 URL 字串、regex 或接收 Response 物件的 predicate。當透過 context 選項提供 baseURL 且傳遞的 URL 是路徑時,它會透過
new URL()
建構函式合併。 -
options
Object (選用)-
最長等待時間,單位為毫秒,預設為 30 秒,傳遞
0
以停用逾時。預設值可以使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
waitForURL
Added in: v1.11等待主框架導航到給定的 URL。
用法
await page.click('a.delayed-navigation'); // Clicking the link will indirectly cause a navigation
await page.waitForURL('**/target.html');
引數
-
url
string | RegExp | function(URL):boolean#在等待導航時要比對的 glob 模式、regex 模式或接收 URL 的 predicate。請注意,如果參數是不帶萬用字元的字串,則此方法將等待導航到與該字串完全相等的 URL。
-
options
Object (選用)-
最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。 -
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (optional)#何時視為操作成功,預設為
load
。事件可以是:'domcontentloaded'
- 當DOMContentLoaded
事件被觸發時,視為操作完成。'load'
- 當load
事件被觸發時,視為操作完成。'networkidle'
- 不建議使用 當至少500
毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,請改為依賴 web assertions 來評估就緒狀態。'commit'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
傳回
workers
在 v1.9 版本之前新增此方法傳回與頁面相關聯的所有專用 WebWorkers。
這不包含 ServiceWorker
用法
page.workers();
傳回
Properties
clock
Added in: v1.45Playwright 具有模擬時鐘和時間流逝的能力。
用法
page.clock
Type
coverage
在 v1.9 版本之前新增目前僅適用於 Chromium。
瀏覽器特定的 Coverage 實作。有關更多詳細資訊,請參閱 Coverage。
用法
page.coverage
Type
keyboard
在 v1.9 版本之前新增用法
page.keyboard
Type
mouse
在 v1.9 版本之前新增用法
page.mouse
Type
request
Added in: v1.16與此頁面相關聯的 API 測試輔助工具。此方法傳回與頁面 context 上的 browserContext.request 相同的實例。有關更多詳細資訊,請參閱 browserContext.request。
用法
page.request
Type
touchscreen
在 v1.9 版本之前新增用法
page.touchscreen
Type
Events
on('close')
在 v1.9 版本之前新增當頁面關閉時發出。
用法
page.on('close', data => {});
事件資料
on('console')
在 v1.9 版本之前新增當頁面內的 JavaScript 呼叫其中一個 console API 方法時發出,例如 console.log
或 console.dir
。
傳遞到 console.log
中的引數可在 ConsoleMessage 事件處理常式引數中使用。
用法
page.on('console', async msg => {
const values = [];
for (const arg of msg.args())
values.push(await arg.jsonValue());
console.log(...values);
});
await page.evaluate(() => console.log('hello', 5, { foo: 'bar' }));
事件資料
on('crash')
在 v1.9 版本之前新增當頁面崩潰時發出。如果瀏覽器頁面嘗試分配過多記憶體,則可能會崩潰。當頁面崩潰時,正在進行和後續的操作將會拋出錯誤。
處理崩潰最常見的方法是捕獲例外
try {
// Crash might happen during a click.
await page.click('button');
// Or while waiting for an event.
await page.waitForEvent('popup');
} catch (e) {
// When the page crashes, exception message contains 'crash'.
}
用法
page.on('crash', data => {});
事件資料
on('dialog')
在 v1.9 版本之前新增當出現 JavaScript 對話框時發出,例如 alert
、prompt
、confirm
或 beforeunload
。監聽器**必須** dialog.accept() 或 dialog.dismiss() 對話框 - 否則頁面將會 凍結 等待對話框,而點擊等操作將永遠無法完成。
用法
page.on('dialog', dialog => dialog.accept());
當沒有 page.on('dialog') 或 browserContext.on('dialog') 監聽器存在時,所有對話框都會自動關閉。
事件資料
on('domcontentloaded')
新增於:v1.9當 JavaScript DOMContentLoaded
事件被分派時發出。
用法
page.on('domcontentloaded', data => {});
事件資料
on('download')
在 v1.9 版本之前新增當附件下載開始時發出。使用者可以透過傳遞的 Download 實例存取已下載內容的基本檔案操作。
用法
page.on('download', data => {});
事件資料
on('filechooser')
新增於:v1.9當應該出現檔案選擇器時發出,例如在點擊 <input type=file>
之後。Playwright 可以透過使用 fileChooser.setFiles() 設定輸入檔案來回應,之後可以上傳這些檔案。
page.on('filechooser', async fileChooser => {
await fileChooser.setFiles(path.join(__dirname, '/tmp/myfile.pdf'));
});
用法
page.on('filechooser', data => {});
事件資料
on('frameattached')
新增於:v1.9當 frame 被附加時發出。
用法
page.on('frameattached', data => {});
事件資料
on('framedetached')
新增於:v1.9當 frame 被分離時發出。
用法
page.on('framedetached', data => {});
事件資料
on('framenavigated')
新增於:v1.9當 frame 導航到新的 url 時發出。
用法
page.on('framenavigated', data => {});
事件資料
on('load')
在 v1.9 版本之前新增當 JavaScript load
事件被分派時發出。
用法
page.on('load', data => {});
事件資料
on('pageerror')
新增於:v1.9當頁面內發生未捕獲的例外時發出。
// Log all uncaught errors to the terminal
page.on('pageerror', exception => {
console.log(`Uncaught exception: "${exception}"`);
});
// Navigate to a page with an exception.
await page.goto('data:text/html,<script>throw new Error("Test")</script>');
用法
page.on('pageerror', data => {});
事件資料
on('popup')
在 v1.9 版本之前新增當頁面開啟新的分頁或視窗時發出。此事件除了 browserContext.on('page') 之外也會發出,但僅適用於與此頁面相關的彈出視窗。
頁面可用的最早時刻是它導航到初始 url 時。例如,當使用 window.open('http://example.com')
開啟彈出視窗時,當對 "http://example.com" 的網路請求完成且其回應已開始在彈出視窗中載入時,將會觸發此事件。如果您想路由/監聽此網路請求,請分別使用 browserContext.route() 和 browserContext.on('request'),而不是 Page 上的類似方法。
// Start waiting for popup before clicking. Note no await.
const popupPromise = page.waitForEvent('popup');
await page.getByText('open the popup').click();
const popup = await popupPromise;
console.log(await popup.evaluate('location.href'));
使用 page.waitForLoadState() 等待頁面達到特定狀態(在大多數情況下您不需要它)。
用法
page.on('popup', data => {});
事件資料
on('request')
在 v1.9 版本之前新增當頁面發出請求時發出。request 物件是唯讀的。為了攔截和變更請求,請參閱 page.route() 或 browserContext.route()。
用法
page.on('request', data => {});
事件資料
on('requestfailed')
新增於:v1.9當請求失敗時發出,例如逾時。
page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});
HTTP 錯誤回應,例如 404 或 503,從 HTTP 的角度來看仍然是成功的回應,因此請求將以 page.on('requestfinished') 事件完成,而不是 page.on('requestfailed')。只有當客戶端無法從伺服器取得 HTTP 回應時,請求才被視為失敗,例如由於網路錯誤 net::ERR_FAILED。
用法
page.on('requestfailed', data => {});
事件資料
on('requestfinished')
新增於:v1.9當請求在下載回應主體後成功完成時發出。對於成功的回應,事件順序為 request
、response
和 requestfinished
。
用法
page.on('requestfinished', data => {});
事件資料
on('response')
在 v1.9 版本之前新增當收到請求的 response 狀態和標頭時發出。對於成功的回應,事件順序為 request
、response
和 requestfinished
。
用法
page.on('response', data => {});
事件資料
on('websocket')
新增於:v1.9當傳送 WebSocket 請求時發出。
用法
page.on('websocket', data => {});
事件資料
on('worker')
在 v1.9 版本之前新增當頁面產生專用的 WebWorker 時發出。
用法
page.on('worker', data => {});
事件資料
Deprecated
$
新增於:v1.9請改用基於 locator 的 page.locator()。請閱讀更多關於 locators 的資訊。
此方法會在頁面中尋找符合指定選擇器的元素。如果沒有元素符合選擇器,回傳值會解析為 null
。若要等待頁面上的元素,請使用 locator.waitFor()。
用法
await page.$(selector);
await page.$(selector, options);
引數
-
要查詢的選擇器。
-
options
Object (選用)
傳回
$$
新增於:v1.9請改用基於 locator 的 page.locator()。請閱讀更多關於 locators 的資訊。
此方法會在頁面中尋找所有符合指定選擇器的元素。如果沒有元素符合選擇器,回傳值會解析為 []
。
用法
await page.$$(selector);
引數
傳回
$eval
新增於:v1.9此方法不會等待元素通過可操作性檢查,因此可能導致測試不穩定。請改用 locator.evaluate()、其他 Locator 輔助方法或網頁優先的斷言。
此方法會在頁面中尋找符合指定選擇器的元素,並將其作為第一個參數傳遞給 pageFunction。如果沒有元素符合選擇器,此方法會拋出錯誤。回傳 pageFunction 的值。
如果 pageFunction 回傳 Promise,則 page.$eval() 會等待 Promise 解析並回傳其值。
用法
const searchValue = await page.$eval('#search', el => el.value);
const preloadHref = await page.$eval('link[rel=preload]', el => el.href);
const html = await page.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');
// In TypeScript, this example requires an explicit type annotation (HTMLLinkElement) on el:
const preloadHrefTS = await page.$eval('link[rel=preload]', (el: HTMLLinkElement) => el.href);
引數
-
要查詢的選擇器。
-
pageFunction
function(Element) | string#要在頁面上下文中評估的函數。
-
arg
EvaluationArgument (選填)#傳遞給 pageFunction 的選填參數。
-
options
Object (選用)
傳回
$$eval
新增於:v1.9在大多數情況下,locator.evaluateAll()、其他 Locator 輔助方法和網頁優先的斷言會做得更好。
此方法會在頁面中尋找所有符合指定選擇器的元素,並將相符元素的陣列作為第一個參數傳遞給 pageFunction。回傳 pageFunction 呼叫的結果。
如果 pageFunction 回傳 Promise,則 page.$$eval() 會等待 Promise 解析並回傳其值。
用法
const divCounts = await page.$$eval('div', (divs, min) => divs.length >= min, 10);
引數
-
要查詢的選擇器。
-
pageFunction
function(Array<Element>) | string#要在頁面上下文中評估的函數。
-
arg
EvaluationArgument (選填)#傳遞給 pageFunction 的選填參數。
傳回
accessibility
在 v1.9 版本之前新增用法
page.accessibility
Type
check
在 v1.9 版本之前新增請改用基於 locator 的 locator.check()。請閱讀更多關於 locators 的資訊。
此方法會透過執行以下步驟,勾選符合 selector 的元素
- 尋找符合 selector 的元素。如果沒有,請等到符合的元素附加到 DOM。
- 確保符合的元素是核取方塊或 radio 輸入框。如果不是,此方法會拋出錯誤。如果元素已經被勾選,此方法會立即回傳。
- 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個操作。
- 如果需要,將元素滾動到視野中。
- 使用 page.mouse 在元素的中心點擊。
- 確保元素現在已被勾選。如果沒有,此方法會拋出錯誤。
當所有步驟在指定的 timeout 期間內未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
await page.check(selector);
await page.check(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
已棄用
此選項無效。
此選項無效。
-
position
Object (選填)Added in: v1.11#相對於元素 padding box 左上角的點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
trial
boolean (選填)Added in: v1.11#設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。在不執行動作的情況下,等待元素準備好執行動作時很有用。
-
傳回
click
在 v1.9 版本之前新增請改用基於 locator 的 locator.click()。請閱讀更多關於 locators 的資訊。
此方法會透過執行以下步驟,點擊符合 selector 的元素
- 尋找符合 selector 的元素。如果沒有,請等到符合的元素附加到 DOM。
- 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個操作。
- 如果需要,將元素滾動到視野中。
- 使用 page.mouse 在元素的中心點擊,或指定的 position。
- 等待啟動的導航成功或失敗,除非設定了 noWaitAfter 選項。
當所有步驟在指定的 timeout 期間內未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
await page.click(selector);
await page.click(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
button
"left" | "right" | "middle" (選填)#預設為
left
。 -
預設為 1。請參閱 UIEvent.detail。
-
mousedown
和mouseup
之間等待的時間,以毫秒為單位。預設為 0。 -
是否略過可操作性檢查。預設為
false
。 -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已棄用
此選項在未來將預設為
true
。啟動導航的操作正在等待這些導航發生以及頁面開始載入。您可以選擇不等待,透過設定此旗標。您只需要在特殊情況下使用此選項,例如導航到無法訪問的頁面。預設為
false
。 -
相對於元素 padding box 左上角的點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
trial
boolean (選填)Added in: v1.11#設定後,此方法僅執行可操作性檢查,並跳過操作。預設為
false
。可用於等待元素準備好進行操作,而無需執行操作。請注意,鍵盤modifiers
將始終被按下,無論trial
設定為何,以允許測試僅在按下這些按鍵時才可見的元素。
-
傳回
dblclick
在 v1.9 版本之前新增請改用基於 locator 的 locator.dblclick()。請閱讀更多關於 locators 的資訊。
此方法會透過執行以下步驟,雙擊符合 selector 的元素
- 尋找符合 selector 的元素。如果沒有,請等到符合的元素附加到 DOM。
- 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個操作。
- 如果需要,將元素滾動到視野中。
- 使用 page.mouse 在元素的中心雙擊,或指定的 position。
當所有步驟在指定的 timeout 期間內未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
page.dblclick()
會發送兩個 click
事件和一個 dblclick
事件。
用法
await page.dblclick(selector);
await page.dblclick(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
button
"left" | "right" | "middle" (選填)#預設為
left
。 -
mousedown
和mouseup
之間等待的時間,以毫秒為單位。預設為 0。 -
是否略過可操作性檢查。預設為
false
。 -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已棄用
此選項無效。
此選項無效。
-
相對於元素 padding box 左上角的點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
trial
boolean (選填)Added in: v1.11#設定後,此方法僅執行可操作性檢查,並跳過操作。預設為
false
。可用於等待元素準備好進行操作,而無需執行操作。請注意,鍵盤modifiers
將始終被按下,無論trial
設定為何,以允許測試僅在按下這些按鍵時才可見的元素。
-
傳回
dispatchEvent
在 v1.9 版本之前新增請改用基於 locator 的 locator.dispatchEvent()。請閱讀更多關於 locators 的資訊。
以下程式碼片段在元素上發送 click
事件。無論元素的可见性狀態如何,都會發送 click
。這相當於呼叫 element.click()。
用法
await 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
const dataTransfer = await page.evaluateHandle(() => new DataTransfer());
await page.dispatchEvent('#source', 'dragstart', { dataTransfer });
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
DOM 事件類型:
"click"
、"dragstart"
等。 -
eventInit
EvaluationArgument (選填)#選填的事件特定初始化屬性。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
fill
在 v1.9 版本之前新增請改用基於 locator 的 locator.fill()。請閱讀更多關於 locators 的資訊。
此方法會等待符合 selector 的元素,等待可操作性檢查,聚焦元素,填寫它,並在填寫後觸發 input
事件。請注意,您可以傳遞空字串來清除輸入欄位。
如果目標元素不是 <input>
、<textarea>
或 [contenteditable]
元素,此方法會拋出錯誤。但是,如果元素在具有關聯 control 的 <label>
元素內,則將會填寫該 control。
若要發送細緻的鍵盤事件,請使用 locator.pressSequentially()。
用法
await page.fill(selector, value);
await page.fill(selector, value, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
要為
<input>
、<textarea>
或[contenteditable]
元素填寫的值。 -
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
已棄用
此選項無效。
此選項無效。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
focus
在 v1.9 版本之前新增請改用基於 locator 的 locator.focus()。請閱讀更多關於 locators 的資訊。
此方法會獲取具有 selector 的元素並使其聚焦。如果沒有符合 selector 的元素,則此方法會等待直到符合的元素出現在 DOM 中。
用法
await page.focus(selector);
await page.focus(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
getAttribute
在 v1.9 版本之前新增請改用基於 locator 的 locator.getAttribute()。請閱讀更多關於 locators 的資訊。
回傳元素屬性值。
用法
await page.getAttribute(selector, name);
await page.getAttribute(selector, name, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
要取得其值的屬性名稱。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
hover
在 v1.9 版本之前新增請改用基於 locator 的 locator.hover()。請閱讀更多關於 locators 的資訊。
此方法會透過執行以下步驟,懸停在符合 selector 的元素上方
- 尋找符合 selector 的元素。如果沒有,請等到符合的元素附加到 DOM。
- 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個操作。
- 如果需要,將元素滾動到視野中。
- 使用 page.mouse 懸停在元素的中心上方,或指定的 position。
當所有步驟在指定的 timeout 期間內未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
await page.hover(selector);
await page.hover(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
noWaitAfter
boolean (選用)新增於:v1.28#已棄用此選項無效。
此選項無效。
-
相對於元素 padding box 左上角的點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
trial
boolean (選填)Added in: v1.11#設定後,此方法僅執行可操作性檢查,並跳過操作。預設為
false
。可用於等待元素準備好進行操作,而無需執行操作。請注意,鍵盤modifiers
將始終被按下,無論trial
設定為何,以允許測試僅在按下這些按鍵時才可見的元素。
-
傳回
innerHTML
在 v1.9 版本之前新增請改用基於 locator 的 locator.innerHTML()。請閱讀更多關於 locators 的資訊。
回傳 element.innerHTML
。
用法
await page.innerHTML(selector);
await page.innerHTML(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
innerText
在 v1.9 版本之前新增請改用基於 locator 的 locator.innerText()。請閱讀更多關於 locators 的資訊。
回傳 element.innerText
。
用法
await page.innerText(selector);
await page.innerText(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
inputValue
新增於:v1.13請改用基於定位器的 locator.inputValue()。閱讀更多關於定位器的資訊。
針對選取的 <input>
、<textarea>
或 <select>
元素,傳回 input.value
。
若元素並非輸入元素則會拋出錯誤。但是,如果元素位於具有關聯控制項的 <label>
元素內,則會傳回控制項的值。
用法
await page.inputValue(selector);
await page.inputValue(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
isChecked
在 v1.9 版本之前新增請改用基於定位器的 locator.isChecked()。閱讀更多關於定位器的資訊。
傳回元素是否被勾選。如果元素不是核取方塊或單選按鈕輸入,則會拋出錯誤。
用法
await page.isChecked(selector);
await page.isChecked(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
isDisabled
在 v1.9 版本之前新增請改用基於定位器的 locator.isDisabled()。閱讀更多關於定位器的資訊。
傳回元素是否為停用狀態,與啟用狀態相反。
用法
await page.isDisabled(selector);
await page.isDisabled(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
isEditable
在 v1.9 版本之前新增請改用基於定位器的 locator.isEditable()。閱讀更多關於定位器的資訊。
傳回元素是否為可編輯狀態。
用法
await page.isEditable(selector);
await page.isEditable(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
isEnabled
在 v1.9 版本之前新增請改用基於定位器的 locator.isEnabled()。閱讀更多關於定位器的資訊。
傳回元素是否為啟用狀態。
用法
await page.isEnabled(selector);
await page.isEnabled(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
isHidden
在 v1.9 版本之前新增請改用基於定位器的 locator.isHidden()。閱讀更多關於定位器的資訊。
傳回元素是否為隱藏狀態,與可見狀態相反。不符合任何元素的 selector 會被視為隱藏。
用法
await page.isHidden(selector);
await page.isHidden(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
已棄用
此選項會被忽略。page.isHidden() 不會等待元素變成隱藏,並立即傳回。
-
傳回
isVisible
在 v1.9 版本之前新增請改用基於定位器的 locator.isVisible()。閱讀更多關於定位器的資訊。
傳回元素是否為可見狀態。不符合任何元素的 selector 會被視為不可見。
用法
await page.isVisible(selector);
await page.isVisible(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
已棄用
此選項會被忽略。page.isVisible() 不會等待元素變成可見,並立即傳回。
-
傳回
press
在 v1.9 版本之前新增請改用基於定位器的 locator.press()。閱讀更多關於定位器的資訊。
聚焦元素,然後使用 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"
之類的捷徑。當使用修飾鍵指定時,在按下後續按鍵時,修飾鍵會保持按下狀態。
用法
const page = await browser.newPage();
await page.goto('https://keycode.info');
await page.press('body', 'A');
await page.screenshot({ path: 'A.png' });
await page.press('body', 'ArrowLeft');
await page.screenshot({ path: 'ArrowLeft.png' });
await page.press('body', 'Shift+O');
await page.screenshot({ path: 'O.png' });
await browser.close();
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
要按下的按鍵名稱或要產生的字元,例如
ArrowLeft
或a
。 -
options
Object (選用)-
keydown
和keyup
之間等待的時間,以毫秒為單位。預設為 0。 -
已棄用
此選項在未來將預設為
true
。啟動導航的操作正在等待這些導航發生以及頁面開始載入。您可以選擇不等待,透過設定此旗標。您只需要在特殊情況下使用此選項,例如導航到無法訪問的頁面。預設為
false
。 -
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
selectOption
在 v1.9 版本之前新增請改用基於定位器的 locator.selectOption()。閱讀更多關於定位器的資訊。
此方法會等待符合 selector 的元素,等待可操作性檢查,等待直到所有指定的選項都出現在 <select>
元素中,然後選取這些選項。
如果目標元素不是 <select>
元素,此方法會拋出錯誤。但是,如果元素位於具有關聯控制項的 <label>
元素內,則會改為使用控制項。
傳回已成功選取的選項值陣列。
一旦選取所有提供的選項,就會觸發 change
和 input
事件。
用法
// Single selection matching the value or label
page.selectOption('select#colors', 'blue');
// single selection matching the label
page.selectOption('select#colors', { label: 'Blue' });
// multiple selection
page.selectOption('select#colors', ['red', 'green', 'blue']);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
values
null | string | ElementHandle | Array<string> | Object | Array<ElementHandle> | Array<Object>#-
value
string (選填)依
option.value
進行比對。選填。 -
label
string (選填)依
option.label
進行比對。選填。 -
index
number (選填)依索引進行比對。選填。
要選取的選項。如果
<select>
具有multiple
屬性,則會選取所有符合的選項,否則只會選取第一個符合其中一個傳遞選項的選項。字串值會同時比對值和標籤。如果所有指定的屬性都符合,則選項會被視為符合。 -
-
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
已棄用
此選項無效。
此選項無效。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
setChecked
新增於:v1.15請改用基於定位器的 locator.setChecked()。閱讀更多關於定位器的資訊。
此方法會透過執行下列步驟,勾選或取消勾選符合 selector 的元素:
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 確保符合的元素是核取方塊或單選按鈕輸入。如果不是,此方法會拋出錯誤。
- 如果元素已經處於正確的勾選狀態,此方法會立即傳回。
- 等待符合元素的可操作性檢查,除非設定 force 選項。如果元素在檢查期間分離,則會重試整個動作。
- 如果需要,將元素滾動到視野中。
- 使用 page.mouse 在元素的中心點擊。
- 確保元素現在已勾選或取消勾選。如果沒有,此方法會拋出錯誤。
當所有步驟組合在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。
用法
await page.setChecked(selector, checked);
await page.setChecked(selector, checked, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
是否勾選或取消勾選核取方塊。
-
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
已棄用
此選項無效。
此選項無效。
-
相對於元素 padding box 左上角的點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。在不執行動作的情況下,等待元素準備好執行動作時很有用。
-
傳回
setInputFiles
在 v1.9 版本之前新增請改用基於定位器的 locator.setInputFiles()。閱讀更多關於定位器的資訊。
將檔案輸入的值設定為這些檔案路徑或檔案。如果某些 filePaths
是相對路徑,則會相對於目前的工作目錄解析它們。對於空陣列,會清除選取的檔案。對於具有 [webkitdirectory]
屬性的輸入,僅支援單一目錄路徑。
此方法預期 selector 指向 input 元素。但是,如果元素位於具有關聯控制項的 <label>
元素內,則會改為以控制項為目標。
用法
await page.setInputFiles(selector, files);
await page.setInputFiles(selector, files, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
已棄用
此選項無效。
此選項無效。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
tap
在 v1.9 版本之前新增請改用基於定位器的 locator.tap()。閱讀更多關於定位器的資訊。
此方法會透過執行下列步驟,輕觸符合 selector 的元素:
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 等待符合元素的可操作性檢查,除非設定 force 選項。如果元素在檢查期間分離,則會重試整個動作。
- 如果需要,將元素滾動到視野中。
- 使用 page.touchscreen 輕觸元素的中心,或指定的 position。
當所有步驟組合在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。
page.tap() 方法會在瀏覽器內容的 hasTouch 選項為 false 時拋出錯誤。
用法
await page.tap(selector);
await page.tap(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
modifiers
Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後恢復目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已棄用
此選項無效。
此選項無效。
-
相對於元素 padding box 左上角的點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
trial
boolean (選填)Added in: v1.11#設定後,此方法僅執行可操作性檢查,並跳過操作。預設為
false
。可用於等待元素準備好進行操作,而無需執行操作。請注意,鍵盤modifiers
將始終被按下,無論trial
設定為何,以允許測試僅在按下這些按鍵時才可見的元素。
-
傳回
textContent
在 v1.9 版本之前新增請改用基於定位器的 locator.textContent()。閱讀更多關於定位器的資訊。
傳回 element.textContent
。
用法
await page.textContent(selector);
await page.textContent(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
type
在 v1.9 版本之前新增在大多數情況下,您應該改用 locator.fill()。只有在頁面上有特殊的鍵盤處理時,才需要逐個按鍵 - 在這種情況下,請使用 locator.pressSequentially()。
為文字中的每個字元傳送 keydown
、keypress
/input
和 keyup
事件。page.type
可用於傳送細緻的鍵盤事件。若要填寫表單欄位中的值,請使用 page.fill()。
若要按下特殊按鍵,例如 Control
或 ArrowDown
,請使用 keyboard.press()。
用法
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
要輸入到聚焦元素中的文字。
-
options
Object (選用)-
按鍵之間等待的時間,以毫秒為單位。預設為 0。
-
已棄用
此選項無效。
此選項無效。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
uncheck
在 v1.9 版本之前新增請改用基於定位器的 locator.uncheck()。閱讀更多關於定位器的資訊。
此方法會透過執行下列步驟,取消勾選符合 selector 的元素:
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 確保符合的元素是核取方塊或單選按鈕輸入。如果不是,此方法會拋出錯誤。如果元素已經取消勾選,此方法會立即傳回。
- 等待符合元素的可操作性檢查,除非設定 force 選項。如果元素在檢查期間分離,則會重試整個動作。
- 如果需要,將元素滾動到視野中。
- 使用 page.mouse 在元素的中心點擊。
- 確保元素現在已取消勾選。如果沒有,此方法會拋出錯誤。
當所有步驟組合在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。
用法
await page.uncheck(selector);
await page.uncheck(selector, options);
引數
-
用於搜尋元素的選擇器。如果有多個元素滿足選擇器,將使用第一個。
-
options
Object (選用)-
是否略過可操作性檢查。預設為
false
。 -
已棄用
此選項無效。
此選項無效。
-
position
Object (選填)Added in: v1.11#相對於元素 padding box 左上角的點。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。 -
trial
boolean (選填)Added in: v1.11#設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。在不執行動作的情況下,等待元素準備好執行動作時很有用。
-
傳回
waitForNavigation
在 v1.9 版本之前新增此方法本質上具有競爭性,請改用 page.waitForURL()。
等待主框架導航並返回主要資源回應。如果發生多次重定向,導航將解析為最後一次重定向的回應。如果導航到不同的錨點或由於 History API 的使用而導航,導航將解析為 null
。
用法
當頁面導航到新的 URL 或重新載入時,此方法會解析。當您運行會間接導致頁面導航的程式碼時,此方法非常有用。例如,點擊目標具有一個 onclick
處理程序,該處理程序會從 setTimeout
觸發導航。請考慮以下範例
// Start waiting for navigation before clicking. Note no await.
const navigationPromise = page.waitForNavigation();
await page.getByText('Navigate after timeout').click();
await navigationPromise;
使用 History API 更改 URL 被視為導航。
引數
options
Object (選用)-
最大操作時間,以毫秒為單位。預設為
0
- 無 timeout。預設值可以透過 config 中的navigationTimeout
選項更改,或使用 browserContext.setDefaultNavigationTimeout()、browserContext.setDefaultTimeout()、page.setDefaultNavigationTimeout() 或 page.setDefaultTimeout() 方法。 -
url
字串 | RegExp | function(URL):布林值 (選填)#在等待導航時要比對的 glob 模式、regex 模式或接收 URL 的 predicate。請注意,如果參數是不帶萬用字元的字串,則此方法將等待導航到與該字串完全相等的 URL。
-
waitUntil
"load" | "domcontentloaded" | "networkidle" | "commit" (選填)#何時視為操作成功,預設為
load
。事件可以是:'domcontentloaded'
- 當DOMContentLoaded
事件被觸發時,視為操作完成。'load'
- 當load
事件被觸發時,視為操作完成。'networkidle'
- 不建議使用 當至少500
毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,請改為依賴 web assertions 來評估就緒狀態。'commit'
- 當收到網路回應且文件開始載入時,視為操作完成。
-
傳回
waitForSelector
在 v1.9 版本之前新增請改用斷言可見性或基於定位器的 locator.waitFor() 等 Web 斷言。閱讀更多關於定位器的資訊。
當選擇器指定的元素滿足 state 選項時返回。如果等待 hidden
或 detached
,則返回 null
。
Playwright 會自動等待元素準備就緒,然後再執行操作。使用 Locator 物件和 Web 優先斷言使程式碼無需等待選擇器。
等待 selector 滿足 state 選項(出現在/消失在 DOM 中,或變得可見/隱藏)。如果在呼叫方法時,selector 已經滿足條件,則該方法將立即返回。如果選擇器在 timeout 毫秒內未滿足條件,則該函數將拋出錯誤。
用法
此方法跨導航工作
const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'.
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
for (const currentURL of ['https://google.com', 'https://bbc.com']) {
await page.goto(currentURL);
const element = await page.waitForSelector('img');
console.log('Loaded image: ' + await element.getAttribute('src'));
}
await browser.close();
})();
引數
-
要查詢的選擇器。
-
options
Object (選用)-
state
"attached" | "detached" | "visible" | "hidden" (選填)#預設為
'visible'
。可以是以下任一值'attached'
- 等待元素出現在 DOM 中。'detached'
- 等待元素不在 DOM 中。'visible'
- 等待元素具有非空的邊界框且沒有visibility:hidden
。請注意,沒有任何內容或具有display:none
的元素具有空的邊界框,並且不被視為可見。'hidden'
- 等待元素從 DOM 中分離,或具有空的邊界框或visibility:hidden
。這與'visible'
選項相反。
-
如果為 true,則呼叫需要選取器解析為單個元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
以毫秒為單位的最大時間。預設為
0
- 無逾時。預設值可以透過設定中的actionTimeout
選項變更,或使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法變更。
-
傳回
waitForTimeout
在 v1.9 版本之前新增永遠不要在生產環境中等待超時。等待時間的測試本質上是不穩定的。請改用自動等待的 Locator 動作和 Web 斷言。
等待給定的 timeout 毫秒數。
請注意,page.waitForTimeout()
僅應用於偵錯。在生產環境中使用計時器的測試將會變得不穩定。請改用網路事件、選擇器變得可見等訊號。
用法
// wait for 1 second
await page.waitForTimeout(1000);
引數
傳回