web-dev-qa-db-fra.com

Dans Cypress, comment compter une sélection d’articles et obtenir la longueur?

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.

11
Katharine Osborne

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

21
Katharine Osborne

À 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.

4
lauri108

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)

3
Yuci

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