使用赛普拉斯,如何测试不存在的元素?

JD.*_*JD. 1 testing cypress

测试现有元素就像

cy.get('.hello');
Run Code Online (Sandbox Code Playgroud)

如何断言该元素不存在?

小智 6

你可以轻松地走

cy
  .get('.hello')
  .should('not.exist');
Run Code Online (Sandbox Code Playgroud)

对我来说还可以。但是,您需要注意执行此命令的时间。例如,如果在页面加载后立即拥有此命令,则它可能会给您带来误报,因为该元素尚未加载,因此在DOM中不存在。

对我来说,最佳实践是对cy.get我确定已加载的内容或.should('be.visible')在其他元素不存在时进行其他操作。

例如,如果您有一个接收输入的模态,然后在提交输入后消失,那么我将断言该模态下的页面的可见性,如下所示:

cy
  .get('.page-body');

cy
  .get('.modal-trigger')
  .click();

cy
  .get('.modal')
  .should('be.visible')
  .type('text')
  .get('.submit')
  .click();

cy
  .get('.page-body')
  .should('be.visible');

cy
  .get('.modal')
  .should('not.exist');
Run Code Online (Sandbox Code Playgroud)

由于赛普拉斯会检查某个元素是否未被其他元素覆盖,因此cy.get('.page-body')应该为您提供有关应用程序当前情况的很好的参考。额外检查cy.get('.modal').should('not.exist')只是确保一切按计划进行的另一种方法。有时候这很有意义,有时候这太过分了。