サイプレス:要素が存在しないかどうかをテスト


145

チェックボックスをクリックして、要素がサイプレスの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

この質問は私には理にかなっています
ダンカールシュテット2018年

これはあなたの質問とは関係がないと思いますが、私は本当に興味があります。Chromeをサポートするだけのものを使用するという決定は何でしたか、サイプレスの優れている点は何ですか?私はオープンソースプロジェクトCourgette github.com/canvaspixels/courgetteに取り組んでおり、どの機能がサイプレスに向けられているのか疑問に思っていました。
アレクスローガー

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.')それと置き換えることができ、それは同じように機能します。
ulou

回答:


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ますが、それぞれが失敗します...何が間違っているのでしょうか?前もって感謝します
volk

申し訳ありませんが、あなたのコメントを見たことがあります。セレクタはデータ属性に取り組んでいますか?コメントにHTMLを貼り付けることができますか?そのセレクターは私には奇妙に見えます!
Maccurt 2018年

@volkうまくいくと思いますcy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')
YingYang 2018年

8
@ Maccurt、@ YingYang:実際に私は間違いを見つけました、そしてそれはちょっとばかげていました:冗長なsはずです:.should('not.exists')->.should('not.exist')
volk

should()の代わりに、上記の条件をifループでラップできますか?ありがとう
user2451016

23

存在しないはずのテキストを検索することもできます:

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

ここにサイプレスでの結果があります: 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です。サイプレスのどのバージョンを使用していますか?
アラン

アップデートを応援します。npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
ティム・アベル

1
それは今私のために働いています、私が実際に逃したものは確かではありません。助けてくれてありがとう
Tim Abell

サイプレス4では私には機能しません。削除された要素では機能するようですが、まったく存在してはならない要素では機能しません(たとえば、サーバー側のレンダリングをテストする場合)
Eric Burel

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

一部のエラーメッセージが非表示になるため、誤った結果が生じる可能性があります。使う方がいいかも

.should('not.visible');

その場合。


2
DOMに存在しない場合、not.visibleは機能しますか?やってみます。ありがとう!!!!
Maccurt

2
私にとってはまったく逆でした!(should('not.exist')間違っていた問題を修正しましたshould('not.be.visible')
Paul Melero

domに存在しない場合はnot.be.visibleが機能します。サイプレスログを確認すると、予期しない未定義のようなものが表示されないことがわかり、アサーションはパスします。つまり、実際には見えない形で、実際には存在せず、1つのアサーションでも見えない
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.