【问题标题】:cypress conditional code logic depending on existence of element赛普拉斯条件代码逻辑取决于元素的存在
【发布时间】:2021-07-29 15:04:21
【问题描述】:
我想根据元素的存在执行一些操作。比如:
cy.get(A).should('not.exist').then(()=>{ //action 1 })
cy.get(A).should('exist').then(()=>{ //action 2 })
而且我需要执行这两项检查。
问题是我正在使用“应该”断言来执行此检查。如果元素存在,则整个测试用例将失败,我什至没有进行第二次检查以执行操作 2。
在 cypress 中是否有类似软断言的东西,它可以让我检查元素是否存在,如果不存在则不会使测试用例失败??
【问题讨论】:
标签:
javascript
jquery
automation
cypress
exists
【解决方案1】:
请参阅Element existence的文档
你不能对 DOM 进行条件测试,除非你是:
- 没有异步 JavaScript 的服务器端渲染。
- 使用只进行同步渲染的客户端 JavaScript。
了解应用程序的工作原理至关重要,否则您将编写不稳定的测试。
如果上述情况属实,您可以替换为 jQuery 表达式
const exists = Cypress.$.('A').length > 0;
if (exists) {
//action 1
} else {
//action 2
}
但是如果'A'是异步加载的,上面会失败。
一种方法是检查与“A”一起异步加载的另一个元素“B”
cy.get('B') // 'B' is definitely loaded
.then(() => {
// since 'B' is present, we can test for 'A'
const exists = Cypress.$.('A').length > 0;
if (exists) {
//action 1
} else {
//action 2
}
})