Search code examples
arrayscypressassert

Cypress assert is element inside array


Can someone please, assist in following: Short explanation: opened one page, taken text element, then opened second page nd among 4 or 5 elements, need to assert that element from page one, is inside created array of those several elements. Wrote this code:

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)
  }
 })
 }
)

And when check Test runner - I got elements, but test fails:

enter image description here

How to correctly assert that? Thank you in advance


Solution

  • You can do an assertion like:

    expect(text1).to.be.oneOf(textsArray)
    

    OR, you can directly assert without using each() as well like:

    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
      })