我正在try 自动化一个测试场景,其中我首先逐个遍历页面,并且在每个页面上遍历元素列表,直到找到我想要的元素,但是当在if语句中满足我的条件时,我设置了一个标志来停止两个循环,但是外部循环继续运行到最后一页,即使我的条件在第二页已经满足,你们能在这方面帮助我吗

我的方法

clickOnNextBtnUntilDisable() {
    cy.get(".MuiPagination-ul li button").last().invoke("text").as("lastPage");
    cy.get("@lastPage").then((lastPageText) => { 
      const index = parseInt(lastPageText, 10); // converting last page text into int.
      let flag = false;
      for (let i = 1; i < index; i++) {
        cy.get(".MuiGrid-justify-xs-space-evenly .MuiGrid-container > p").each(
          (el, index) => {
            if (el.text() === "Test Attribute Do not touch") {
              cy.log("Condition met");
              flag = true;
              return;
            }
          }
        );
        if (!flag) {
          cy.contains("Next").click();
        } else {
          return;
        }
      }
    });
  }

我的测试

it("Adding question to existing attribute", function () {
    dashBoardPage.clickOnSwitchView();
    dashBoardPage.clickOnAttributes();
    attributesPage.clickOnNextBtnUntilDisable();
  });

Sharing UI Images for ref 1st page enter image description here

2nd page and so on enter image description here

推荐答案

Aliasing the flag

您可以使用别名来测试您的标志条件:

let flag = false;
cy.wrap(flag).as('stop')

for (let i = 1; i < index; i++) {
  cy.get('@stop').then(stop =>
    if (!stop) {

        cy.get(".MuiGrid-justify-xs-space-evenly .MuiGrid-container > p").each(
        (el, index) => {
            if (el.text() === "Test Attribute Do not touch") {
              cy.log("Condition met");
              flag = true;
              cy.wrap(flag).as('stop')
              
              return          // <-- early exit for .each()
            }
          }
        )

        // also need the alias check here, since above .each() needs to finish
        cy.get('@stop').then(stop =>
          if (!stop) {
            cy.contains("Next").click();
          }
        })

这将静态for()循环与循环内部动态查询的结果"协调".

如果没有行cy.get('@stop').then(stop =>,代码将在命令队列开始运行之前将所有命令排队到队列中.

Javascript相关问答推荐

如何在使用fast-xml-parser构建ML时包括属性值?

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

Msgraph用户邀请自定义邮箱模板

在网页上添加谷歌亵渎词

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

覆盖TypeScrip中的Lit-Element子类的属性类型

Rxjs流中生成IMMER不能在对象上操作

将对象推送到数组会导致复制

如何在HTMX提示符中设置默认值?

如何使用基于promise (非事件emits 器)的方法来传输数据?

如何为仅有数据可用的点显示X轴标签?

将嵌套数组的元素乘以其深度,输出一个和

处理TypeScrip Vue组件未初始化的react 对象

判断函数参数的类型

通过跳过某些元素的对象进行映射

递增/递减按钮React.js/Redux

JQuery使用选项填充HTMLSELECT并设置默认结果,默认结果显示为空

如何缩小函数中联合返回类型的范围