【发布时间】:2020-11-17 17:28:44
【问题描述】:
我正在使用 Cypress 对我的 Angular 应用程序进行端到端测试。我观察到的碎片来源之一是赛普拉斯行动迅速,而我的应用程序(相对)缓慢地准备好进行交互。赛普拉斯有一些经常被引用的 blog posts 讨论这个难题。
其中一篇博文中的示例建议劫持 addEventListener 来处理一个非常具体的示例。但我正在寻找的是适合 Angular 的“大锤”......任何人都有任何聪明的想法/技术,不涉及在参与测试活动之前为每次页面访问添加 10 秒等待(顺便说一下 工作)?我花了相当多的时间谷歌搜索无济于事。提前感谢您的想法!
除此之外:我还发现this open issue,如果它得到有效解决可能是答案的一部分。
【问题讨论】:
-
您可以尝试查找表明应用已准备就绪的 UI 元素。对于我们的项目,当出现欢迎弹出窗口时,应用程序已准备就绪。有时我们还需要等待特定的 API 请求完成。
-
@konekoya 感谢您的评论!是的,我已经包含了一些等待网络请求,我什至在根应用程序组件上引入了一个绑定 AfterViewInit 的类,但我希望有某种与应用程序无关的解决方案;否则对于我可以直接导航到的每个页面,我都需要不同的策略。
-
考虑到@konekoya 评论,这是我和我的开发团队发现的最佳实践,因为每个页面加载不同的内容并依赖于不同的元素来呈现。一种半可靠的通用方法是使用
Cypress.$('document').ready(function functionToDoAfterPageLoad () =>{}),但如果您在初始加载后触发某些事情,则每次都需要运行它。 -
本次网络研讨会谈到了此类案例,可能会有所帮助:youtube.com/…
-
Test retries 是一种方法。
标签: javascript angular testing cypress