Zypressen: Testen Sie, ob das Element nicht vorhanden ist


143

Ich möchte in der Lage sein, auf ein Kontrollkästchen zu klicken und zu testen, ob sich ein Element nicht mehr im DOM in Cypress befindet. Kann jemand vorschlagen, wie Sie es tun?

//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.')

Ich möchte das Gegenteil des obigen Tests tun. Wenn ich erneut darauf klicke, sollte sich das div mit der Klasse nicht im DOM befinden.


2
Ich wundere mich über die Abstimmung
Maccurt

Die Frage macht Sinn für mich
Dan Carlstedt

Mir ist klar, dass dies nicht mit Ihrer Frage zusammenhängt, aber ich bin wirklich neugierig. Was war die Entscheidung, etwas zu verwenden, das nur Chrome unterstützt, und was ist so viel besser an Cypress? Ich habe an dem Open-Source-Projekt Courgette github.com/canvaspixels/courgette gearbeitet und mich gefragt, welche Funktionen alle auf Cypress aufmerksam machen.
Alexrogers

1
Ich mag Zypressen, weil es größtenteils einfach ist und einfach funktioniert. Ich habe das Problem, dass es nur in Chrome verwendet wird, aber für mich kann ich damit leben.
Maccurt

cy.get('.check-box-sub-text').contains('Some text in this div.')In einigen Fällen funktioniert dies möglicherweise nicht (auf einigen Geräten). Sie können es durch ersetzen, cy.contains('.check-box-sub-text', 'Some text in this div.')es wird auf die gleiche Weise funktionieren.
ulou

Antworten:


180

Nun, das scheint zu funktionieren, also sagt es mir, dass ich noch etwas über .should () lernen muss.

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

4
HALLO! Ich verwende so ziemlich den gleichen Code: cy.get(data-e2e="create-entity-field-relation-contact-name").should('not.exists')aber er schlägt fehl getund versucht dann shouldmehrmals aufzurufen , wobei jeder fehlschlägt ... eine Idee, was ich falsch mache? Vielen Dank im Voraus
volk

Entschuldigung, ich habe gerade Ihren Kommentar gesehen. Arbeitet Ihr Selektor an einem Datenattribut? Können Sie Ihr HTML in die Kommentare einfügen? Dieser Selektor sieht für mich seltsam aus!
Maccurt

@volk Ich denke cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')sollte funktionieren.
YingYang

8
@Maccurt, @YingYang: Eigentlich habe ich den Fehler gefunden, und es war irgendwie albern: Es ist überflüssig sin sollte: .should('not.exists')->.should('not.exist')
volk

Anstelle von should () ist es möglich, die obige Bedingung in eine if-Schleife einzuschließen? Danke
user2451016

22

Sie können auch nach einem Text suchen, der nicht existieren soll:

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

Hier haben Sie das Ergebnis in Cypress: 0 matched elements

Geben Sie hier die Bildbeschreibung ein


2
Das hat bei mir nicht funktioniert, das containsCypressError: Timed out retrying: Expected to find content: 'Im not supposed to be here' but never did.
Tim Abell

Ich habe in meiner Antwort weitere Erklärungen mit einem Beispiel hinzugefügt. Nach dem Löschen des Benutzers test_invite_member@gmail.comüberprüfe ich, ob die E-Mail irgendwo existiert. das Ergebnis ist 0 element. Welche Version von Cypress verwenden Sie?
Alan

Prost auf das Update. npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
Tim Abell

1
Das funktioniert jetzt für mich, ich bin mir eigentlich nicht sicher, was ich vermisst habe. Vielen Dank für Ihre Hilfe
Tim Abell

Funktioniert in Cypress 4 nicht für mich. Es scheint für entfernte Elemente zu funktionieren, nicht für Elemente, die überhaupt nicht vorhanden sein sollten (z. B. beim Testen des serverseitigen Renderns)
Eric Burel

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

Dies kann zu falschen Ergebnissen führen, da einige Fehlermeldungen ausgeblendet werden. Es könnte besser sein, zu verwenden

.should('not.visible');

In diesem Fall.


2
Wenn es nicht im DOM vorhanden wäre, würde es nicht funktionieren. Ich werde es ausprobieren. Vielen Dank!!!!
Maccurt

2
Für mich war es genau das Gegenteil! ( should('not.exist')should('not.be.visible')
Fehler

Wenn es im Dom nicht existiert, funktioniert not.be.visible. Wenn Sie die Zypressenprotokolle überprüfen, wird so etwas wie erwartet undefiniert nicht sichtbar und die Zusicherung wird bestanden. In gewisser Weise nicht sichtbar zu sein, existiert tatsächlich nicht und ist in einer Behauptung nicht sichtbar
Shiva Srinivasan

5

Folgendes hat bei mir funktioniert:

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

Ich überprüfe, ob einige <div data-cy="parent">keine Bilder enthalten. In Bezug auf die ursprüngliche Frage können Sie ein data-cy="something, i.e. child"Attribut für innere Knoten festlegen und diese Behauptung verwenden:

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

3

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

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

Dies funktioniert für den Fall, dass es entfernt wird. aber für den Fall, dass Sie möchten, dass es nie existiert ... docs.cypress.io/guides/references/assertions.html#Existence Es wird wiederholt, bis es verschwindet. Dies funktioniert nicht wirklich für das Titelproblem, nach dem die meisten Leute suchen werden.

Wenn Sie jedoch testen möchten, dass das Ding in unserem Fall nie existiert.

// 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

Sie können auch den folgenden Code verwenden

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

oder

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

oder

should('have.attr','minlength','2')
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.