Javascript Cypress:测试元素是否不存在

Javascript Cypress:测试元素是否不存在,javascript,cypress,Javascript,Cypress,我希望能够单击一个复选框并测试某个元素是否不再位于Cypress中的DOM中。有人能建议你怎么做吗 //这是单击复选框并且元素在那里时的测试 cy.get('[type=“checkbox”]')。单击(); cy.get('.复选框子文本')。包含('此分区中的某些文本') 我想做与上面测试相反的事情。因此,当我再次单击它时,带有该类的div不应位于DOM中。这似乎可行,因此它告诉我还有一些需要了解的内容。should() 由于某些错误消息被隐藏,可能会导致一些错误结果。使用它可能更好 .s

我希望能够单击一个复选框并测试某个元素是否不再位于Cypress中的DOM中。有人能建议你怎么做吗

//这是单击复选框并且元素在那里时的测试
cy.get('[type=“checkbox”]')。单击();
cy.get('.复选框子文本')。包含('此分区中的某些文本')

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

这似乎可行,因此它告诉我还有一些需要了解的内容。should()

由于某些错误消息被隐藏,可能会导致一些错误结果。使用它可能更好

.should('not.visible');

在这种情况下。

以下是对我有效的方法:

cy.get('[data-cy=parent]').should('not.have.descendants', 'img')
我检查一些
中是否没有图像。 关于原始问题,您可以在内部节点上设置
data cy=“something,即child”
属性,并使用此断言:

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

您也可以使用下面的代码

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


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

cy.contains('test_invite_member@gmail.com').should('not.exist')
这里是Cypress中的结果:
0个匹配元素

文档:

根据


这适用于正在移除的情况。但是如果你想让它永远不存在。。。docs.cypress.io/guides/references/assertions.html#它将重试直到消失。这并不能解决大多数人都在寻找的标题问题

然而,如果你想测试,在我们的例子中,这个东西是不存在的

// 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`);
            });
        })
Cypress 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')
//用于从DOM中删除的元素
//下面的断言在<6.0中传递,但在6.0中正确地失败+
.should('not.be.visible')
.should('not.contain','Text')

此处的迁移文档:

您可以同时使用
get
contains
来区分HTML元素

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

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


在这种情况下,应该('not.visible')为我工作。我刚开始使用柏树。有很多东西需要学习。

在cypress中使用jQuery模式也可以做到:

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


我想知道这个问题对我来说是有意义的,我意识到这与你的问题无关,但我真的很好奇。决定使用只支持Chrome的东西是什么?Cypress有什么更好的地方?我一直在从事开源项目西葫芦,想知道是什么特性吸引了大家对Cypress的兴趣。我喜欢Cypress,因为它在很大程度上很简单,而且很有效。我只在Chrome中使用它就有问题了,但对我来说我可以接受。我认为你应该澄清这个问题“测试元素是否被删除”。否则它会与另一个问题混淆,“测试元素是否从未存在”。技术含义和答案因情况而异。嗨!我使用的代码基本相同:
cy.get(data-e2e=“create entity-field-relationship-contact-name”).should('not.exists')
,但它在
get
上失败,然后尝试调用
should
多次,每次都失败。。。知道我做错了什么吗?提前谢谢,我刚看到你的评论,你的选择器正在处理数据属性吗?你能在评论中粘贴你的html吗?那个选择器在我看来很奇怪@沃尔克:我认为
cy.get('[data-e2e=“create entity-field-relationship contact name]”)应该('not.exists')
应该可以用。@Maccurt,@YingYang:事实上我发现了错误,这有点傻:应该:
.short('not.exists')
->
应该('not.exists')中有多余的
s
这适用于正在移除的情况。但是如果你想让它永远不存在。。。它将重试,直到它消失。对于大多数人都在寻找的标题问题来说,这确实不起作用。如果DOM中不存在它,它将不起作用。可见工作?我会试试看。谢谢对我来说恰恰相反!(
should('not.exist')
修复了一个错误的
should('not.be.visible')
),如果它在dom中不存在,那么not.be.visible将起作用。如果您检查cypress日志,您将得到一些类似于expected undefined的不可见信息,断言将通过。因此,在某种程度上,不可见实际上涵盖了一个断言中不存在和不可见的内容。不要使用
should('not.visible')
assertion。它将在Cypress<6.0中错误地传递,但现在对于从DOM中删除的元素,它将正确地失败。使用
应该('not.exist')
。请参见下面我的答案:这对我不起作用,
包含的
超时并导致测试失败
cypressor:timed out重试:预期会找到内容:“我不应该在这里”,但从来没有出现过。
我在回答中添加了更多解释,并举例说明。删除用户后
test\u invite_member@gmail.com
,我正在检查电子邮件是否存在。结果是
0元素
。您使用的是什么版本的Cypress?为更新干杯
npx cypress--version
-
cypress软件包版本:3.5.0 cypress二进制版本:3.5.0
现在对我有效,我不确定我错过了什么。谢谢你的帮助在柏树4中对我不起作用。它似乎适用于删除的元素,而不是根本不应该存在的元素(例如,在测试服务器端渲染时)。同意,请参阅我将对此进行研究并升级到6
// retry until loading spinner no longer exists
cy.get('#loading').should('not.exist')
// 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`);
            });
        })
// 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')
<button type='button'>Text 1</button>
<button type='button'>Text 2</button>
cy.get('button').contains('Text 1').should('not.exist')
assert(Cypress.$('.check-box-sub-text').length==0)