如何使用剧作家检查网页上的某些文本?

Ale*_*lex 8 typescript playwright

我想检查文本是否QUEUED出现在网站上。我尝试了以下命令

await expect(page1).toContainText('[QUEUED]');
await expect(page1.locator('span')).toContainText('[QUEUED]');
Run Code Online (Sandbox Code Playgroud)

但在第一个例子中,它说需要一个“定位器”,而对于第二个例子,它说

Error: strict mode violation: "span" resolved to 108 elements:
Run Code Online (Sandbox Code Playgroud)

我对确切的元素不感兴趣,我只想检查文本是否QUEUED在页面上至少出现一次。

我还尝试选择 HTML DOM 中看起来像的确切元素

<span data-v-729cd282="" class="">QUEUED</span>
Run Code Online (Sandbox Code Playgroud)

使用表达式

await expect(page1.locator('(//span[@data-v-729cd282])[6]')).toHaveText('[QUEUED]');
Run Code Online (Sandbox Code Playgroud)

但这里我也得到一个错误

waiting for selector "(//span[@data-v-729cd282])[6]"
Run Code Online (Sandbox Code Playgroud)

那么如何正确地做到这一点呢?

rob*_*aar 3

在第一种情况下,您需要一个定位器,在第二种情况下,您的定位器发现了太多元素。

您确实需要对确切的元素感兴趣(即使它可以是页面上的任何元素),您将如何找到它们并断言文本是否可见?
您应该使用文本作为定位器在页面上找到一个元素,并检查它是否存在,从而知道文本在页面上,例如

更新

评论是正确的,我发现有更正确的方法来实现这一点,你应该按照以下方式操作 - 上述推理仍然存在。

const element = await expect(page.getByText('QUEUED')).toBeVisible();
Run Code Online (Sandbox Code Playgroud)

因此,只要您尝试验证其在页面上的存在,就应该关心查找元素,无论它是什么元素。

  • 在我的机器上,“element”是一个“Locator@internal:text="QUEUED"i”,因此它永远不会“未定义”——它总是正确的。 (3认同)