【发布时间】:2020-08-29 20:28:54
【问题描述】:
我正在开发一个 Cypress 测试集,用于验证从 STAGE 到 DEMO 到 PROD 的 React 网站。 React 组件是使用 Redux 从多个后端服务中提取数据生成的。
对于 DEMO 和 PROD,后端服务的性能最佳,加载 React 组件的延迟最小,最多 5 秒。
对于 STAGE,React 组件的加载有一个真正显着的延迟,从 30 多秒到荒谬的 120 秒。然而,组件最终会呈现。
Cypress 测试在 DEMO 和 PROD 中都能 100% 正常工作。我将cypress.json 中的默认timeout 设置为60000 毫秒,但是这些部署环境不需要这么长的默认超时时间。
但是,相同的 Cypress 测试在 STAGE 部署中针对相同的 React 站点运行,cy.visit() 和 cy.get() 经常失败,即使我将超时设置为 120000 毫秒。即使我将重试添加到3,它也会失败。
那么,由于来自后端服务的不可预测的响应,应该如何最好地解决 Cypress 等待 React 组件加载的问题?
谢谢,非常感谢您的帮助
【问题讨论】:
-
Stage 的长时间默认超时不会延迟 Prod 中的测试 - 一旦满足他们的期望,命令就会继续。如果 2 分钟的时间太短 - 连接中断?
-
@JeffTanner 如果您的测试在
cy.visit()上失败,那么您必须在 cypress.json 中提供pageLoadTimeout。其次,如果你编写一个递归函数并检查元素是否存在并重新加载页面直到找到它,它会解决你的目的吗? -
@JeffTanner,感谢您的额外说明。逻辑上说,如果 Stage 只是比其他环境慢,那么您应该能够找到适用于 Stage 的超时。故事听起来有些不对劲。在浏览器中访问 Stage 时的页面加载时间是多少(不是 Cypress 测试)?
-
@MarionMorrison 我同意有些事情是不对的。我现在正在使用
cy.contains等待组件出现。将在今天晚些时候提供更新。 -
cy.contains()将是我的建议,如果浏览器中的阶段页面加载优于 2 分钟 -cy.get(selector).contains(content)不等待来自服务器的内容。如果您发布代码,您会得到更快的答案。
标签: timeout cypress react-component