automated-tests - 在赛普拉斯中,如何强制 cy.get 等待页面内容更改?
问题描述
我是赛普拉斯的新手,正在为 React 网页编写测试,以检查单击按钮时页面标题是否发生变化(我知道这可能不是最有用的检查)。
需要明确的是,按钮单击不会导致加载新网页,它只会导致当前页面的内容发生变化。
下面是一个类似于我的实际赛普拉斯代码的示例片段,包括按钮单击和随后的预期。
cy.get('[data-testId="<button ID>"]')
.click();
cy.get('body h2')
.contains('<some text>');
我的问题是,如果在单击按钮之前存在 h2 标头,赛普拉斯将获取该标头而不是单击按钮后存在的 h2 标头。
是否可以强制赛普拉斯等到页面更新?或者重试获取/包含步骤,直到满足期望?还是我只是在犯一个明显的菜鸟错误?
解决方案
如果您在元素上的选择器是正确的 - 您可以使用cy.should。它会重试,直到满足条件或预定的超时时间已到:
cy.get('[data-testId="<button ID>"]')
.click();
cy.get('body h2')
.should('contain', '<some text>');
如果页面在操作后没有重新加载,则此方法有效。如果是,您应该添加一些渲染时间断言,例如:
cy.get('[data-testId="<button ID>"]')
.click();
cy.get('body h2')
.should('not.exist') //Checks if the page starts reloading and the initial element has dissapeared.
cy.get('body h2')
.should('contain', '<some text>');
推荐阅读
- c# - Swagger 没有找到 ApiVersion 的操作
- c++ - 这个额外的关键字在这个 c++ 类声明中是什么意思?
- java - 测量哪些 Java 代码需要很长时间才能编译
- angular - 为什么在 Angular 8 中生成服务时出现“错误 TS1005: 'from' expected”
- r - R 通过子集和添加两列改进代码
- rest - 使用 Atomikos 事务管理器通过 Spring Boot 实现跨远程 REST 服务的分布式事务
- javascript - 使用控制器和 javascript 从服务器下载文件
- r - R - 计算出现在数据框中的列表中单词的总出现次数,并分组
- javascript - Puppeteer 搜索元素值
- javascript - JSON 操作,重写一个新数组,将数据附加为子项