跳到主要内容

Frame

在每个时间点,page 通过 page.mainFrame()frame.childFrames() 方法公开其当前的 frame 树。

Frame 对象的生命周期由三个在 page 对象上分派的事件控制:

dump frame 树的示例

const { firefox } = require('playwright');  // Or 'chromium' or 'webkit'.

(async () => {
const browser = await firefox.launch();
const page = await browser.newPage();
await page.goto('https://www.google.com/chrome/browser/canary.html');
dumpFrameTree(page.mainFrame(), '');
await browser.close();

function dumpFrameTree(frame, indent) {
console.log(indent + frame.url());
for (const child of frame.childFrames())
dumpFrameTree(child, indent + ' ');
}
})();

方法

addScriptTag

在 v1.9 之前添加 frame.addScriptTag

在脚本的 onload 触发或脚本内容被注入到 frame 中时,返回添加的标签。

使用所需的 url 或内容向页面添加一个 <script> 标签。

用法

await frame.addScriptTag();
await frame.addScriptTag(options);

参数

  • options Object (可选)
    • content string (可选)#

      要注入到 frame 中的原始 JavaScript 内容。

    • path string (可选)#

      要注入到 frame 中的 JavaScript 文件路径。如果 path 是相对路径,则相对于当前工作目录解析。

    • type string (可选)#

      脚本类型。使用 'module' 以加载 JavaScript ES6 模块。有关更多详细信息,请参阅 script

    • url string (可选)#

      要添加的脚本的 URL。

返回值


addStyleTag

在 v1.9 之前添加 frame.addStyleTag

在样式表的 onload 触发或 CSS 内容被注入到 frame 中时,返回添加的标签。

使用所需的 url 向页面添加一个 <link rel="stylesheet"> 标签,或使用内容添加一个 <style type="text/css"> 标签。

用法

await frame.addStyleTag();
await frame.addStyleTag(options);

参数

  • options Object (可选)
    • content string (可选)#

      要注入到 frame 中的原始 CSS 内容。

    • path string (可选)#

      要注入到 frame 中的 CSS 文件路径。如果 path 是相对路径,则相对于当前工作目录解析。

    • url string (可选)#

      <link> 标签的 URL。

返回值


childFrames

在 v1.9 之前添加 frame.childFrames

用法

frame.childFrames();

返回值


content

在 v1.9 之前添加 frame.content

获取 frame 的完整 HTML 内容,包括 doctype。

用法

await frame.content();

返回值


dragAndDrop

在 v1.13 中添加 frame.dragAndDrop

用法

await frame.dragAndDrop(source, target);
await frame.dragAndDrop(source, target, options);

参数

  • source string#

    用于搜索要拖动元素的 selector。如果有多个元素满足 selector,将使用第一个。

  • target string#

    用于搜索要放置到的元素的 selector。如果有多个元素满足 selector,将使用第一个。

  • options Object (可选)

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • sourcePosition Object (可选)在 v1.14 中添加#

      相对于元素 padding box 的左上角,在此点点击源元素。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • targetPosition Object (可选)在 v1.14 中添加#

      相对于元素 padding box 的左上角,在此点将元素拖放到目标元素上。如果未指定,则使用元素的某个可见点。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)#

      设置后,此方法仅执行可操作性检查并跳过操作。默认为 false。在不执行操作的情况下等待元素准备好执行操作时很有用。

返回值


evaluate

在 v1.9 之前添加 frame.evaluate

返回 pageFunction 的返回值。

如果传递给 frame.evaluate() 的函数返回一个 Promise,那么 frame.evaluate() 将等待 promise 解析并返回其值。

如果传递给 frame.evaluate() 的函数返回一个非可序列化的值,那么 frame.evaluate() 返回 undefined。Playwright 还支持传输一些 JSON 不可序列化的附加值:-0NaNInfinity-Infinity

用法

const result = await frame.evaluate(([x, y]) => {
return Promise.resolve(x * y);
}, [7, 8]);
console.log(result); // prints "56"

除了函数,也可以传入字符串。

console.log(await frame.evaluate('1 + 2')); // prints "3"

ElementHandle 实例可以作为参数传递给 frame.evaluate()

const bodyHandle = await frame.evaluate('document.body');
const html = await frame.evaluate(([body, suffix]) =>
body.innerHTML + suffix, [bodyHandle, 'hello'],
);
await bodyHandle.dispose();

参数

返回值


evaluateHandle

在 v1.9 之前添加 frame.evaluateHandle

pageFunction 的返回值作为 JSHandle 返回。

frame.evaluate()frame.evaluateHandle() 唯一的区别是 frame.evaluateHandle() 返回 JSHandle

如果传递给 frame.evaluateHandle() 的函数返回一个 Promise,那么 frame.evaluateHandle() 将等待 promise 解析并返回其值。

用法

// Handle for the window object
const aWindowHandle = await frame.evaluateHandle(() => Promise.resolve(window));

除了函数,也可以传入字符串。

const aHandle = await frame.evaluateHandle('document'); // Handle for the 'document'.

JSHandle 实例可以作为参数传递给 frame.evaluateHandle()

const aHandle = await frame.evaluateHandle(() => document.body);
const resultHandle = await frame.evaluateHandle(([body, suffix]) =>
body.innerHTML + suffix, [aHandle, 'hello'],
);
console.log(await resultHandle.jsonValue());
await resultHandle.dispose();

参数

返回值


frameElement

在 v1.9 之前添加 frame.frameElement

返回与此 frame 对应的 frameiframe 元素句柄。

这是 elementHandle.contentFrame() 的反向操作。请注意,返回的句柄实际上属于父 frame。

如果在 frameElement() 返回之前 frame 已被分离,此方法将抛出错误。

用法

const frameElement = await frame.frameElement();
const contentFrame = await frameElement.contentFrame();
console.log(frame === contentFrame); // -> true

返回值


frameLocator

在 v1.17 中添加 frame.frameLocator

使用 iframe 时,可以创建一个 frame 定位器,它将进入 iframe 并允许选择 iframe 中的元素。

用法

以下代码段在 id 为 my-frame 的 iframe(例如 <iframe id="my-frame">)中定位文本为 "Submit" 的元素:

const locator = frame.frameLocator('#my-iframe').getByText('Submit');
await locator.click();

参数

  • selector string#

    用于解析 DOM 元素的 selector。

返回值


getByAltText

在 v1.27 中添加 frame.getByAltText

允许通过元素的 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 中添加 frame.getByLabel

允许通过关联的 <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 中添加 frame.getByPlaceholder

允许通过 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 中添加 frame.getByRole

允许通过元素的 ARIA roleARIA attributesaccessible name 定位元素。

用法

考虑以下 DOM 结构。

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

您可以按其隐式角色定位每个元素

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-disableddisabled 设置的属性。

      注意

      与其他大多数属性不同,disabled 是通过 DOM 层次结构继承的。了解更多关于 aria-disabled 的信息。

    • exact boolean (可选)在 v1.28 中添加#

      是否精确匹配 name:区分大小写和整个字符串匹配。默认为 false。当 name 是正则表达式时忽略。请注意,精确匹配仍然会去除空白。

    • expanded boolean (可选)#

      通常由 aria-expanded 设置的属性。

      了解更多关于 aria-expanded 的信息。

    • includeHidden boolean (可选)#

      控制是否匹配隐藏元素的选项。默认情况下,只有非隐藏元素(由 ARIA 定义)才会被 role selector 匹配。

      了解更多关于 aria-hidden 的信息。

    • level number (可选)#

      对于角色 headinglistitemrowtreeitem 通常存在的数字属性,以及 <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 不能替代 可访问性审计和合规性测试,但可以提供关于 ARIA 准则的早期反馈。

许多 html 元素具有隐式定义的 role,Role selector 可以识别它。您可以在此处找到所有支持的角色。ARIA 准则不建议通过将 role 和/或 aria-* 属性设置为默认值来重复隐式角色和属性。


getByTestId

在 v1.27 中添加 frame.getByTestId

通过测试 ID 定位元素。

用法

考虑以下 DOM 结构。

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

您可以通过元素的测试 ID 定位它

await page.getByTestId('directions').click();

参数

返回值

详细信息

默认情况下,使用 data-testid 属性作为测试 ID。如有必要,使用 selectors.setTestIdAttribute() 配置不同的测试 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 中添加 frame.getByText

允许定位包含给定文本的元素。

另请参阅 locator.filter(),它允许按其他条件(如可访问性角色)匹配,然后按文本内容过滤。

用法

考虑以下 DOM 结构

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

您可以通过文本子字符串、精确字符串或正则表达式进行定位

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

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

// Matches second <div>
page.getByText('Hello', { exact: true });

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

// Matches second <div>
page.getByText(/^hello$/i);

参数

  • text string | RegExp#

    用于定位元素的文本。

  • options Object (可选)

    • exact boolean (可选)#

      是否查找精确匹配:区分大小写和整个字符串匹配。默认为 false。通过正则表达式定位时忽略。请注意,精确匹配仍然会去除空白。

返回值

详细信息

通过文本匹配总是标准化空白,即使是精确匹配。例如,它将多个空格转换为一个,将换行符转换为空格,并忽略前导和尾随空白。

buttonsubmit 类型的输入元素是根据它们的 value 而不是文本内容进行匹配的。例如,通过文本 "Log in" 定位会匹配 <input type=button value="Log in">


getByTitle

在 v1.27 中添加 frame.getByTitle

允许通过元素的 title 属性定位元素。

用法

考虑以下 DOM 结构。

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

您可以在通过 title 文本定位后检查问题计数

await expect(page.getByTitle('Issues count')).toHaveText('25 issues');

参数

  • text string | RegExp#

    用于定位元素的文本。

  • options Object (可选)

    • exact boolean (可选)#

      是否查找精确匹配:区分大小写和整个字符串匹配。默认为 false。通过正则表达式定位时忽略。请注意,精确匹配仍然会去除空白。

返回值


goto

在 v1.9 之前添加 frame.goto

返回主资源响应。在多次重定向的情况下,导航将以最后一次重定向的响应解析。

如果发生以下情况,此方法将抛出错误:

  • 存在 SSL 错误(例如自签名证书的情况)。
  • 目标 URL 无效。
  • 导航期间超出 timeout
  • 远程服务器无响应或无法访问。
  • 主资源加载失败。

当远程服务器返回任何有效的 HTTP 状态码时,包括 404 "Not Found" 和 500 "Internal Server Error",该方法都不会抛出错误。可以通过调用 response.status() 来检索此类响应的状态码。

注意

该方法要么抛出错误,要么返回主资源响应。唯一的例外是导航到 about:blank 或导航到具有不同 hash 的相同 URL,这将成功并返回 null

注意

无头模式不支持导航到 PDF 文档。请参阅上游问题

用法

await frame.goto(url);
await frame.goto(url, options);

参数

  • url string#

    要导航到的 frame 的 URL。URL 应该包含 scheme,例如 https://

  • options Object (可选)

    • referer string (可选)#

      Referer 请求头的值。如果提供,它将优先于通过 page.setExtraHTTPHeaders() 设置的 referer 请求头值。

    • timeout number (可选)#

      操作的最大时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置中的 navigationTimeout 选项更改,或者通过使用 browserContext.setDefaultNavigationTimeout()browserContext.setDefaultTimeout()page.setDefaultNavigationTimeout()page.setDefaultTimeout() 方法来更改。

    • waitUntil "load" | "domcontentloaded" | "networkidle" | "commit" (可选)#

      何时认为操作成功,默认为 load。事件可以是以下之一:

      • 'domcontentloaded' - 当触发 DOMContentLoaded 事件时,认为操作完成。
      • 'load' - 当触发 load 事件时,认为操作完成。
      • 'networkidle' - 不建议使用 - 当至少 500 毫秒内没有网络连接时,认为操作完成。不要将此方法用于测试,而应依赖 web assertion 来评估就绪状态。
      • 'commit' - 当接收到网络响应且文档开始加载时,认为操作完成。

返回值


isDetached

在 v1.9 之前添加 frame.isDetached

如果 frame 已分离,则返回 true,否则返回 false

用法

frame.isDetached();

返回值


isEnabled

在 v1.9 之前添加 frame.isEnabled

返回元素是否enabled

用法

await frame.isEnabled(selector);
await frame.isEnabled(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


locator

在 v1.14 中添加 frame.locator

该方法返回一个元素定位器,可用于在此 page / frame 上执行操作。定位器在执行操作之前立即解析到元素,因此对同一定位器执行的一系列操作实际上可能在不同的 DOM 元素上执行。如果 DOM 结构在这些操作之间发生了变化,就会发生这种情况。

了解有关定位器的更多信息.

了解有关定位器的更多信息.

用法

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

参数

  • selector string#

    用于解析 DOM 元素的 selector。

  • options Object (可选)

    • has Locator (可选)#

      将方法的结果缩小到那些包含与此相对定位器匹配的元素的元素。例如,包含 text=Playwrightarticle 匹配 <article><div>Playwright</div></article>

      内部定位器必须相对于外部定位器,并且从外部定位器匹配开始查询,而不是从文档根开始。例如,您可以在 <article><content><div>Playwright</div></content></article> 中查找包含 divcontent。但是,查找包含 article divcontent 将失败,因为内部定位器必须是相对的,并且不应使用 content 之外的任何元素。

      请注意,外部和内部定位器必须属于同一个 frame。内部定位器不得包含 FrameLocator

    • hasNot Locator (可选)新增于: v1.33#

      匹配不包含与内部定位器匹配的元素的元素。内部定位器针对外部定位器进行查询。例如,不包含 divarticle 匹配 <article><span>Playwright</span></article>

      请注意,外部和内部定位器必须属于同一个 frame。内部定位器不得包含 FrameLocator

    • hasNotText string | RegExp (可选)新增于: v1.33#

      匹配在内部某处不包含指定文本(可能在子元素或后代元素中)的元素。当传入 string 时,匹配不区分大小写并搜索子字符串。

    • hasText string | RegExp (可选)#

      匹配在内部某处包含指定文本(可能在子元素或后代元素中)的元素。当传入 string 时,匹配不区分大小写并搜索子字符串。例如,"Playwright" 匹配 <article><div>Playwright</div></article>

返回值


name

在 v1.9 之前添加 frame.name

返回 frame 在标签中指定的 name 属性。

如果 name 为空,则返回 id 属性。

注意

此值在创建 frame 时计算一次,如果属性稍后更改,则不会更新。

用法

frame.name();

返回值


page

在 v1.9 之前添加 frame.page

返回包含此 frame 的 page。

用法

frame.page();

返回值


parentFrame

在 v1.9 之前添加 frame.parentFrame

父 frame(如果有)。分离的 frame 和主 frame 返回 null

用法

frame.parentFrame();

返回值


setContent

在 v1.9 之前添加 frame.setContent

此方法内部调用 document.write(),继承其所有特定特性和行为。

用法

await frame.setContent(html);
await frame.setContent(html, options);

参数

  • html string#

    要分配给 page 的 HTML 标记。

  • options Object (可选)

    • timeout number (可选)#

      操作的最大时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置中的 navigationTimeout 选项更改,或者通过使用 browserContext.setDefaultNavigationTimeout()browserContext.setDefaultTimeout()page.setDefaultNavigationTimeout()page.setDefaultTimeout() 方法来更改。

    • waitUntil "load" | "domcontentloaded" | "networkidle" | "commit" (可选)#

      何时认为操作成功,默认为 load。事件可以是以下之一:

      • 'domcontentloaded' - 当触发 DOMContentLoaded 事件时,认为操作完成。
      • 'load' - 当触发 load 事件时,认为操作完成。
      • 'networkidle' - 不建议使用 - 当至少 500 毫秒内没有网络连接时,认为操作完成。不要将此方法用于测试,而应依赖 web assertion 来评估就绪状态。
      • 'commit' - 当接收到网络响应且文档开始加载时,认为操作完成。

返回值


title

在 v1.9 之前添加 frame.title

返回 page 标题。

用法

await frame.title();

返回值


url

在 v1.9 之前添加 frame.url

返回 frame 的 url。

用法

frame.url();

返回值


waitForFunction

在 v1.9 之前添加 frame.waitForFunction

pageFunction 返回一个 truthy 值时返回,并返回该值。

用法

frame.waitForFunction() 可用于观察视口大小变化

const { firefox } = require('playwright');  // Or 'chromium' or 'webkit'.

(async () => {
const browser = await firefox.launch();
const page = await browser.newPage();
const watchDog = page.mainFrame().waitForFunction('window.innerWidth < 100');
await page.setViewportSize({ width: 50, height: 50 });
await watchDog;
await browser.close();
})();

将参数传递给 frame.waitForFunction 函数的谓词

const selector = '.foo';
await frame.waitForFunction(selector => !!document.querySelector(selector), selector);

参数

返回值


waitForLoadState

在 v1.9 之前添加 frame.waitForLoadState

等待达到所需的加载状态。

当 frame 达到所需的加载状态时(默认为 load),此方法返回。调用此方法时,导航必须已经提交。如果当前文档已经达到所需状态,则立即解析。

注意

大多数情况下,不需要此方法,因为 Playwright 在执行每个操作之前会进行自动等待

用法

await frame.click('button'); // Click triggers navigation.
await frame.waitForLoadState(); // Waits for 'load' state by default.

参数

  • state "load" | "domcontentloaded" | "networkidle" (可选)#

    可选的加载状态,默认为 load。如果在加载当前文档时已达到该状态,则该方法立即解析。可以是以下之一:

    • 'load' - 等待 load 事件触发。
    • 'domcontentloaded' - 等待 DOMContentLoaded 事件触发。
    • 'networkidle' - 不建议使用 - 等待直到至少 500 毫秒内没有网络连接。不要将此方法用于测试,而应依赖 web assertion 来评估就绪状态。
  • options Object (可选)

返回值


waitForURL

新增于: v1.11 frame.waitForURL

等待 frame 导航到给定的 URL。

用法

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

参数

  • url string | RegExp | function(URL):boolean#

    一个 glob 模式、regex 模式或接收 URL 的谓词,用于在等待导航时匹配。请注意,如果参数是一个不含通配符的字符串,则该方法将等待导航到与该字符串完全相等的 URL。

  • options Object (可选)

    • timeout number (可选)#

      操作的最大时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置中的 navigationTimeout 选项更改,或者通过使用 browserContext.setDefaultNavigationTimeout()browserContext.setDefaultTimeout()page.setDefaultNavigationTimeout()page.setDefaultTimeout() 方法来更改。

    • waitUntil "load" | "domcontentloaded" | "networkidle" | "commit" (可选)#

      何时认为操作成功,默认为 load。事件可以是以下之一:

      • 'domcontentloaded' - 当触发 DOMContentLoaded 事件时,认为操作完成。
      • 'load' - 当触发 load 事件时,认为操作完成。
      • 'networkidle' - 不建议使用 - 当至少 500 毫秒内没有网络连接时,认为操作完成。不要将此方法用于测试,而应依赖 web assertion 来评估就绪状态。
      • 'commit' - 当接收到网络响应且文档开始加载时,认为操作完成。

返回值


Deprecated

$

新增于: v1.9 frame.$
不建议使用

请使用基于定位器的 frame.locator()。阅读有关 locators 的更多信息。

返回指向 frame 元素的 ElementHandle。

注意

不建议使用 ElementHandle,请使用 Locator 对象和 web-first assertion。

该方法在 frame 内查找与指定 selector 匹配的元素。如果没有元素匹配该 selector,则返回 null

用法

await frame.$(selector);
await frame.$(selector, options);

参数

  • selector string#

    要查询的 selector。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

返回值


$$

新增于: v1.9 frame.$$
不建议使用

请使用基于定位器的 frame.locator()。阅读有关 locators 的更多信息。

返回指向 frame 元素的 ElementHandles。

注意

不建议使用 ElementHandle,请使用 Locator 对象。

该方法在 frame 内查找与指定 selector 匹配的所有元素。如果没有元素匹配该 selector,则返回空数组。

用法

await frame.$$(selector);

参数

  • selector string#

    要查询的 selector。

返回值


$eval

新增于: v1.9 frame.$eval
不建议使用

此方法不等待元素通过 actionability 检查,因此可能导致测试不稳定。请使用 locator.evaluate()、其他 Locator 辅助方法或 web-first assertion。

返回 pageFunction 的返回值。

该方法在 frame 内查找与指定 selector 匹配的元素,并将其作为第一个参数传递给 pageFunction。如果没有元素匹配该 selector,则该方法抛出错误。

如果 pageFunction 返回一个 Promise,则 frame.$eval() 将等待该 promise 解析并返回其值。

用法

const searchValue = await frame.$eval('#search', el => el.value);
const preloadHref = await frame.$eval('link[rel=preload]', el => el.href);
const html = await frame.$eval('.main-container', (e, suffix) => e.outerHTML + suffix, 'hello');

参数

  • selector string#

    要查询的 selector。

  • pageFunction function(Element) | string#

    要在页面上下文中评估的函数。

  • arg EvaluationArgument (可选)#

    要传递给 pageFunction 的可选参数。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

返回值


$$eval

新增于: v1.9 frame.$$eval
不建议使用

在大多数情况下,locator.evaluateAll()、其他 Locator 辅助方法和 web-first assertion 能更好地完成任务。

返回 pageFunction 的返回值。

该方法在 frame 内查找与指定 selector 匹配的所有元素,并将匹配元素的数组作为第一个参数传递给 pageFunction

如果 pageFunction 返回一个 Promise,则 frame.$$eval() 将等待该 promise 解析并返回其值。

用法

const divsCounts = await frame.$$eval('div', (divs, min) => divs.length >= min, 10);

参数

返回值


check

在 v1.9 之前添加 frame.check
不建议使用

请使用基于定位器的 locator.check()。阅读有关 locators 的更多信息。

此方法通过执行以下步骤检查与 selector 匹配的元素:

  1. 查找与 selector 匹配的元素。如果不存在,则等待匹配元素附加到 DOM。
  2. 确保匹配的元素是复选框或单选输入。如果不是,此方法将抛出。如果元素已选中,此方法立即返回。
  3. 等待对匹配元素执行 actionability 检查,除非设置了 force 选项。如果在检查期间元素被分离,则整个操作将重试。
  4. 如果需要,将元素滚动到视图中。
  5. 使用 page.mouse 在元素的中心点击。
  6. 确保元素现在已选中。如果不是,此方法将抛出。

当所有步骤在指定的 timeout 期间未能完成时,此方法将抛出 TimeoutError。传递零超时禁用此功能。

用法

await frame.check(selector);
await frame.check(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • position Object (可选)新增于: v1.11#

      相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)新增于: v1.11#

      设置后,此方法仅执行可操作性检查并跳过操作。默认为 false。在不执行操作的情况下等待元素准备好执行操作时很有用。

返回值


click

在 v1.9 之前添加 frame.click
不建议使用

请使用基于定位器的 locator.click()。阅读有关 locators 的更多信息。

此方法通过执行以下步骤点击与 selector 匹配的元素:

  1. 查找与 selector 匹配的元素。如果不存在,则等待匹配元素附加到 DOM。
  2. 等待对匹配元素执行 actionability 检查,除非设置了 force 选项。如果在检查期间元素被分离,则整个操作将重试。
  3. 如果需要,将元素滚动到视图中。
  4. 使用 page.mouse 在元素的中心点击,或在指定的 position 点击。
  5. 等待已启动的导航成功或失败,除非设置了 noWaitAfter 选项。

当所有步骤在指定的 timeout 期间未能完成时,此方法将抛出 TimeoutError。传递零超时禁用此功能。

用法

await frame.click(selector);
await frame.click(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • button "left" | "right" | "middle" (可选)#

      默认为 left

    • clickCount number (可选)#

      默认为 1。参见 UIEvent.detail

    • delay number (可选)#

      mousedownmouseup 之间等待的时间(毫秒)。默认为 0。

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • modifiers Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (可选)#

      要按下的修饰键。确保操作期间只按下这些修饰键,然后恢复当前修饰键。如果未指定,则使用当前按下的修饰键。"ControlOrMeta" 在 Windows 和 Linux 上解析为 "Control",在 macOS 上解析为 "Meta"。

    • noWaitAfter boolean (可选)#

      已弃用

      将来此选项将默认为 true

      启动导航的操作会等待这些导航发生并且页面开始加载。您可以通过设置此 flag 来选择不等待。只有在特殊情况下(例如导航到不可访问的页面)才需要此选项。默认为 false

    • position Object (可选)#

      相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)新增于: v1.11#

      设置后,此方法只执行 actionability 检查并跳过操作。默认为 false。用于等待元素准备好执行操作,而不实际执行。请注意,无论 trial 如何,都将按下键盘 modifiers,以允许测试只有在按下这些键时才可见的元素。

返回值


dblclick

在 v1.9 之前添加 frame.dblclick
不建议使用

请改用基于定位符的 locator.dblclick()。阅读更多关于定位符的信息。

此方法通过执行以下步骤双击与selector匹配的元素:

  1. 查找与selector匹配的元素。如果没有找到,则等待直到匹配的元素附加到 DOM。
  2. 除非设置了force选项,否则等待对匹配的元素执行可操作性检查。如果在检查期间元素被分离,则整个操作将被重试。
  3. 如果需要,将元素滚动到视图中。
  4. 使用page.mouse在元素的中心或指定的position双击。如果dblclick()的第一次单击触发导航事件,则此方法将抛出异常。

如果在指定的timeout内未完成所有组合步骤,此方法将抛出TimeoutError。传入零超时时间将禁用此功能。

注意

frame.dblclick() 分发两个 click 事件和一个 dblclick 事件。

用法

await frame.dblclick(selector);
await frame.dblclick(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • button "left" | "right" | "middle" (可选)#

      默认为 left

    • delay number (可选)#

      mousedownmouseup 之间等待的时间(毫秒)。默认为 0。

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • modifiers Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (可选)#

      要按下的修饰键。确保操作期间只按下这些修饰键,然后恢复当前修饰键。如果未指定,则使用当前按下的修饰键。"ControlOrMeta" 在 Windows 和 Linux 上解析为 "Control",在 macOS 上解析为 "Meta"。

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • position Object (可选)#

      相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)新增于: v1.11#

      设置后,此方法只执行 actionability 检查并跳过操作。默认为 false。用于等待元素准备好执行操作,而不实际执行。请注意,无论 trial 如何,都将按下键盘 modifiers,以允许测试只有在按下这些键时才可见的元素。

返回值


dispatchEvent

在 v1.9 之前添加 frame.dispatchEvent
不建议使用

请改用基于定位符的 locator.dispatchEvent()。阅读更多关于定位符的信息。

以下代码片段在元素上分发 click 事件。无论元素可见性如何,click 事件都会被分发。这等同于调用 element.click()

用法

await frame.dispatchEvent('button#submit', 'click');

其内部实现是基于给定的type创建一个事件实例,使用eventInit属性初始化它,并在元素上分发该事件。事件默认是 composed(组合)、cancelable(可取消)和冒泡的。

由于eventInit是事件特定的,请参考事件文档了解初始属性列表

如果您希望将实时对象作为属性值传递给事件,您也可以指定 JSHandle 作为属性值

// Note you can only create DataTransfer in Chromium and Firefox
const dataTransfer = await frame.evaluateHandle(() => new DataTransfer());
await frame.dispatchEvent('#source', 'dragstart', { dataTransfer });

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • type string#

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

  • eventInit EvaluationArgument (可选)#

    可选的事件特定初始化属性。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


fill

在 v1.9 之前添加 frame.fill
不建议使用

请改用基于定位符的 locator.fill()。阅读更多关于定位符的信息。

此方法等待与selector匹配的元素出现,等待可操作性检查完成,然后聚焦元素,填充内容,并在填充后触发一个 input 事件。请注意,您可以传入一个空字符串来清空输入字段。

如果目标元素不是 <input><textarea>[contenteditable] 元素,此方法将抛出错误。但是,如果元素位于带有关联控件<label> 元素内部,则会填充该控件。

要发送精细的键盘事件,请使用locator.pressSequentially()

用法

await frame.fill(selector, value);
await frame.fill(selector, value, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • value string#

    要填充到 <input><textarea>[contenteditable] 元素的值。

  • options Object (可选)

    • force boolean (可选)在 v1.13 中添加#

      是否绕过可操作性检查。默认为 false

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


focus

在 v1.9 之前添加 frame.focus
不建议使用

请改用基于定位符的 locator.focus()。阅读更多关于定位符的信息。

此方法通过selector获取元素并聚焦它。如果没有与selector匹配的元素,该方法将等待直到匹配的元素出现在 DOM 中。

用法

await frame.focus(selector);
await frame.focus(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


getAttribute

在 v1.9 之前添加 frame.getAttribute
不建议使用

请改用基于定位符的 locator.getAttribute()。阅读更多关于定位符的信息。

返回元素的属性值。

用法

await frame.getAttribute(selector, name);
await frame.getAttribute(selector, name, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • name string#

    要获取值的属性名。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


hover

在 v1.9 之前添加 frame.hover
不建议使用

请改用基于定位符的 locator.hover()。阅读更多关于定位符的信息。

此方法通过执行以下步骤悬停在与selector匹配的元素上:

  1. 查找与selector匹配的元素。如果没有找到,则等待直到匹配的元素附加到 DOM。
  2. 除非设置了force选项,否则等待对匹配的元素执行可操作性检查。如果在检查期间元素被分离,则整个操作将被重试。
  3. 如果需要,将元素滚动到视图中。
  4. 使用page.mouse悬停在元素的中心或指定的position

如果在指定的timeout内未完成所有组合步骤,此方法将抛出TimeoutError。传入零超时时间将禁用此功能。

用法

await frame.hover(selector);
await frame.hover(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • modifiers Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (可选)#

      要按下的修饰键。确保操作期间只按下这些修饰键,然后恢复当前修饰键。如果未指定,则使用当前按下的修饰键。"ControlOrMeta" 在 Windows 和 Linux 上解析为 "Control",在 macOS 上解析为 "Meta"。

    • noWaitAfter boolean (可选)在 v1.28 中添加#

      已弃用

      此选项无效。

      此选项无效。

    • position Object (可选)#

      相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)新增于: v1.11#

      设置后,此方法只执行 actionability 检查并跳过操作。默认为 false。用于等待元素准备好执行操作,而不实际执行。请注意,无论 trial 如何,都将按下键盘 modifiers,以允许测试只有在按下这些键时才可见的元素。

返回值


innerHTML

在 v1.9 之前添加 frame.innerHTML
不建议使用

请改用基于定位符的 locator.innerHTML()。阅读更多关于定位符的信息。

返回 element.innerHTML

用法

await frame.innerHTML(selector);
await frame.innerHTML(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


innerText

在 v1.9 之前添加 frame.innerText
不建议使用

请改用基于定位符的 locator.innerText()。阅读更多关于定位符的信息。

返回 element.innerText

用法

await frame.innerText(selector);
await frame.innerText(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


inputValue

在 v1.13 中添加 frame.inputValue
不建议使用

请改用基于定位符的 locator.inputValue()。阅读更多关于定位符的信息。

对于选定的 <input><textarea><select> 元素,返回 input.value

对于非输入元素会抛出异常。但是,如果元素位于带有关联控件<label> 元素内部,则返回该控件的值。

用法

await frame.inputValue(selector);
await frame.inputValue(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


isChecked

在 v1.9 之前添加 frame.isChecked
不建议使用

请改用基于定位符的 locator.isChecked()。阅读更多关于定位符的信息。

返回元素是否被选中。如果元素不是复选框或单选输入框,则抛出异常。

用法

await frame.isChecked(selector);
await frame.isChecked(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


isDisabled

在 v1.9 之前添加 frame.isDisabled
不建议使用

请改用基于定位符的 locator.isDisabled()。阅读更多关于定位符的信息。

返回元素是否被禁用,与可启用状态相反。

用法

await frame.isDisabled(selector);
await frame.isDisabled(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


isEditable

在 v1.9 之前添加 frame.isEditable
不建议使用

请改用基于定位符的 locator.isEditable()。阅读更多关于定位符的信息。

返回元素是否可编辑

用法

await frame.isEditable(selector);
await frame.isEditable(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


isHidden

在 v1.9 之前添加 frame.isHidden
不建议使用

请改用基于定位符的 locator.isHidden()。阅读更多关于定位符的信息。

返回元素是否隐藏,与可见状态相反。与selector不匹配任何元素的,被视为隐藏。

用法

await frame.isHidden(selector);
await frame.isHidden(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      已弃用

      此选项将被忽略。 frame.isHidden() 不会等待元素变为隐藏状态,而是立即返回。

返回值


isVisible

在 v1.9 之前添加 frame.isVisible
不建议使用

请改用基于定位符的 locator.isVisible()。阅读更多关于定位符的信息。

返回元素是否可见。与selector不匹配任何元素的,被视为不可见。

用法

await frame.isVisible(selector);
await frame.isVisible(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      已弃用

      此选项将被忽略。 frame.isVisible() 不会等待元素变为可见状态,而是立即返回。

返回值


press

在 v1.9 之前添加 frame.press
不建议使用

请改用基于定位符的 locator.press()。阅读更多关于定位符的信息。

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 等。

还支持以下修饰快捷键:ShiftControlAltMetaShiftLeftControlOrMeta。在 Windows 和 Linux 上,ControlOrMeta 解析为 Control;在 macOS 上,解析为 Meta

按住 Shift 将输入与key对应的大写文本。

如果key是单个字符,则区分大小写,因此值 aA 将分别生成不同的文本。

还支持诸如 key: "Control+o"key: "Control++key: "Control+Shift+T" 等快捷方式。当指定修饰符时,修饰符被按下并保持住,同时后续的键被按下。

用法

await frame.press(selector, key);
await frame.press(selector, key, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • key string#

    要按下的键名称或要生成的字符,例如 ArrowLefta

  • options Object (可选)

    • delay number (可选)#

      keydownkeyup 之间等待的时间(毫秒)。默认为 0。

    • noWaitAfter boolean (可选)#

      已弃用

      将来此选项将默认为 true

      启动导航的操作会等待这些导航发生并且页面开始加载。您可以通过设置此 flag 来选择不等待。只有在特殊情况下(例如导航到不可访问的页面)才需要此选项。默认为 false

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


selectOption

在 v1.9 之前添加 frame.selectOption
不建议使用

请改用基于定位符的 locator.selectOption()。阅读更多关于定位符的信息。

此方法等待与selector匹配的元素出现,等待可操作性检查完成,等待所有指定的选项出现在 <select> 元素中,然后选择这些选项。

如果目标元素不是 <select> 元素,此方法将抛出错误。但是,如果元素位于带有关联控件<label> 元素内部,则会使用该控件代替。

返回已成功选定的选项值数组。

所有提供的选项被选定后,会触发一个 changeinput 事件。

用法

// Single selection matching the value or label
frame.selectOption('select#colors', 'blue');

// single selection matching both the value and the label
frame.selectOption('select#colors', { label: 'Blue' });

// multiple selection
frame.selectOption('select#colors', 'red', 'green', 'blue');

参数

  • selector string#

    要查询的 selector。

  • values null | string | ElementHandle | Array<string> | Object | Array<ElementHandle> | Array<Object>#

    • value string (可选)

      根据 option.value 匹配。可选。

    • label string (可选)

      根据 option.label 匹配。可选。

    • index number (可选)

      根据索引匹配。可选。

    要选择的选项。如果 <select> 具有 multiple 属性,则选择所有匹配的选项;否则,只选择第一个与传入选项之一匹配的选项。字符串值匹配 valuelabel。如果所有指定的属性都匹配,则认为选项匹配。

  • options Object (可选)

    • force boolean (可选)在 v1.13 中添加#

      是否绕过可操作性检查。默认为 false

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


setChecked

Added in: v1.15 frame.setChecked
不建议使用

改为使用基于定位符的 locator.setChecked()。了解更多关于定位符的信息。

此方法通过执行以下步骤来选中或取消选中与 selector 匹配的元素:

  1. 查找与 selector 匹配的元素。如果没有找到,则等待直到匹配的元素附加到 DOM。
  2. 确保匹配的元素是复选框或单选输入框。如果不是,此方法将抛出错误。
  3. 如果元素已经处于正确的选中状态,此方法将立即返回。
  4. 等待对匹配元素进行可操作性检查,除非设置了 force 选项。如果在检查过程中元素被分离,整个操作将重试。
  5. 如果需要,将元素滚动到视图中。
  6. 使用 page.mouse 在元素的中心点击。
  7. 确保元素现在已被选中或取消选中。如果不是,此方法将抛出错误。

如果所有步骤在指定的 timeout 内未能完成,此方法将抛出 TimeoutError。传递零超时将禁用此行为。

用法

await frame.setChecked(selector, checked);
await frame.setChecked(selector, checked, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • checked boolean#

    是否选中或取消选中复选框。

  • options Object (可选)

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • position Object (可选)#

      相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)#

      设置后,此方法仅执行可操作性检查并跳过操作。默认为 false。在不执行操作的情况下等待元素准备好执行操作时很有用。

返回值


setInputFiles

在 v1.9 之前添加 frame.setInputFiles
不建议使用

改为使用基于定位符的 locator.setInputFiles()。了解更多关于定位符的信息。

将文件输入框的值设置为这些文件路径或文件。如果某些 filePaths 是相对路径,则会相对于当前工作目录解析。对于空数组,清除选定的文件。

此方法期望 selector 指向一个 input 元素。但是,如果元素位于具有关联的 control<label> 元素内部,则会改为定位到该 control。

用法

await frame.setInputFiles(selector, files);
await frame.setInputFiles(selector, files, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • files string | Array<string> | Object | Array<Object>#

  • options Object (可选)

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


tap

在 v1.9 之前添加 frame.tap
不建议使用

改为使用基于定位符的 locator.tap()。了解更多关于定位符的信息。

此方法通过执行以下步骤来轻触(tap)与 selector 匹配的元素:

  1. 查找与 selector 匹配的元素。如果没有找到,则等待直到匹配的元素附加到 DOM。
  2. 等待对匹配元素进行可操作性检查,除非设置了 force 选项。如果在检查过程中元素被分离,整个操作将重试。
  3. 如果需要,将元素滚动到视图中。
  4. 使用 page.touchscreen 来轻触元素的中心,或指定的 position

如果所有步骤在指定的 timeout 内未能完成,此方法将抛出 TimeoutError。传递零超时将禁用此行为。

注意

frame.tap() 要求浏览器上下文的 hasTouch 选项设置为 true。

用法

await frame.tap(selector);
await frame.tap(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • modifiers Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"> (可选)#

      要按下的修饰键。确保操作期间只按下这些修饰键,然后恢复当前修饰键。如果未指定,则使用当前按下的修饰键。"ControlOrMeta" 在 Windows 和 Linux 上解析为 "Control",在 macOS 上解析为 "Meta"。

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • position Object (可选)#

      相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)新增于: v1.11#

      设置后,此方法只执行 actionability 检查并跳过操作。默认为 false。用于等待元素准备好执行操作,而不实际执行。请注意,无论 trial 如何,都将按下键盘 modifiers,以允许测试只有在按下这些键时才可见的元素。

返回值


textContent

在 v1.9 之前添加 frame.textContent
不建议使用

改为使用基于定位符的 locator.textContent()。了解更多关于定位符的信息。

返回 element.textContent

用法

await frame.textContent(selector);
await frame.textContent(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


type

在 v1.9 之前添加 frame.type
已弃用

在大多数情况下,应改为使用 locator.fill()。只有当页面有特殊的键盘处理时,你才需要逐个按键 - 在这种情况下使用 locator.pressSequentially()

对文本中的每个字符发送一个 keydownkeypress/inputkeyup 事件。frame.type 可用于发送细粒度的键盘事件。要在表单字段中填充值,请使用 frame.fill()

要按下特殊键,例如 ControlArrowDown,请使用 keyboard.press()

用法

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • text string#

    要输入到焦点元素中的文本。

  • options Object (可选)

    • delay number (可选)#

      按键之间的等待时间(毫秒)。默认为 0。

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


uncheck

在 v1.9 之前添加 frame.uncheck
不建议使用

改为使用基于定位符的 locator.uncheck()。了解更多关于定位符的信息。

此方法通过执行以下步骤来取消选中与 selector 匹配的元素:

  1. 查找与 selector 匹配的元素。如果没有找到,则等待直到匹配的元素附加到 DOM。
  2. 确保匹配的元素是复选框或单选输入框。如果不是,此方法将抛出错误。如果元素已经处于未选中状态,此方法将立即返回。
  3. 等待对匹配元素进行可操作性检查,除非设置了 force 选项。如果在检查过程中元素被分离,整个操作将重试。
  4. 如果需要,将元素滚动到视图中。
  5. 使用 page.mouse 在元素的中心点击。
  6. 确保元素现在已被取消选中。如果不是,此方法将抛出错误。

如果所有步骤在指定的 timeout 内未能完成,此方法将抛出 TimeoutError。传递零超时将禁用此行为。

用法

await frame.uncheck(selector);
await frame.uncheck(selector, options);

参数

  • selector string#

    用于搜索元素的 selector。如果存在多个符合 selector 的元素,将使用第一个。

  • options Object (可选)

    • force boolean (可选)#

      是否绕过可操作性检查。默认为 false

    • noWaitAfter boolean (可选)#

      已弃用

      此选项无效。

      此选项无效。

    • position Object (可选)新增于: v1.11#

      相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。

    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

    • trial boolean (可选)新增于: v1.11#

      设置后,此方法仅执行可操作性检查并跳过操作。默认为 false。在不执行操作的情况下等待元素准备好执行操作时很有用。

返回值


waitForNavigation

在 v1.9 之前添加 frame.waitForNavigation
已弃用

此方法本身存在竞态条件,请改为使用 frame.waitForURL()

等待 frame 导航并返回主资源响应。在多次重定向的情况下,导航将以最后一次重定向的响应解决(resolve)。在导航到不同锚点或由于 History API 使用而导致的导航的情况下,导航将以 null 解决(resolve)。

用法

此方法等待 frame 导航到新的 URL。当你运行的代码会间接导致 frame 导航时,此方法很有用。请考虑此示例:

// 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 (可选)
    • timeout number (可选)#

      操作的最大时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置中的 navigationTimeout 选项更改,或者通过使用 browserContext.setDefaultNavigationTimeout()browserContext.setDefaultTimeout()page.setDefaultNavigationTimeout()page.setDefaultTimeout() 方法来更改。

    • url string | RegExp | function(URL):boolean (可选)#

      一个 glob 模式、regex 模式或接收 URL 的谓词,用于在等待导航时匹配。请注意,如果参数是一个不含通配符的字符串,则该方法将等待导航到与该字符串完全相等的 URL。

    • waitUntil "load" | "domcontentloaded" | "networkidle" | "commit" (可选)#

      何时认为操作成功,默认为 load。事件可以是以下之一:

      • 'domcontentloaded' - 当触发 DOMContentLoaded 事件时,认为操作完成。
      • 'load' - 当触发 load 事件时,认为操作完成。
      • 'networkidle' - 不建议使用 - 当至少 500 毫秒内没有网络连接时,认为操作完成。不要将此方法用于测试,而应依赖 web assertion 来评估就绪状态。
      • 'commit' - 当接收到网络响应且文档开始加载时,认为操作完成。

返回值


waitForSelector

在 v1.9 之前添加 frame.waitForSelector
不建议使用

改为使用断言可见性的 Web 断言 或 基于定位符的 locator.waitFor()。了解更多关于定位符的信息。

selector 指定的元素满足 state 选项时返回。如果等待 hiddendetached,则返回 null

注意

Playwright 在执行操作之前会自动等待元素准备就绪。使用 Locator 对象和 Web 优先断言 使代码无需 waitForSelector

等待 selector 满足 state 选项(即从 DOM 中出现/消失,或变为可见/隐藏)。如果在调用方法时 selector 已经满足条件,方法将立即返回。如果 selectortimeout 毫秒内不满足条件,函数将抛出错误。

用法

此方法在跨导航时也有效

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.mainFrame().waitForSelector('img');
console.log('Loaded image: ' + await element.getAttribute('src'));
}
await browser.close();
})();

参数

  • selector string#

    要查询的 selector。

  • options Object (可选)

    • state "attached" | "detached" | "visible" | "hidden" (可选)#

      默认为 'visible'。可以是以下之一:

      • 'attached' - 等待元素存在于 DOM 中。
      • 'detached' - 等待元素不存在于 DOM 中。
      • 'visible' - 等待元素具有非空边界框且没有 visibility:hidden 样式。请注意,没有任何内容或具有 display:none 样式的元素的边界框为空,并且不被认为是可见的。
      • 'hidden' - 等待元素从 DOM 中分离,或具有空边界框或 visibility:hidden 样式。这与 'visible' 选项相反。
    • strict boolean (可选)在 v1.14 中添加#

      当为 true 时,调用要求 selector 解析为单个元素。如果给定的 selector 解析为多个元素,调用将抛出异常。

    • timeout number (可选)#

      最大等待时间(毫秒)。默认为 0 - 无超时。默认值可以通过配置文件中的 actionTimeout 选项更改,或使用 browserContext.setDefaultTimeout()page.setDefaultTimeout() 方法更改。

返回值


waitForTimeout

在 v1.9 之前添加 frame.waitForTimeout
不建议使用

在生产环境中切勿等待超时。等待时间的测试本身不稳定。使用 Locator 操作和会自动等待的 Web 断言。

等待指定的 timeout 毫秒。

注意 frame.waitForTimeout() 仅应用于调试。在生产中使用计时器的测试会不稳定。请改用网络事件、选择器变为可见等信号。

用法

await frame.waitForTimeout(timeout);

参数

  • timeout number#

    要等待的超时时间

返回值