微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cypress runner 在运行断言之前不等待页面加载

如何解决Cypress runner 在运行断言之前不等待页面加载

我正在使用 cypress 运行端到端测试,并且在场景中的某个时刻,我单击了一个按钮,该按钮会触发对后端 API 和 Stripe API 的多个请求。 一旦所有请求都成功,就会进行重定向。我试图断言该 URL 包含一个可以确认重定向成功的关键字。

cy.get('[data-cy="payment-form-submit"]').click()
cy.url().should('include','somekeyword')

不幸的是,赛普拉斯在评估 cy.url() 之前不会等待所有请求解决,因此尽管重定向成功,断言总是失败。

我在 documentation 中读到它应该等待,但在实践中无法验证。我在这里错过了什么吗?我应该如何解决这个问题?

解决方法

.should() 命令将重试前面的命令,您可以查看是否使用回调运行等效命令并记录每个调用

cy.url().should(url => {
  console.log(url)                           // 170+ logs in 4 seconds
  expect(url).to.include('somekeyword');
})

您可能需要更长的超时时间,

cy.url({ timeout: 10000 }).should('include','somekeyword');
,

您可以尝试 .then() 操作,它显式地等待操作完成。

cy.get('[data-cy="payment-form-submit"]').click().then(()=>{
cy.url().should('include','somekeyword')
});

https://example.cypress.io/commands/connectors#then

,

您应该在 as() 上使用 cy.intercept 方法,以便在继续验证 URL 已更改之前正确等待所有请求完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。