Cypress:测试元素是否不存在

IT技术 javascript cypress
2021-03-15 00:50:12

我希望能够单击复选框并测试某个元素是否不再位于 Cypress 的 DOM 中。有人可以建议你怎么做吗?

//This is the Test when the check box is clicked and the element is there
cy.get('[type="checkbox"]').click();
cy.get('.check-box-sub-text').contains('Some text in this div.')

我想做与上述测试相反的事情。因此,当我再次单击它时,该类的 div 不应在 DOM 中。

6个回答

好吧,这似乎有效,所以它告诉我我还有更多关于 .should() 的知识要了解

cy.get('.check-box-sub-text').should('not.exist');
这适用于它被删除的情况。但如果您希望它永远不存在... docs.cypress.io/guides/references/assertions.html#Existence它将重试,直到它消失。这对于大多数人会寻找的标题问题并不真正有效。
2021-04-25 00:50:12
@Maccurt,@YingYang :实际上我发现了错误,这有点傻:s应该是多余的:.should('not.exists')->.should('not.exist')
2021-05-05 00:50:12
抱歉,我刚刚看到您的评论,您的选择器是否正在处理数据属性?你能在评论中粘贴你的html吗?那个选择器在我看来很奇怪!
2021-05-08 00:50:12
@volk 我认为cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')应该有效。
2021-05-17 00:50:12
你好!我正在使用几乎相同的代码:cy.get(data-e2e="create-entity-field-relation-contact-name").should('not.exists')但它失败了get,然后尝试调用should几次,每次都失败......知道我做错了什么吗?提前致谢
2021-05-21 00:50:12

您还可以搜索不应该存在的文本:

cy.contains('test_invite_member@gmail.com').should('not.exist')

Cypress 中的结果如下: 0 matched elements

在此处输入图片说明

文档:https : //docs.cypress.io/guides/references/assertions.html#Existence

为更新欢呼。npx cypress --version—— Cypress package version: 3.5.0 Cypress binary version: 3.5.0
2021-04-21 00:50:12
在 Cypress 4 中对我不起作用。它似乎适用于已删除的元素,而不是根本不应该存在的元素(例如,在测试服务器端渲染时)
2021-04-22 00:50:12
这现在对我有用,我实际上不确定我错过了什么。谢谢你的帮助
2021-04-23 00:50:12
这对我不起作用,contains超时并导致测试失败CypressError: Timed out retrying: Expected to find content: 'Im not supposed to be here' but never did.
2021-04-27 00:50:12
我在答案中添加了更多解释和示例。删除用户后test_invite_member@gmail.com,我检查电子邮件是否存在于某处。结果是0 element你用的是什么版本的赛普拉斯?
2021-05-08 00:50:12

赛普拉斯 6.x+ 迁移

使用.should('not.exist')断言一个元素没有在DOM存在。


千万不能使用not.visible断言。它会错误地传入 < 6.0,但现在正确地失败:

// for element that was removed from the DOM
// assertions below pass in < 6.0, but properly fail in 6.0+
.should('not.be.visible')
.should('not.contain', 'Text')

此处的迁移文档:迁移到 Cypress-6-0

我们可以检索像真或假这样的布尔标志吗
2021-04-30 00:50:12
不应存在​​在 cypress 8 中不起作用。如果 cypress 从未找到该元素,则它会失败。相反,不可见正在工作。
2021-04-30 00:50:12
这意味着 not.exist/exist 检查 DOM 中的存在?和可见/不可见检查 UI 中的存在
2021-05-06 00:50:12
我会调查这个并升级到 6
2021-05-13 00:50:12

赛普拉斯 6.x+ 迁移

根据关于 Existence 的 cypress docs

非常流行的尝试有点天真,直到它不起作用,然后你将不得不再次重写它......一次又一次......

// retry until loading spinner no longer exists
cy.get('#loading').should('not.exist')

这对于大多数人会寻找的标题问题并不真正有效。

这适用于它被删除的情况。但如果你希望它永远不存在......它会重试,直到它消失。

但是,如果您想测试该元素在我们的案例中从不存在。

是的哈哈。这就是您真正想要的,除非您想改天再次头痛。

// Goes through all the like elements, and says this object doesn't exist ever
cy.get(`img[src]`)
  .then(($imageSection) => {
    $imageSection.map((x, i) => { expect($imageSection[x].getAttribute('src')).to.not.equal(`${Cypress.config().baseUrl}/assets/images/imageName.jpg`) });
})
2021-04-30 00:50:12
cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exist');

可能会导致一些错误的结果,因为一些错误消息被隐藏了。使用可能更好

.should('not.visible');

在这种情况下。

不要使用should('not.visible')断言。它会错误地传入 Cypress < 6.0,但现在对于从 DOM 中删除的元素会正确地失败。使用should('not.exist'). 请参阅下面的答案:stackoverflow.com/questions/48915773/...
2021-04-22 00:50:12
如果它不存在于 DOM 中将 not.visible 工作吗?我会试试的。谢谢!!!!
2021-05-06 00:50:12
如果它不存在于 dom 中,则 not.be.visible 将起作用。如果您检查 cypress 日志,您将得到类似预期未定义的内容,并且断言将通过。所以在某种程度上不可见实际上覆盖不存在并且在一个断言中不可见
2021-05-08 00:50:12
对我来说恰恰相反!should('not.exist')修正了一个错误should('not.be.visible')
2021-05-09 00:50:12