Cypress运行程序在运行断言之前没有等待页面加载



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

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

不幸的是,Cypress在计算cy.url()之前没有等待所有请求解析,因此尽管重定向成功,断言总是失败。

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

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

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

https://example.cypress.io/commands/connectors然后

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

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

最新更新