赛普拉斯条件断言

Posted

技术标签:

【中文标题】赛普拉斯条件断言【英文标题】:Cypress conditional assertions 【发布时间】:2021-12-22 20:50:44 【问题描述】:

我有一张像这样的桌子

1       /   2
abc     /    abc
abc     /    bca
abc     /    cda

现在我的代码是这样的

cy.get('[role="row"]').each(($el) => 

            cy.get($el).children()
            .should('contain', 'abc')
          )

但是如何检查第二列是否包含(abc,bca,cda)之一 html 长得像地狱,但在中间它有类似 aria-label = "abc" 的东西 正则表达式是好的解决方案吗?我不擅长这个,你能告诉我它应该是什么样子(开始时有很多 attr,中间有 aria-label = "abc" 和最后有一些属性)?还是有更好的解决方案? 我不太了解 js,下面的代码中可能有问题,因为第一个条件始终为真,它不应该

cy.get($el).then(($try) => 
              if ($try.html('aria-label' == "abc")) 
                cy.log('it contains abc')
              else if ($try.html('aria-label' == "bca")) 
                cy.log('it contains bca')
              else if ($try.html('aria-label' == "bca")) 
                cy.log('it contains cda')
              
              else
                cy.log("DONT WORK")
              
          )
                  

【问题讨论】:

请为您的表格添加html。 对不起,我不能,因为这不是我的私人项目。 【参考方案1】:

$try.html().includes('xxx') 成功了。

【讨论】:

【参考方案2】:

这是假设,因为我不知道 html 的样子。一种方法是使用expect(2).to.be.oneOf([1,2,3])。我假设您正在验证属性 aria-label

的值
cy.get('[role="row"]').each(($el) => 
  expect($el.attr('aria-label').trim()).to.be.oneOf(['abc', 'bca', 'cda'])
)

如果您正在检查可以使用的元素的 innerText:

cy.get('[role="row"]').each(($el) => 
  expect($el.text().trim()).to.be.oneOf(['abc', 'bca', 'cda'])
)

【讨论】:

我会试一试的。给您带来的不便,谢谢,抱歉

以上是关于赛普拉斯条件断言的主要内容,如果未能解决你的问题,请参考以下文章

.should('exist') 断言在赛普拉斯上是多余的吗?

有没有办法断言赛普拉斯没有调用路由?

如何在赛普拉斯中使用灯具列表断言列表

赛普拉斯:如何验证字体颜色与预期不符

赛普拉斯测试因断言等于 DOM 标题而失败

赛普拉斯在开玩笑断言中导致类型错误