xpath 函数 text() 有困难

Having difficulty with xpath function text()

我写了一个非常简单的测试,登录后导航到一个页面,并在页面加载后单击一个元素

在我的 selenium 项目中,我使用 xpath text() 函数来帮助我在应用程序自动化中查找特定图标

我想知道如何与剧作家一起做到这一点

这是我的测试,它使用了剧作家文档中的页面对象模态

test('Navigate using POM', async ({ page }) => {
  await page.goto('/db');
  const mainView = new MainView(page);
  mainView.selectSampleInSideNav();
});

问题是我需要单击的图标是由 HTML 中的特定文本定义的,但是该确切文本用于另一个元素,所以我不能写类似的东西(它也有白色html 中还有空格)

await page.click('text= Sample ');

有没有办法在playwright中写这个xpath表达式?

"//mat-icon[text()=' Sample ']"

我试过这样的事情:

const sideNavSample =  page.$('mat-icon >> text=" Sample "');

但是当我尝试与 sideNavSample

交互时,我收到未定义的无法读取 属性 of 'click'
await this.sideNavSample.click();

任何帮助都会很棒,因为 Xpath 是我可以为这个特定图标定义唯一标识符的唯一方法。 如果这是一个愚蠢的问题,我们深表歉意

@archon 谢谢你的建议,但似乎当我完全按照你写的方式写出点击动作时它工作得很好,但是当我将它存储在一个变量中时它失败了。 我无法解释为什么但是 这有效 page.click('//mat-icon[contains(text(), "Sample")]')

这不是 this.sampleOptionInSideNav = page.locator('//mat-icon[contains(text(), " Sample ")]'); await this.reviewOptionInSideNav.click();

text()='x' 模式查找完全匹配的文本。你可以试试 page.click('//mat-icon[contains(text(), "Sample")]').

对于严格匹配,你应该使用text-is,对于选择具有严格文本规则的mat-icon,这个await page.locator('mat-icon :text-is(" Sample ")')可以工作。