验证带有包含空格的部分标签的按钮名称

问题描述 投票:0回答:1

我正在尝试单击带有以下行的按钮:

await page.getByRole('button', { name: '3 Employees' }).click();

我的问题是按钮的名称会根据员工数量而变化,因此如果该值被硬编码,它将失败。我会使用仅包含“Employees”一词的定位器方法,但它将与具有相同定位器和相同“Employees”文本的另一个按钮匹配,并且我也想避免使用 nth() 方法。

我真正想做的是使用我的代码行,但只搜索“员工”部分,这意味着我想包含 3 和“员工”之间的空格。或者在这种情况下是否有某种方法可以将 3 验证为任何类型的随机值,例如“{randomvalue}Employees”?

typescript automation playwright matcher
1个回答
0
投票

使用正则表达式应该适用于这个特定的按钮,假设页面上没有其他

/^\d+ Employees$/
元素:

import {expect, test} from "@playwright/test"; // ^1.42.1

const html = `<!DOCTYPE html><html><body>
<button></button>
<script>
setTimeout(() => {
  document.querySelector("button").textContent =
    ~~(Math.random() * 100) + " Employees";
}, 3000);
</script>
</body></html>`;

test("{n} Employees button can be clicked", async ({page}) => {
  await page.setContent(html);
  await page.getByRole("button", {name: /^\d+ Employees$/}).click();
});

注意

^
$
锚点,使其完全匹配(前导/尾随空格除外)。如果您想使用子字符串匹配,请省略这些锚点。

如果有其他元素与此匹配,那么您可能需要考虑父链来隔离特定按钮,而不是使用第一个/最后一个/第n个按钮,这是您正确想要避免的。

© www.soinside.com 2019 - 2024. All rights reserved.