web-dev-qa-db-fra.com

Comment attendre que l'élément disparaisse dans le cyprès

J'ai un indicateur de chargement que je dois attendre pour disparaître avant de faire mes affirmations.

J'ai vu certains utiliser ce qui suit, mais cela ne semble pas fonctionner pour moi et je ne veux pas non plus que ce soit une affirmation. cy.get('element, {timeout: 10000}).should('not.exist);

Quelqu'un a des conseils?

12
jaikl

Si vous devez spécifiquement attendre, vous pouvez utiliser la fonction wait() de cypress avant de faire une assertion et prévoir le temps d'attente avant l'expiration du délai.

Mais notez, ceci est un anti-modèle comme vous pouvez le trouver dans la documentation:

Vous n'avez presque jamais besoin d'attendre une période arbitraire. Il y a toujours de meilleures façons d'exprimer cela dans Cypress.

Cela dit, si votre indicateur de chargement est lié à une requête réseau, vous pouvez attendre qu'il se termine avant de faire une assertion. Cela pourrait être réalisé avec quelque chose comme this exemple:

// Wait for the route aliased as 'getAccount' to respond
// without changing or stubbing its response
cy.server()
cy.route('/accounts/*').as('getAccount')
cy.visit('/accounts/123')
cy.wait('@getAccount').then((xhr) => {
  // we can now access the low level xhr
  // that contains the request body,
  // response body, status, etc
})

Plus d'informations sur l'attente des demandes peuvent être trouvées ici .

Assurez-vous également que vous voulez vraiment utiliser .should('not.exist') et non .should('not.be.visible').

2
Diogo Rocha

Le chargement des implémentations de spinner masque souvent l'élément plutôt que de le supprimer du DOM. Par conséquent, should("not.exist") ne fonctionnera pas pour eux.

cy.get("element").should("not.be.visible") est la bonne approche dans de tels cas (comme réponse de Diogo déjà suggéré).

0
Philzen