playwright中定位元素的方法
1. page.$(selector)
该方法接受一个 CSS 选择器作为参数,并返回与选择器匹配的第一个元素。如果不存在匹配的元素,则返回 null
。该方法常常用于选取指定 ID 或 class 的元素。
const button = await page.$('#myButton'); // 通过 ID 选取按钮元素
const input = await page.$('.my-input'); // 通过 class 选取输入框元素
const link = await page.$('a[href="http://www.example.com"]'); // 选取指定链接元素
注意,该方法会根据 DOM 树中元素出现的顺序进行匹配,因此如果选择器可以匹配到多个元素,只会返回第一个匹配的元素。
通常情况下,page.$
方法可以和其他方法一起使用,以实现更复杂的元素操作。
2. page.$$(selector)
该方法接受一个 CSS 选择器作为参数,并返回一个包含所有与选择器匹配的元素的数组。如果不存在匹配的元素,则返回空数组。
const buttons = await page.$$('button'); // 选取所有按钮元素
const texts = await page.$$('[class*="text"]'); // 选取所有包含 "text" 的 class 的元素
注意,该方法返回的数组中的元素顺序与它们在 DOM 树中出现的顺序相同。
3. page.locator(selector)
该方法创建一个 Locator 对象,可以用于更复杂的元素定位操作。该方法接受一个 CSS 选择器或 XPath 表达式作为参数,并返回一个 Locator 对象。
以下是使用 Locator 对象的示例:
const button = page.locator('#myButton');
const text = page.locator('div[class="my-div"] > span');
const link = page.locator('a').withAttribute('href', 'http://www.example.com');
由于 Locator 对象只是创建定位器的语法糖,所以它支持所有定位元素的方法和操作。
4. page.waitForSelector(selector[, options])
该方法等待指定的 CSS 选择器匹配的元素出现在页面上。该方法接受一个 CSS 选择器作为参数,以及可选的 options
参数,返回一个 Promise,该 Promise 会在元素出现或者超时之后 resolve。
以下是使用 page.waitForSelector
方法的示例:
await page.waitForSelector('#myButton'); // 等待 ID 为 myButton 的按钮出现
await page.waitForSelector('.my-div > span', { visible: true }); // 等待 .my-div 中的可见 span 元素出现
options
参数可以包含以下项:
visible
:一个布尔值,指示元素是否必须可见。默认为false
。hidden
:一个布尔值,指示元素是否必须隐藏。默认为false
。timeout
:等待超时时间(以毫秒为单位)。默认为 30 秒。
该方法适用于需要等待特定元素出现的场景,如在页面刷新后等待加载完成的元素。
5. page.waitForFunction(pageFunction[, options[, ...args]])
该方法使用指定的匿名函数或字符串表达式进行定位,并返回一个 Promise,该 Promise 在函数返回 true 或者超时时 resolve。
以下是使用 page.waitForFunction
方法的示例:
await page.waitForFunction(() => document.querySelector('#myButton').disabled === false); // 等待按钮变成可用状态
await page.waitForFunction('document.querySelector(".my-div span").textContent === "Hello World!"'); // 等待 span 元素的内容被更新
options
参数可以包含以下项:
polling
:检查函数的间隔时间(以毫秒为单位)。默认为 1 秒。timeout
:等待超时时间(以毫秒为单位)。默认为 30 秒。
该方法适用于需要等待复杂或动态生成的元素出现的场景,如等待 AJAX 请求完成后显示的元素。
总结
在 Playwright 中,有多种方式可以选择和定位元素,每种方式都可以使用 CSS 选择器或 XPath 表达式进行选择,使开发者可以根据自己的需求和场景进行选择。