Кипарис: проверьте, не существует ли элемент


145

Я хочу иметь возможность установить флажок и проверить, что элемент больше не находится в DOM в Cypress. Кто-нибудь может подсказать, как вы это делаете?

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

вопрос имеет смысл для меня
Дэн Карлштедт

Я понимаю, что это не связано с вашим вопросом, но мне действительно любопытно. Каково было решение использовать что-то, что только поддерживает 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.')он будет работать точно так же.
ulou 03

Ответы:


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

@volk Думаю cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exists')должно работать.
YingYang

8
@Maccurt, @YingYang: на самом деле я обнаружил ошибку, и это было глупо: sв should есть лишнее : .should('not.exists')->.should('not.exist')
volk

Можно ли вместо 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.
Тим Абелл

Я добавил больше пояснений с примером в свой ответ. После удаления пользователя test_invite_member@gmail.comя проверяю, существует ли где-нибудь электронное письмо. результат есть 0 element. Какую версию Cypress вы используете?
Алан

приветствую обновление. npx cypress --version- Cypress package version: 3.5.0 Cypress binary version: 3.5.0
Tim Abell

1
Сейчас это работает для меня, на самом деле я не уверен, что я пропустил. Спасибо за вашу помощь
Тим Абелл

У меня не работает в Cypress 4. Кажется, работает для удаленного элемента, а не для элемента, который не должен существовать вообще (например, при тестировании рендеринга на стороне сервера)
Эрик Бурел

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 будет работать. Если вы проверите журналы кипариса, вы получите что-то вроде ожидаемого, что undefined не будет отображаться, и утверждение пройдет. Таким образом, невидимые на самом деле обложки не существуют и не видны в одном утверждении
Шива Шринивасан

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]')

4

Согласно 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')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.