Selvi: Öğenin mevcut olup olmadığını test edin


145

Bir onay kutusunu tıklayıp bir elemanın Cypress'teki DOM'da artık olmadığını test edebilmek istiyorum. Birisi bunu nasıl yapacağınızı önerebilir mi?

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

Yukarıdaki testin tersini yapmak istiyorum. Bu yüzden tekrar tıkladığımda, sınıftaki div DOM'da olmamalı.


2

soru bana mantıklı geliyor
Dan Carlstedt

Bunun sorunuzla ilgili olmadığını anlıyorum ama gerçekten merak ediyorum. Yalnızca Chrome'u destekleyen bir şey kullanma kararı neydi ve Cypress hakkında bu kadar iyi olan ne? Açık kaynak projesi Courgette github.com/canvaspixels/courgette üzerinde çalışıyordum ve hangi özelliklerin herkesi Cypress'e çektiğini merak ediyordum.
alexrogers

1
Selvi severim çünkü çoğunlukla kolay ve işe yarıyor. Sorunu yalnızca Chrome'da kullanıyorum, ancak benim için bununla yaşayabilirim.
Maccurt

cy.get('.check-box-sub-text').contains('Some text in this div.')bazı durumlarda çalışmayabilir (bazı cihazlarda). Onunla değiştirebilirsin cy.contains('.check-box-sub-text', 'Some text in this div.'), aynı şekilde çalışacaktır.
ulou

Yanıtlar:


183

Bu işe yarıyor gibi görünüyor, bu yüzden öğrenmem gereken daha çok şey olduğunu söylüyor .should ()

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

4
SELAM! Hemen hemen aynı kodu kullanıyorum: cy.get(data-e2e="create-entity-field-relation-contact-name").should('not.exists')ama başarısız oluyor getve sonra shouldbirkaç kez çağırmaya çalışıyor , her biri başarısız oluyor ... Neyi yanlış yaptığım hakkında bir fikriniz var mı? Şimdiden teşekkürler
volk

Özür dilerim az önce yorumunuzu gördüm, seçiciniz bir veri özelliği üzerinde mi çalışıyor? HTML'nizi yorumlara yapıştırabilir misiniz? Bu seçici bana tuhaf görünüyor!
Maccurt

@volk bence cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')çalışmalı.
YingYang

8
@Maccurt, @YingYang: Aslında hatayı buldum ve biraz aptalcaydı: sshould: .should('not.exists')->.should('not.exist')
volk

Should () yerine yukarıdaki durumu if döngüsüne sarmak mümkün mü? Teşekkürler
user2451016

24

Ayrıca var olmaması gereken bir metni de arayabilirsiniz:

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

Burada Cypress'de sonucu elde edersiniz: 0 matched elements

görüntü açıklamasını buraya girin


2
bu benim için işe yaramadı, containszaman aşımına uğradı ve testin başarısız olmasına neden olduCypressError: Timed out retrying: Expected to find content: 'Im not supposed to be here' but never did.
Tim Abell

Cevabıma bir örnekle daha fazla açıklama ekledim. Kullanıcıyı sildikten sonra test_invite_member@gmail.com, e-postanın bir yerde olup olmadığını kontrol ediyorum. sonuç 0 element. Cypress'in hangi sürümünü kullanıyorsunuz?
Alan

güncelleme için teşekkürler. npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
Tim Abell

1
Bu şimdi benim için çalışıyor, aslında neyi kaçırdığımdan emin değilim. Yardımınız için teşekkürler
Tim Abell

Cypress 4'te benim için çalışmıyor. Görünüşe göre kaldırılmış öğe için işe yarıyor, hiç olmaması gereken öğe için değil (örneğin, sunucu tarafında oluşturmayı test ederken)
Eric Burel

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

bazı hata mesajları gizlendiğinden bazı yanlış sonuçlara yol açabilir. Kullanması daha iyi olabilir

.should('not.visible');

bu durumda.


2
DOM'da olmasaydı, olmazdı. görünmez çalışma? Ben deneyeceğim. Teşekkürler!!!!
Maccurt

2
Benim için tam tersi oldu! ( should('not.exist')bir yanlış düzeltildi should('not.be.visible'))
Paul Melero

dom içinde yoksa o zaman not.be.visible çalışacaktır. Selvi günlüklerini kontrol ederseniz, görünmemesi için beklenen tanımlanmamış gibi bir şey alırsınız ve iddia geçecektir. Yani bir bakıma görünür olmamak aslında örtüler var değildir ve tek bir iddiada görünmez
Shiva Srinivasan

5

İşte benim için çalıştı:

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

Bazılarının <div data-cy="parent">içinde görüntü olmadığını kontrol ettim . Orijinal soru ile ilgili olarak data-cy="something, i.e. child", iç düğümlerde öznitelik ayarlayabilir ve şu iddiayı kullanabilirsiniz:

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

3

Https://docs.cypress.io/guides/references/assertions.html#Existence'a göre

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

Bu, kaldırıldığı durumda işe yarar. ama asla var olmamasını istemeniz durumunda ... docs.cypress.io/guides/references/assertions.html#Existence Uzaklaşana kadar yeniden deneyecektir. Bu, çoğu insanın arayacağı şey olan başlık sorunu için gerçekten işe yaramıyor.

Ancak, bir şeyin bizim durumumuzda asla var olmadığını test etmek istiyorsanız.

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

Aşağıdaki kodu da kullanabilirsiniz

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

veya

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

veya

should('have.attr','minlength','2')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.