0

在这个赛普拉斯测试中,我试图利用cy.waitUntil npm 包等待加载微调器不存在,然后继续运行测试,而不会有竞争条件导致 CI​​ 测试失败的风险(目前测试失败是因为命令在组件全部加载完成之前在页面上制作。

在第一次尝试中,我尝试通过从包装器 div 上的属性“data-cy-isLoading”获取加载微调器的状态来断言其值取决于呈现微调器的相同逻辑。

cy.waitUntil(
  () => {

    let stillLoading = null
    cy.get('[data-cy-isLoading]')
      .then(val => (stillLoading = val[0].attributes[1].value))
      .then(() => {
        if(stillLoading === 'false'){
           return true
        }
      })
      
  },
  {
    timeout: 8000,
    description: 'Await loading spinner',
  }
)

这种尝试在我尝试调整它的所有方式中都失败了,如果满足if(stillLoading === 'false')条件并返回True被击中,则 cy.waitUntill 命令仍将无限期地继续重试,而不会退出 waitUntil 命令并继续测试

这种变化也不起作用。

cy.waitUntil(
  () => {
    let done;
    let stillLoading;
    cy.get('[data-cy-isLoading]')
      .then(val => (stillLoading = val[0].attributes[1].value))
      .then(() => {
        if(stillLoading === 'false'){
           done = true
        }

      })
      done ? expect(done).to.be.true : false
  },
  {
    timeout: 8000,
    description: 'Await loading spinner',
  }
)

接下来,我尝试通过在命令/断言上使用超时来简单地断言微调器自身的存在。

!!cy.get('[data-cy="spinningCircle"]', {timeout: 10000}).should('not.be.visible')

!!cy.get('[data-cy="spinningCircle"]', {timeout: 10000}).should('not.exist')

这些也不起作用,因为一旦无法找到元素 [data-cy=spinningCircle],它们就会失败

4

0 回答 0