Cypress断言数组中存在元素。

6

有人可以帮忙吗? 简要说明:打开一个页面,获取文本元素,然后打开第二个页面,在4或5个元素中,需要断言来自页面一的元素在创建的这些元素数组中。编写了以下代码:

Cypress.Commands.add(
'assertForOpenedElementVisible',
 (list1, list2, notDisplayedElementMsg) => {
const textsArray = []
cy.get('body').then((body) => {
  if (body.find(list1).length > 0) {
    cy.get(list1).each(($el, index) => {
      const text1 = $el.text().replace(', ', '')

      cy.get(list1).eq(index).click()
      cy.wait(1000)

      cy.get(list2)
        .each(($el, index) => {
          const text = $el.text().replace(', ', '')
          textsArray.push(text)
          cy.log(textsArray)
          cy.log(text)
        })
        .then(() => {
          cy.wrap(expect(textsArray).to.include(text1))
        })
    })
  } else {
    cy.log(notDisplayedElementMsg)
  }
 })
 }
)

当检查测试运行器时 - 我得到了元素,但测试失败:

在此输入图片描述

如何正确断言?谢谢。

1个回答

7
您可以像这样进行断言:
expect(text1).to.be.oneOf(textsArray)

或者,你也可以直接使用断言而不使用each(),如下所示:

cy.get(list2).should(($list2) => {
  expect($list2.eq(3)).to.contain('49') //If you know the position
})

cy.get(list2)
  .invoke('text')
  .then((text) => {
    expect(text).to.contain('49') //If you don't know the position
  })

尝试了一下,但是又出现了错误:断言错误 期望 '49' 是 [ Array(4) ] 中的一个 - Zoran
const textsArray = [] 更改为 var textsArray = [] - Alapan Das
我不知道为什么 textsArray.push(text) 不起作用,而且在第一次迭代中为什么数组大小根据日志是4?你能发布一下list2的html吗,这样我就可以进行更多的调试了吗?另外,您不必使用 cy.wrap,您可以直接编写expect语句。 - Alapan Das
数组的大小为4,因为页面上显示了4个元素,其中一个正是我需要断言的元素。很抱歉无法提供HTML代码。使用或不使用cy.wrap都只会改变错误提示,但无论哪种方式都无法解决问题。 - Zoran
我选择了第二个解决方案,它起作用了。非常感谢。 - Zoran
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接