Cypress 不重试断言

标签 cypress

由于标题文本上设置了断言,我的 Cypress 测试表现不一致。这是我的代码:

cy.get('.heading-large').should('contain', 'dashboard') // passes
cy.contains('View details').first().click()
cy.get('.heading-large').should('contain', 'Registration details') // sometimes fails

如果失败,那是因为标题仍然包含“仪表板” - Cypress 似乎没有重试,但给出错误 Timed out retrying: expected '<h1.heading-large>' to contain 'Registration details'

来自阅读 Cypress retry-ability ,我的理解是should断言应该继续尝试直到超时,超时设置为 "defaultCommandTimeout" : 5000 。即使我在两个页面上有一个具有相同标识符的元素,这种感觉也是如此。我正在测试的应用程序不存在重大性能问题。

如果我不看窗口并且this issue,测试似乎更有可能失败。看起来可能是一个原因。

任何人都可以帮助确定:我的测试或 Cypress 是否存在问题,以及我如何改进测试?我在 MacOS Catalina 上使用 Cypress 5.1.0 和 Chrome 85。

最佳答案

它偶尔会失败,因为在达到超时时,用信息填充 header 的请求尚未解决。

您可以通过设置带有路由别名的路由来解决此问题,以等待请求解析的确切响应,然后再继续点击。

换句话说,当您click()时,会发送一个请求,该请求会获取您想要在下一个get()中检查的信息。有时,当您的 get() 超时时,此请求的响应尚未解决。您可以增加超时时间,但不建议这样做,也不是一个好的做法。相反,请等待带有路由和路由别名的特定响应。如果您这样做,在任何情况下,最后一个 get() 都不会被调用,直到它正在查找的信息得到解析。

我不知道你的要求,但它会像这样工作:

// setup the route and alias
cy.server()
cy.route("/youRequestUrlHere").as("myLovelyAlias")

// first get 
cy.get('.heading-large').should('contain', 'dashboard')
// this click fires the request url from route() above
cy.contains('View details').first().click()

// wait for route to resolve using route alias
cy.wait("@myLovelyAlias").then((response) => {
  // next get called after response resolves
  cy.get('.heading-large').should('contain', 'Registration details')
}

引用:

编辑:

如上所述,您还可以作弊并将 defaultCommandTimeout 设置为更高的数字,但不建议这样做,因为您仍然可能遇到响应解析时间比您设置的超时时间长的情况。路由/等待模式是更好、更稳定的方法。

如果您想知道它是如何完成的,您可以将 get() 更改为如下内容:

cy.get('.heading-large', {defaultCommandTimeout: 60000}).should('contain', 'Registration details')

同样,其他方式会更好。

引用:

关于Cypress 不重试断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63900669/

相关文章:

javascript - Cypress 中带有嵌套查询的文本断言

Cypress : The submit button is disabled even after all the text fields have filled

javascript - 使用 Cypress 从列表框中提取值

node.js - 在所有测试都启动 cypress 后执行任务

javascript - 如何通过 Cypress 对下面的正文请求进行断言。谢谢

javascript - Cypress - 如何限制常量值?

node.js - npm 启动后 Github 操作不起作用

cypress - 测试套件中的测试用例排列 - 如何避免相同步骤的重复代码

javascript - cypress中如何避免重复代码

cypress - 循环元素后测试字母顺序