Cypress: Перевірте, чи не існує елемента


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
Цікаво про голосування
проти,

питання має сенс для мене
Ден Карлстедт

Я розумію, що це не пов’язано з вашим питанням, але мені дуже цікаво. Яке рішення було використовувати щось, що просто підтримує Chrome, і що набагато краще в Cypress? Я працював над проектом із відкритим кодом Courgette github.com/canvaspixels/courgette і цікавився, які особливості привертають усіх до Cypress.
alexrogers

1
Я люблю кипарис, оскільки здебільшого це легко, і він просто працює. Я отримую проблему, коли він використовується лише в Chrome, але для мене я можу з цим жити.
Маккурт

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кілька разів, кожен з яких не вдається ... будь-яка ідея, що я роблю неправильно? Дякую заздалегідь
волк

Вибачте, що я щойно побачив ваш коментар, чи працює ваш вибір на атрибут даних? Чи можете ви вставити свій html в коментарі? Цей селектор мені дивно виглядає!
Маккурт

@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')
volk

Замість цього слід () чи можна завернути вище умови, якщо цикл? Спасибі
користувач2451016

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
Тім

1
Це працює для мене зараз, я насправді не впевнений, що я пропустив. Дякуємо за допомогу
Тім Абел

Не працює для мене в Cypress 4. Здається, він працює для вилученого елемента, а не для елемента, який взагалі не повинен існувати (наприклад, при тестуванні сторони сервера)
Ерік Бурел

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

це може призвести до помилкових результатів, оскільки деякі повідомлення про помилки приховуються. Можливо, краще використовувати

.should('not.visible');

в такому разі.


2
якби його не існувало в DOM, не було б помітною роботи? Я спробую це. Дякую!!!!
Маккурт

2
Для мене це було зовсім навпаки! ( should('not.exist')виправлено неправильно should('not.be.visible'))
Пол Мелеро

якщо його немає в домі, то не.be.visible буде працювати. Якщо ви перевіряєте журнали кипарисів, ви отримаєте щось на зразок очікуваного невизначеного, щоб його не було видно, і твердження пройде. Тож таким чином, щоб не було видно, насправді обкладинки не існують і не видно в одному твердженні
Шива Шрінівасан

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')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.