我如何断言某个元素不在剧作家的页面上?

Pat*_*nny 38 typescript playwright

我正在测试一个包含徽标的网站,并且我想确保该徽标不会出现在某些页面上。

如何断言某个元素不存在?我检查了剧作家断言文档,但它只有检查确实存在的事情的示例。

async assertNoLog(): Promise<boolean> {
  await this.page.locator('div#page-id'); // now the page has loaded
  // How do I check if logo is on page without throwing an error if it is missing
}
Run Code Online (Sandbox Code Playgroud)

我不知道在这里写什么来断言页面上的任何地方都找不到我的元素。

Eri*_*vic 27

我想知道某个元素不在屏幕上,但我也想等到它消失,这是执行此操作的方法:

await expect(locator).toHaveCount(0);
Run Code Online (Sandbox Code Playgroud)

在这里找到


eme*_*ery 23

要立即检查它而不自动等待,您可以使用count()并断言它返回 0。

expect(await page.locator('.notexists').count()).toEqual(0);
Run Code Online (Sandbox Code Playgroud)

如果您希望 Playwright 等待计数变为 0(如 Web 优先断言所建议的那样),那么您应该等待 Expect 并使用toHaveCount()

await expect(page.locator('.notexists')).toHaveCount(0);
Run Code Online (Sandbox Code Playgroud)

https://playwright.dev/docs/api/class-locator#locator-count https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-count

  • 好想法!我现在已经成功设置了 [`no-floating-promises`](https://typescript-eslint.io/rules/no-floating-promises/) ESLint 规则。 (2认同)
  • [Erik 的回答](/sf/answers/5194632411/) 现在是首选;遵循剧作家关于使用 [网络优先断言](https://playwright.dev/docs/best-practices#use-web-first-assertions) 的指南。 (2认同)
  • `await` 应该在期望之前遵循网络优先断言的剧作家指南 https://playwright.dev/docs/best-practices#use-web-first-assertions。所以它应该是 `await Expect(page.locator('.notexists')).toEqual(0);` 或 `await Expect(page.locator('.notexists')).toHaveCount(0);` 这样的东西。这并不完全正确,但在某种程度上“await”应该在“expect”之前。 (2认同)

小智 11

https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-attached

待附加

添加于:v1.33

确保 Locator 指向附加的 DOM 节点。

有了这个,现在我们可以这样做:

expect(locator).not.toBeAttached() 
Run Code Online (Sandbox Code Playgroud)