提问人:Nishanth Balaji 提问时间:11/14/2023 最后编辑:ggorlenNishanth Balaji 更新时间:11/18/2023 访问量:75
剧作家 - 通过具有动态元素的角色定位器获取
Playwright - Get by Role locator with Dynamic elements
问:
我有一个带有定位器的元素。现在 (2) 是动态的,并且根据条目的数量而变化。如何编写框架以仅检查 Hold 并忽略最后 4 个字符。getByRole('cell', {name : 'Hold (10)})
尝试过,但我认为这是不正确的。任何帮助都是值得赞赏的。我的页面中有多个元素以动态条目为后缀,因此这几乎对它们都有帮助。*
答:
1赞
ggorlen
11/18/2023
#1
从评论中,听起来你有一个表格单元格:
const playwright = require("playwright"); // ^1.39.0
const html = `<!DOCTYPE html><html><body>
<table>
<tr>
<td> Hold (10) </td>
</tr>
</table>
</body></html>`;
let browser;
(async () => {
browser = await playwright.firefox.launch();
const page = await browser.newPage();
await page.setContent(html);
const cell = page.getByRole("cell", {name: /\bhold\b/i});
console.log(await cell.textContent()); // => Hold (10)
})()
.catch(err => console.error(err))
.finally(() => browser?.close());
正则表达式可以是您想要的任何内容。 不区分大小写,使用单词边界。您可以使用 来确保名称以 开头,或者非常精确,例如 。/\bhold\b/i
/^Hold/
Hold
/^Hold \(\d+\)$/
作为断言,我会使用:
import {expect, test} from "@playwright/test";
const html = `<same as above>`;
test("cell has Hold text", async ({page}) => {
await page.setContent(html); // or goto in a real test
await expect(page.getByRole("cell")).toHaveText(/^ *Hold\b/);
});
正则表达式的行为略有不同,因此请务必彻底测试快乐和悲伤的路径,以避免误报。.toHaveText
评论
1赞
Vishal Aggarwal
11/18/2023
这是一个很好的详细答案。谢谢!
评论
/Hold/
Hold (10)
name=