Cypress : 요소가 존재하지 않는지 테스트


145

확인란을 클릭하고 Cypress의 DOM에 요소가 더 이상 없는지 테스트하고 싶습니다. 어떻게 당신이 그것을 제안 할 수 있습니까?

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

위의 테스트와 반대로하고 싶습니다. 다시 클릭하면 클래스가있는 div가 DOM에 없어야합니다.


2
나는 하락 투표에 대해 궁금하다
Maccurt

질문은 나에게 의미가 있습니다
단 Carlstedt에게

나는 이것이 당신의 질문과 관련이 없다는 것을 알고 있지만 정말로 궁금합니다. Chrome 만 지원하는 것을 사용하기로 결정한 것은 무엇이며 Cypress에 대해 훨씬 더 나은 점은 무엇입니까? 저는 오픈 소스 프로젝트 인 Courgette github.com/canvaspixels/courgette에서 작업하고 있으며 Cypress를 위해 어떤 기능을 사용하는지 궁금했습니다.
alexrogers

1
나는 노송 나무를 좋아합니다. 왜냐하면 대부분은 쉬우 며 작동하기 때문입니다. Chrome에서만 사용되는 문제가 발생하지만 나와 함께 살 수 있습니다.
Maccurt

cy.get('.check-box-sub-text').contains('Some text in this div.')경우에 따라 작동하지 않을 수 있습니다 (일부 장치에서). 당신은 그것을 교체 할 수 있습니다 cy.contains('.check-box-sub-text', 'Some text in this div.')같은 방식으로 작동합니다.
울루

답변:


183

잘 작동하는 것 같습니다. 따라서 .should ()에 대해 더 배울 점이 있습니다.

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

4
안녕하세요! 나는 거의 같은 코드를 사용하고 있습니다. cy.get(data-e2e="create-entity-field-relation-contact-name").should('not.exists')하지만 실패 get하고 should여러 번 호출하려고 시도합니다 . 각각 실패합니다. 미리 감사드립니다
볼크

죄송합니다. 귀하의 의견을 보았습니다. 선택자가 데이터 속성을 다루고 있습니까? 주석에 HTML을 붙여 넣을 수 있습니까? 그 선택기는 나에게 이상해 보인다!
Maccurt

@ volk 나는 cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')작동해야 한다고 생각 합니다.
YingYang

8
@Maccurt, @YingYang : 사실 나는 실수를 발견하고,이 종류의 바보이었다 : 중복이 s에해야한다 : .should('not.exists')->.should('not.exist')
볼크

should () 대신 위의 조건을 if 루프로 감싸는 것이 가능합니까? 감사합니다
user2451016

24

존재하지 않는 텍스트를 검색 할 수도 있습니다.

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

Cypress의 결과는 다음과 같습니다. 0 matched elements

여기에 이미지 설명을 입력하십시오


2
이것은 나에게 효과가 없었고 contains시간 이 초과되어 테스트가 실패했습니다CypressError: Timed out retrying: Expected to find content: 'Im not supposed to be here' but never did.
Tim Abell

내 대답에 예를 들어 더 많은 설명을 추가했습니다. 사용자를 삭제 한 후 test_invite_member@gmail.com이메일이 존재하는지 확인합니다. 결과는 0 element입니다. 어떤 버전의 Cypress를 사용하고 있습니까?
앨런

업데이트를 응원합니다. npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
팀 아벨

1
그것은 지금 나를 위해 일하고 있습니다. 실제로 내가 놓친 것이 확실하지 않습니다. 도와 주셔서 감사합니다
Tim Abell

Cypress 4에서는 작동하지 않습니다. 전혀 존재해서는 안되는 요소가 아닌 제거 된 요소 (예 : 서버 측 렌더링 테스트)에서 작동하는 것 같습니다
Eric Burel

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

일부 오류 메시지가 숨겨져 잘못된 결과가 발생할 수 있습니다. 사용하는 것이 좋습니다

.should('not.visible');

이 경우에.


2
DOM에 존재하지 않으면 보이지 않습니다. 나는 그것을 시험해 볼 것이다. 감사!!!!
Maccurt

2
나를 위해 그것은 정반대였습니다! ( should('not.exist')잘못된 should('not.be.visible')
고침

dom에 존재하지 않으면 not.be.visible이 작동합니다. cypress 로그를 확인하면 예상치 않은 정의가 보이지 않고 어설 션이 전달됩니다. 따라서 보이지 않는 방식으로 실제로는 존재하지 않으며 하나의 주장에서 보이지 않습니다
Shiva Srinivasan

5

나를 위해 일한 것은 다음과 같습니다.

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

<div data-cy="parent">내부에 이미지가 없는지 확인합니다 . 원래 질문과 관련 data-cy="something, i.e. child"하여 내부 노드에서 속성을 설정 하고이 어설 션을 사용할 수 있습니다.

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

3

https://docs.cypress.io/guides/references/assertions.html#Existence 에 따르면

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

이것은 제거되는 경우에 효과적입니다. 하지만 절대 존재하지 않으려는 경우 ... docs.cypress.io/guides/references/assertions.html#Existence 사라질 때까지 다시 시도합니다. 이것은 대부분의 사람들이 찾게 될 제목 문제에는 실제로 효과가 없습니다.

그러나 우리의 경우에는 결코 존재하지 않는지 테스트하고 싶다면.

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

아래 코드를 사용할 수도 있습니다

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

또는

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

또는

should('have.attr','minlength','2')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.