17

In a Cypress.io test, while checking for the 'data' displayed in a table after applying the filter, it throws "CypressError: Timed out retrying: Cannot read property 'eq' of undefined". Can someone please advise how to fix the problem in below test? Table HTML image added below.

describe('Filter Test', function() {
    it.only('Check if the records are filtered successfully', function() {
        cy.visit('http://www.seleniumeasy.com/test/table-search-filter-demo.html')          
        cy.get('button').contains('Filter').click()
        cy.get('input[placeholder="Username"]').type('jacobs')  
        cy.get('table').should(($tr) => {
        const $tds = $tr.find('td') // find all the tds
        expect($tds.cells.eq(0)).to.contain('jacobs')   
        })

    })      

})

enter image description here

enter image description here

kame
  • 20,848
  • 33
  • 104
  • 159
soccerway
  • 10,371
  • 19
  • 67
  • 132

1 Answers1

40

There are multiple ways to do this, but the contains() function is by far the simplest in this case:

cy.get('table').contains('td', 'jacobs');

This will get the table element and assert that it contains a td tag with the text jacobs.


It's worth noting that contains() also acts as a selector, and in typical Cypress fashion you can continue chaining off it, like so:

cy.get('table').contains('td', 'jacobs').should('be.visible');

cy.get('table').contains('td', 'jacobs').then(elem => {
    // Do something with this specific element...
});

// etc...
Joshua Wade
  • 4,755
  • 2
  • 24
  • 44
  • Will try that today evening and reply – soccerway Aug 16 '18 at 21:55
  • @Joshua Wade - Hi Joshua, is there any way dynamically filter non zeros from a td ? – Prany Sep 23 '19 at 10:10
  • Hi @Prany, try this: `cy.get('.my-table').get('td').each(elem => {});` - Cypress will loop through each `td` element and run the provided lambda function with the raw Javascript element passed into `elem`. Now, in the curly braces, you can just do this (or similar, note this is untested): `if (parseFloat(elem.textContent) !== 0) {/*element does *not* contain zero*/} else {/*element contains zero*/}` – Joshua Wade Sep 23 '19 at 13:24