Cypress: tester si l'élément n'existe pas


145

Je veux pouvoir cliquer sur une case à cocher et tester qu'un élément n'est plus dans le DOM de Cypress. Quelqu'un peut-il suggérer comment vous faites?

//This is the Test when the check box is clicked and the element is there
cy.get('[type="checkbox"]').click();
cy.get('.check-box-sub-text').contains('Some text in this div.')

Je veux faire le contraire du test ci-dessus. Donc, quand je clique dessus à nouveau, le div avec la classe ne doit pas être dans le DOM.


2
Je m'interroge sur le vote vers le bas
Maccurt

la question a un sens pour moi
Dan Carlstedt

Je me rends compte que ce n'est pas lié à votre question mais je suis vraiment curieux. Quelle a été la décision d'utiliser quelque chose qui ne prend en charge que Chrome et qu'y a-t-il de bien mieux à propos de Cypress? J'ai travaillé sur le projet Open-source Courgette github.com/canvaspixels/courgette et je me demandais quelles fonctionnalités attiraient tout le monde vers Cypress.
alexrogers

1
J'aime le cyprès parce que la plupart du temps c'est facile et ça marche. Je reçois le problème avec son utilisation uniquement dans Chrome, mais pour moi, je peux vivre avec cela.
Maccurt du

cy.get('.check-box-sub-text').contains('Some text in this div.')dans certains cas, cela peut ne pas fonctionner (sur certains appareils). Vous pouvez le remplacer par cy.contains('.check-box-sub-text', 'Some text in this div.')cela fonctionnera de la même manière.
ulou

Réponses:


183

Eh bien, cela semble fonctionner, donc cela me dit que j'ai encore plus à apprendre sur .should ()

cy.get('.check-box-sub-text').should('not.exist');

4
SALUT! J'utilise à peu près le même code: cy.get(data-e2e="create-entity-field-relation-contact-name").should('not.exists')mais il échoue getet essaie de l'invoquer shouldplusieurs fois, chacune échouant ... une idée de ce que je fais de mal? Merci d'avance
volk

Désolé, je viens de voir votre commentaire, votre sélecteur travaille-t-il sur un attribut de données? Pouvez-vous coller votre html dans les commentaires? Ce sélecteur me semble étrange!
Maccurt

@volk, je pense, cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')devrait fonctionner.
YingYang

8
@Maccurt, @YingYang: en fait j'ai trouvé l'erreur, et c'était un peu idiot: il y a redondant sdans should: .should('not.exists')->.should('not.exist')
volk

Au lieu de should (), est-il possible d'envelopper la condition ci-dessus dans la boucle if? Merci
user2451016

24

vous pouvez également rechercher un texte qui n'est pas censé exister:

cy.contains('test_invite_member@gmail.com').should('not.exist')

Voici le résultat dans Cypress: 0 matched elements

entrez la description de l'image ici


2
cela n'a pas fonctionné pour moi, le containsdélai a expiré et a provoqué l'échec du testCypressError: Timed out retrying: Expected to find content: 'Im not supposed to be here' but never did.
Tim Abell

J'ai ajouté plus d'explications avec un exemple dans ma réponse. Après avoir supprimé l'utilisateur test_invite_member@gmail.com, je vérifie si l'e-mail existe quelque part. le résultat est 0 element. Quelle version de Cypress utilisez-vous?
Alan

bravo pour la mise à jour. npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
Tim Abell

1
Cela fonctionne pour moi maintenant, je ne suis pas sûr de ce que j'ai manqué. Merci pour votre aide
Tim Abell

Cela ne fonctionne pas pour moi dans Cypress 4. Cela semble fonctionner pour l'élément supprimé, pas pour l'élément qui ne devrait pas du tout exister (par exemple lors du test du rendu côté serveur)
Eric Burel

16
cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exist');

peut conduire à de faux résultats, car certains messages d'erreur sont masqués. Il vaudrait peut-être mieux utiliser

.should('not.visible');

dans ce cas.


2
s'il n'existait pas dans le DOM ne fonctionnerait pas. visible? Je vais l'essayer. Merci!!!!
Maccurt

2
Pour moi, c'était tout le contraire! ( should('not.exist')corrigé une erreur should('not.be.visible'))
Paul Melero

s'il n'existe pas dans le dom alors not.be.visible fonctionnera. Si vous vérifiez les journaux de cyprès, vous obtiendrez quelque chose comme attendu non défini pour ne pas être visible et l'assertion passera. Donc d'une manière ne pas être visible, les couvertures n'existent pas et ne sont pas visibles dans une assertion
Shiva Srinivasan

5

Voici ce qui a fonctionné pour moi:

cy.get('[data-cy=parent]').should('not.have.descendants', 'img')

Je vérifie que certains <div data-cy="parent">n'ont pas d'images à l'intérieur. En ce qui concerne la question d'origine, vous pouvez définir l' data-cy="something, i.e. child"attribut sur les nœuds internes et utiliser cette assertion:

cy.get('[data-cy=parent]').should('not.have.descendants', '[data-cy=child]')

3

Selon https://docs.cypress.io/guides/references/assertions.html#Existence

// retry until loading spinner no longer exists
cy.get('#loading').should('not.exist')

Cela fonctionne pour le cas où il est supprimé. mais dans le cas où vous voudriez qu'il n'existe jamais ... docs.cypress.io/guides/references/assertions.html#Existence Il réessaiera jusqu'à ce qu'il disparaisse. Cela ne fonctionne pas vraiment pour le problème du titre, ce que la plupart des gens recherchent.

Cependant si vous voulez tester que la chose n'existe jamais dans notre cas.

// Goes through all the like elements, and says this object doesn't exist ever
cy.get(`img[src]`)
        .then(($imageSection) => {
            $imageSection.map((x, i) => {
                expect($imageSection[x].getAttribute('src')).to.not.equal(`${Cypress.config().baseUrl}/assets/images/imageName.jpg`);
            });
        })


0

Vous pouvez également utiliser le code ci-dessous

expect(opportunitynametext.include("Addon")).to.be.false

ou

should('be.not.be.visible')

ou

should('have.attr','minlength','2')
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.