Cypress: Kiểm tra nếu phần tử không tồn tại


145

Tôi muốn có thể nhấp vào hộp kiểm và kiểm tra xem một phần tử không còn trong DOM trong Cypress. Ai đó có thể đề nghị làm thế nào bạn làm điều đó?

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

Tôi muốn làm ngược lại với bài kiểm tra trên. Vì vậy, khi tôi nhấp vào nó một lần nữa, div với lớp không nên có trong DOM.


2
Tôi tự hỏi về việc bỏ phiếu xuống
Maccurt

câu hỏi có ý nghĩa với tôi
Dan Carlstedt

Tôi nhận ra điều này không liên quan đến câu hỏi của bạn nhưng tôi thực sự tò mò. Quyết định sử dụng thứ gì đó chỉ hỗ trợ Chrome và Cypress có gì hay hơn? Tôi đã làm việc trong dự án nguồn mở Courgette github.com/canvaspixels/courgette và đang tự hỏi những tính năng nào đang thu hút mọi người về phía Cypress.
alexrogers

1
Tôi thích cây bách vì phần lớn nó rất dễ và nó chỉ hoạt động. Tôi gặp sự cố với nó chỉ được sử dụng trong Chrome, nhưng đối với tôi, tôi có thể sống với điều đó.
Maccurt

cy.get('.check-box-sub-text').contains('Some text in this div.')trong một số trường hợp có thể không hoạt động (trên một số thiết bị). Bạn có thể thay thế nó bằng cy.contains('.check-box-sub-text', 'Some text in this div.')nó sẽ hoạt động theo cùng một cách.
ulou

Câu trả lời:


183

Chà điều này có vẻ hiệu quả, vì vậy nó cho tôi biết tôi có thêm một số điều để tìm hiểu về .should ()

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

4
CHÀO! Tôi đang sử dụng khá nhiều mã giống nhau: cy.get(data-e2e="create-entity-field-relation-contact-name").should('not.exists')nhưng nó thất bại getvà sau đó cố gắng gọi shouldnhiều lần, mỗi lần đều thất bại ... có biết tôi đang làm gì sai không? Cảm ơn trước
volk

Xin lỗi tôi vừa thấy bình luận của bạn, bộ chọn của bạn có hoạt động trên một thuộc tính dữ liệu không? Bạn có thể dán html của bạn trong các ý kiến? Bộ chọn đó có vẻ kỳ lạ đối với tôi!
Maccurt

@vol Tôi nghĩ cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')nên làm việc.
YingYang

8
@Maccurt, @YingYang: thực sự tôi đã tìm thấy sai lầm và đó là một điều ngớ ngẩn: có dư thừa snên: .should('not.exists')->.should('not.exist')
volk

Thay vì nên () có thể bọc điều kiện trên trong vòng lặp if không? Cảm ơn
user2451016

23

bạn cũng có thể tìm kiếm một văn bản không tồn tại:

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

Ở đây bạn có kết quả trong Cypress: 0 matched elements

nhập mô tả hình ảnh ở đây


2
điều này không hiệu quả với tôi, đã containshết thời gian và khiến bài kiểm tra thất bạiCypressError: Timed out retrying: Expected to find content: 'Im not supposed to be here' but never did.
Tim Abell

Tôi đã thêm nhiều giải thích với một ví dụ trong câu trả lời của tôi. Sau khi xóa người dùng test_invite_member@gmail.com, tôi sẽ kiểm tra xem email có tồn tại ở đâu đó không. kết quả là 0 element. Phiên bản Cypress nào bạn đang sử dụng?
Alan

chúc mừng cho bản cập nhật. npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
Tim Abell

1
Điều đó làm việc cho tôi bây giờ, tôi thực sự không chắc chắn những gì tôi đã bỏ lỡ. Cảm ơn sự giúp đỡ của bạn
Tim Abell

Không hoạt động với tôi trong Cypress 4. Nó dường như hoạt động với phần tử bị loại bỏ, không phải phần tử hoàn toàn không tồn tại (ví dụ: khi kiểm tra kết xuất phía máy chủ)
Eric Burel

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

có thể dẫn đến một số kết quả sai, vì một số thông báo lỗi bị ẩn. Nó có thể tốt hơn để sử dụng

.should('not.visible');

trong trường hợp đó.


2
nếu nó không tồn tại trong DOM thì sẽ không hoạt động? Tôi sẽ thử nó. Cảm ơn!!!!
Maccurt

2
Đối với tôi nó hoàn toàn ngược lại! (đã should('not.exist')sửa lỗi should('not.be.visible'))
Paul Melero

nếu nó không tồn tại trong dom thì not.be.visible sẽ hoạt động. Nếu bạn kiểm tra nhật ký cây bách, bạn sẽ nhận được một cái gì đó như dự kiến ​​không xác định sẽ không hiển thị và xác nhận sẽ vượt qua. Vì vậy, theo một cách không thể nhìn thấy thực sự bao gồm không tồn tại và không thể nhìn thấy trong một khẳng định
Shiva Srinivasan

5

Đây là những gì làm việc cho tôi:

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

Tôi kiểm tra rằng một số <div data-cy="parent">không có hình ảnh bên trong. Về câu hỏi ban đầu, bạn có thể đặt data-cy="something, i.e. child"thuộc tính trên các nút bên trong và sử dụng xác nhận này:

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

3

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

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

Điều này làm việc cho trường hợp nó đang được gỡ bỏ. nhưng trong trường hợp bạn muốn nó không bao giờ tồn tại ... docs.cypress.io/guides/references/assertions.html#Existence Nó sẽ thử lại cho đến khi nó biến mất. Điều này không thực sự hiệu quả cho vấn đề tiêu đề, đó là điều mà hầu hết mọi người sẽ tìm kiếm.

Tuy nhiên nếu bạn muốn kiểm tra rằng điều đó không bao giờ tồn tại trong trường hợp của chúng tôi.

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

Bạn cũng có thể sử dụng mã dưới đây

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

hoặc là

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

hoặc là

should('have.attr','minlength','2')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.