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.

Maccurt
quelle
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');
Maccurt
quelle
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('[email protected]').should('not.exist')

Hier haben Sie das Ergebnis in Cypress: 0 matched elements

Geben Sie hier die Bildbeschreibung ein

Alan
quelle
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 [email protected]ü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.

MrSmiley
quelle
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]')
Mikhail Vasin
quelle
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`);
            });
        })
Urasquirrel
quelle
1
Einverstanden, siehe github.com/cypress-io/cypress/issues/7651
Eric Burel
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')
Rajan Domala
quelle