Je commence à apprendre Cypress. J'ai une table de 4 lignes (avec une classe de datatable). Je peux vérifier le nombre de lignes de cette façon:
cy.get('.datatable').find('tr').each(function(row, i){
expect(i).to.be.lessThan(4)
})
C'est bien, mais cela semble bizarre, car je veux juste compter la longueur et n'ai pas vraiment besoin d'accéder aux éléments dans les rangées, et je suppose qu'il est plus rapide de faire une chose que de faire 4 choses.
Si je consigne la sélection (je ne sais pas comment l'appeler):
cy.log(cy.get('.datatable').find('tr'))
ça sort en tant que [object Object]
et je ne sais pas trop comment déconstruire cela, ce qui me suggère que je pense à tout cela de travers.
Si j'essaye:
expect(cy.get('.datatable').find('tr')).to.have.lengthOf(4)
Je reçois AssertionError: expected { Object (chainerId, firstCall) } to have a property 'length'
Si j'essaye:
expect(Cypress.$('.datatable > tr')).to.have.lengthOf(4)
Je reçois AssertionError: expected { Object (length, prevObject, ...) } to have a length of 4 but got 0
donc au moins il a une longueur ici?
Si je me connecte à cette méthode de sélection, je reçois Object{4}
. Je ne suis pas sûr où aller d'ici. Il semble que ce soit une chose très commune à traiter.
Vous avez trouvé une solution, cela permet de vérifier le nombre d'éléments:
cy.get('.datatable').find('tr').should('have.length', 4)
Cela ne fonctionne pas avec la méthode de notation Cypress.$()
.
Référence: https://docs.cypress.io/guides/references/assertions.html#Length
À partir de la section docs de l’API cypress .should () , à l’aide de la fonction flèche :
cy.get('.datatable').find('tr').should(($listOfElements) => {
expect($listOfElements).to.have.length(4)
// any other assertions, for example the below one
// expect($listOfElements).to.have.any.keys('key1', 'key2')
})
Cette approche vous permettra d’utiliser la notation Chai BDD et d’affirmer plus d’un élément de votre liste d’éléments.
Vous pouvez également obtenir la longueur d’une sélection d’éléments à travers sa propriété , par exemple:
cy.get('.datatable').find('tr').its('length').should('eq', 4)
cy.get('.datatable').find('tr').its('length').should('be.gte', 4)
En plus de should('have.length', 4)
Une option consiste à utiliser "have.length" ...
cy.get('.datatable tr').should('have.length', 4)
... une autre option est d'utiliser devrait
cy.get('.datatable tr').should(($tr) => {
expect($tr).to.have.length(4)
})
... ou alors (requêtes synchrones)
cy.get('.datatable').then(($table) => {
// synchronously query to find length of elements
expect($table.find('td').length).to.equal(4)
})