如何在cypress中使用嵌套循环

问题描述 投票:0回答:1

我正在尝试自动化一个测试场景,其中我首先一页一页地遍历页面,然后在每个页面上遍历元素列表,直到找到所需的元素,但是当 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();
  });
javascript typescript selenium-webdriver automation cypress
1个回答
0
投票

给标志起别名

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

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')
            }
          }
        )

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

这“协调”静态

for()
循环与循环内动态查询的结果。

如果没有

cy.get('@stop').then(stop =>
行,代码会在命令队列开始运行之前将所有命令排入队列。

© www.soinside.com 2019 - 2024. All rights reserved.