Cypress: Uji jika elemen tidak ada


145

Saya ingin dapat mengklik kotak centang dan menguji apakah suatu elemen tidak lagi ada di DOM di Cypress. Adakah yang bisa menyarankan bagaimana Anda melakukannya?

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

Saya ingin melakukan kebalikan dari tes di atas. Jadi ketika saya klik lagi div dengan kelas tidak boleh di DOM.


2
Saya bertanya-tanya tentang suara turun
Maccurt

pertanyaan itu masuk akal bagi saya
Dan Carlstedt

Saya menyadari ini tidak terkait dengan pertanyaan Anda, tetapi saya benar-benar ingin tahu. Apa keputusan untuk menggunakan sesuatu yang hanya mendukung Chrome dan apa yang jauh lebih baik tentang Cypress? Saya telah mengerjakan proyek Open-source Courgette github.com/canvaspixels/courgette dan bertanya-tanya fitur apa yang menarik semua orang ke Cypress.
alexrogers

1
Saya suka cemara karena sebagian besar mudah dan hanya berfungsi. Saya mendapatkan masalah dengan itu hanya digunakan di Chrome, tetapi bagi saya saya bisa hidup dengan itu.
Maccurt

cy.get('.check-box-sub-text').contains('Some text in this div.')dalam beberapa kasus mungkin tidak berfungsi (pada beberapa perangkat). Anda dapat menggantinya dengan cy.contains('.check-box-sub-text', 'Some text in this div.')itu akan bekerja dengan cara yang sama.
ulou

Jawaban:


183

Sepertinya ini berhasil, jadi ini memberitahu saya bahwa saya harus belajar lebih banyak .should ()

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

4
HAI! Saya menggunakan kode yang hampir sama: cy.get(data-e2e="create-entity-field-relation-contact-name").should('not.exists')tetapi gagal getdan kemudian mencoba memanggil shouldbeberapa kali, masing-masing gagal ... tahu apa yang saya lakukan salah? Terima kasih sebelumnya
volk

Maaf saya baru saja melihat komentar Anda, apakah pemilih Anda bekerja pada atribut data? Bisakah Anda menempelkan html Anda di komentar? Pemilih itu terlihat aneh bagiku!
Maccurt

@volk saya pikir cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')harus bekerja.
YingYang

8
@Accurt, @YingYang: sebenarnya saya menemukan kesalahan, dan itu agak konyol: ada yang berlebihan sdi harus: .should('not.exists')->.should('not.exist')
volk

Alih-alih harus () apakah mungkin untuk membungkus kondisi di atas di dalam jika loop? Terima kasih
user2451016

24

Anda juga dapat mencari teks yang tidak seharusnya ada:

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

Di sini Anda mendapatkan hasilnya di Cypress: 0 matched elements

masukkan deskripsi gambar di sini


2
ini tidak berhasil untuk saya, containswaktunya habis dan menyebabkan tes gagalCypressError: Timed out retrying: Expected to find content: 'Im not supposed to be here' but never did.
Tim Abell

Saya menambahkan lebih banyak penjelasan dengan contoh dalam jawaban saya. Setelah menghapus pengguna test_invite_member@gmail.com, saya memeriksa apakah email itu ada di suatu tempat. hasilnya adalah 0 element. Cypress versi apa yang Anda gunakan?
Alan

sorakan untuk pembaruan. npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
Tim Abell

1
Itu bekerja untuk saya sekarang, saya sebenarnya tidak yakin apa yang saya lewatkan. Terima kasih atas bantuan Anda
Tim Abell

Tidak berfungsi untuk saya di Cypress 4. Tampaknya berfungsi untuk elemen yang dihapus, bukan elemen yang seharusnya tidak ada sama sekali (misalnya saat menguji rendering sisi server)
Eric Burel

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

dapat menyebabkan beberapa hasil yang salah, karena beberapa pesan kesalahan disembunyikan. Mungkin lebih baik digunakan

.should('not.visible');

dalam hal itu.


2
jika tidak ada di DOM tidak akan terlihat. Bekerja? Saya akan mencobanya. Terima kasih!!!!
Maccurt

2
Bagi saya itu justru sebaliknya! ( should('not.exist')memperbaiki kesalahan should('not.be.visible'))
Paul Melero

jika tidak ada di dom, maka not.be.visible akan bekerja. Jika Anda memeriksa log cypress, Anda akan mendapatkan sesuatu seperti yang diharapkan tidak terdefinisi agar tidak terlihat dan pernyataan itu akan berlalu. Jadi dengan cara yang tidak terlihat sebenarnya mencakup tidak ada dan tidak terlihat dalam satu pernyataan
Shiva Srinivasan

5

Inilah yang bekerja untuk saya:

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

Saya memeriksa bahwa beberapa <div data-cy="parent">tidak memiliki gambar di dalamnya. Mengenai pertanyaan asli, Anda dapat mengatur data-cy="something, i.e. child"atribut pada node batin dan menggunakan pernyataan ini:

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

3

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

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

Ini berfungsi untuk kasus yang sedang dihapus. tetapi jika Anda menginginkannya tidak pernah ada ... docs.cypress.io/guides/references/assertions.html#Existence Ini akan mencoba lagi sampai hilang. Ini tidak benar-benar berfungsi untuk masalah judul yang merupakan apa yang kebanyakan orang akan cari.

Namun jika Anda ingin menguji bahwa benda itu tidak pernah ada dalam kasus kami.

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

Anda juga dapat menggunakan kode di bawah ini

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

atau

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

atau

should('have.attr','minlength','2')
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.