【问题标题】:Cypress runner not waiting for page to load before running assertionCypress runner 在运行断言之前没有等待页面加载
【发布时间】:2021-05-10 16:30:07
【问题描述】:

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

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

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

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

【问题讨论】:

  • 按钮点击和重定向之间的时间间隔是多少?

标签: javascript cypress end-to-end


【解决方案1】:

.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');

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多