在 Cypress 中,我如何强制 cy.get 等待页面内容更改?
In Cypress how can I force cy.get to wait for page content to change?
我是 Cypress 的新手,正在为 React 网页编写一个测试,检查单击按钮时,页面标题会更改(我知道这可能不是最有用的检查)。
需要说明的是,单击按钮不会导致加载新网页,只会导致当前页面的内容发生变化。
下面是一个类似于我的实际 Cypress 代码的示例片段,包括按钮点击和后续预期。
cy.get('[data-testId="<button ID>"]')
.click();
cy.get('body h2')
.contains('<some text>');
我的问题是,如果在单击按钮之前存在 h2 header,则 Cypress 将获取 header 而不是单击按钮后存在的 h2 header。
是否可以强制 Cypress 等待页面更新?或者重试 get/contains 步骤直到达到预期?还是我只是犯了一个明显的菜鸟错误?
如果元素上的选择器正确 - 您可以使用 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>');
我是 Cypress 的新手,正在为 React 网页编写一个测试,检查单击按钮时,页面标题会更改(我知道这可能不是最有用的检查)。
需要说明的是,单击按钮不会导致加载新网页,只会导致当前页面的内容发生变化。
下面是一个类似于我的实际 Cypress 代码的示例片段,包括按钮点击和后续预期。
cy.get('[data-testId="<button ID>"]')
.click();
cy.get('body h2')
.contains('<some text>');
我的问题是,如果在单击按钮之前存在 h2 header,则 Cypress 将获取 header 而不是单击按钮后存在的 h2 header。
是否可以强制 Cypress 等待页面更新?或者重试 get/contains 步骤直到达到预期?还是我只是犯了一个明显的菜鸟错误?
如果元素上的选择器正确 - 您可以使用 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>');