赛普拉斯:测试元素是否不存在

Cypress: Test if element does not exist

我希望能够单击复选框并测试某个元素是否不再位于赛普拉斯的 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.')

我想做与上面测试相反的事情。因此,当我再次单击它时,带有 class 的 div 不应该在 DOM.

嗯,这似乎行得通,所以它告诉我我还有更多关于 .should()

的知识要学习
cy.get('.check-box-sub-text').should('not.exist');
cy.get('[data-e2e="create-entity-field-relation-contact-name"]').should('not.exist');

可能会导致一些错误的结果,因为一些错误消息被隐藏了。使用

可能会更好
.should('not.visible');

在那种情况下。

以下是对我有用的方法:

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

您也可以使用下面的代码

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

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

should('have.attr','minlength','2')

您还可以搜索不应该存在的文本:

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

这是赛普拉斯的结果:0 matched elements

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

赛普拉斯 6.x+ 迁移

According to cypress docs on Existence

非常流行的有点天真的尝试会一直有效,直到它不起作用,然后你将不得不再次重写它……再一次……

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

这对大多数人都在寻找的标题问题并不奏效。

这适用于它被删除的情况。 but in the case that you want it to never exist... 它将重试直到它消失。

但是,如果您想测试该元素在我们的案例中不存在。

Yes lol. This is what you really want unless you want to just have your headache again another day.

// 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`) });
})

赛普拉斯 6.x+ 迁移

使用.should('not.exist')断言DOM中不存在元素。


使用not.visible断言。它会错误地通过 < 6.0,但现在正确地失败了:

// for element that was removed from the DOM
// assertions below pass in < 6.0, but properly fail in 6.0+
.should('not.be.visible')
.should('not.contain', 'Text')

此处的迁移文档:Migrating-to-Cypress-6-0

您可以同时使用 getcontains 来区分 HTML 元素。

<button type='button'>Text 1</button>
<button type='button'>Text 2</button>

假设您有 2 个带有不同文本的按钮,您想要检查第一个按钮是否不存在,然后您可以使用;

cy.get('button').contains('Text 1').should('not.exist')

我关闭了一个元素并检查了 should('not.exist') 但断言失败,因为它存在于 DOM 中。只是它不再可见了。

在这种情况下,should('not.visible') 对我有用。我刚开始使用柏树。很多东西要学。

也可以在赛普拉斯中使用 jQuery 模式来完成:

assert(Cypress.$('.check-box-sub-text').length==0)

No try-catch flow in cypress

在java-selenium 中,我们通常添加NoSuchElementException 并执行我们的案例。如果 UI 未显示某些基于角色的访问案例的元素。

就我而言,Cypress 是如此之快,以至于简单的 .should('not.be.visible') 通过了测试,然后加载程序出现并且测试失败。

我已经成功做到了:

cy.get('.loader__wrapper')
  .should('be.visible')
cy.get('.loader__wrapper', { timeout: 10000 })
  .should('not.be.visible')

当您的应用程序加载超过 4 秒时,将超时设置为 10 秒也很不错。

我会使用:

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

这比

更安全

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

( 该元素可以出现在 DOM 中,但在 显示中不可见:none 不透明度:0)