cypress 条件代码逻辑取决于元素的存在

cypress conditional code logic depending on existence of element

我想根据元素的存在执行一些操作。类似于:

cy.get(A).should('not.exist').then(()=>{ //action 1 })
cy.get(A).should('exist').then(()=>{ //action 2 })

我需要执行这两项检查。

问题是我正在使用“应该”断言来执行此检查。如果该元素存在,那么整个测试用例都会失败,我什至没有进行第二次检查以执行操作 2。

有没有像 cypress 中的软断言这样的东西,它让我只检查元素是否存在,如果不存在,测试用例不会失败??

请参阅 Element existence

处的文档

You cannot do conditional testing on the DOM unless you are either:

  • Server side rendering with no asynchronous JavaScript.
  • Using client side JavaScript that only ever does synchronous rendering.

It is crucial that you understand how your application works else you will write flaky tests.

如果以上为真,您可以替换为 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 
    }
  })