Automated tests .should(';exist';)断言在Cypress上是否多余? 让我们考虑一个情况,我需要断言一个元素是否存在。在cypress中有两种可能的方法: 1) cy.get('button').contains('Save') 2) cy.get('button').contains('Save').should('exist')

Automated tests .should(';exist';)断言在Cypress上是否多余? 让我们考虑一个情况,我需要断言一个元素是否存在。在cypress中有两种可能的方法: 1) cy.get('button').contains('Save') 2) cy.get('button').contains('Save').should('exist'),automated-tests,cypress,assertion,Automated Tests,Cypress,Assertion,在这两种情况下,如果“保存”按钮不存在,测试将失败 除了更好的代码可读性/可维护性之外,我应该在cypress测试中添加.should('exist')的原因是什么?对于断言元素是否存在的用例,它们确实是多余的 .contains()生成一个DOM元素,并根据,.should生成与输入相同的元素。当.should生成不同的元素时(正如您在文档中看到的),会出现一些例外情况,但如果使用should('exist'),它们实际上是多余的 正如您所提到的,我个人也更喜欢添加should,以提高可读性。

在这两种情况下,如果“保存”按钮不存在,测试将失败


除了更好的代码可读性/可维护性之外,我应该在cypress测试中添加.should('exist')的原因是什么?

对于断言元素是否存在的用例,它们确实是多余的

.contains()
生成一个DOM元素,并根据,
.should
生成与输入相同的元素。当.should生成不同的元素时(正如您在文档中看到的),会出现一些例外情况,但如果使用
should('exist')
,它们实际上是多余的

正如您所提到的,我个人也更喜欢添加
should
,以提高可读性。事实上,我更喜欢
.should('be.visible')
,因为下面的场景-当一个元素被隐藏或者因为一些CSS问题被推出屏幕时,从用户的角度来看它并不存在。但是

cy.get('button')。包含('Save')
-通过测试

cy.get('button')。包含('Save')。应该('exist')
-通过测试


cy.get('button')。包含('Save')。应该('be.visible')
-测试失败

实际上,在v4.0发布(并合并)之前,如果您自己链接任何否定断言,您需要链接
应该('exist')
断言。这是因为默认的
应该('exist')
断言

肯定断言不需要,因为它们不会传递不存在的元素

也看到

下面,元素
。第一项
不存在,但断言通过:

description('test',()=>{
它('test',()=>{
cy.get('.first item').should('not.have.class','is selected');
});
});

但是我们真的想使用
scrollIntoView
查看浏览器可见视口之外的元素吗?