javascript 怎样在柏树里等元素消失?

ccrfmcuu  于 2022-12-21  发布在  Java
关注(0)|答案(7)|浏览(106)

我有一个加载指示器,我需要等待它消失后再执行Assert。
我见过一些人使用下面的语句,但它似乎对我不起作用,而且我也不希望它是一个Assert。

cy.get('element', {timeout: 10_000}).should('not.exist');

有人有什么建议吗?

z0qdvdin

z0qdvdin1#

恕我直言,最干净的方法是不要在get中使用waits或timeout,这是一种反模式。
我建议使用Cypress waitUntil命令,并使用如下内容:

cy.waitUntil(function() {
  return cy.get('element').should('not.exist');
 })

或者根据应用程序代码,您可以使用not.be.visible

hfyxw5xn

hfyxw5xn2#

如果您特别需要等待,可以在Assert之前使用cypress的wait()函数,并提供超时之前等待的时间量。
但是请注意,这是一个反模式,您可以在文档中找到:
你几乎永远不需要等待一段任意的时间,在Cypress中总有更好的方法来表达这一点。
也就是说,如果您的加载指示器绑定到某个网络请求,您可以在Assert之前等待它们完成。

// Wait for the route aliased as 'getAccount' to respond
// without changing or stubbing its response
cy.server()
cy.route('/accounts/*').as('getAccount')
cy.visit('/accounts/123')
cy.wait('@getAccount').then((xhr) => {
  // we can now access the low level xhr
  // that contains the request body,
  // response body, status, etc
})

有关等待请求的更多信息,请单击此处。
此外,请确保您确实要使用.should('not.exist')而不是.should('not.be.visible')

ttvkxqim

ttvkxqim3#

加载spinner实现通常只是隐藏元素,而不是从DOM中删除它,因此should("not.exist")对它们不起作用。
cy.get("element").should("not.be.visible")是这种情况下的正确方法(Diogo的回答已经暗示过)。

92dk7w1h

92dk7w1h4#

cypress-wait-until对我不起作用。我只是使用了基本的:

cy.get('.ant-drawer-body').should('not.exist');

它会自动等待。

oxalkeyp

oxalkeyp5#

第一个月
这对我来说也适用。
截至"@testing-library/cypress": "^5.3.1",
只需确保为微调组件提供了data-testid属性。
<LoadingSpinner data-testid='loading-spinner-data-testid'>

beq87vna

beq87vna6#

Diogo罗查的方法在很多情况下都很重要,但要真正确定图像消失了,你需要遵循Philzen的建议:Assert它是不可见的,测试回放将等待它消失。
当您计划拍摄屏幕截图或可视快照时,这一点尤其重要,因为返回的XHR请求并不一定意味着图像消失了。

wvmv3b1j

wvmv3b1j7#

cypress-wait-until的用法如下:
cypress/support/commands.js

import 'cypress-wait-until'

test.spec.js

cy.waitUntil(() => cy.get('element').then($el => $el.length === 0))

相关问题