【问题标题】:How can I break the loop inside the cypress block?如何打破柏树块内的循环?
【发布时间】:2020-06-04 06:06:46
【问题描述】:
    for (let i = 0; i < 14; i++) {
        cy.get('div .fc-left h2').then(($btn) => {
            if ($btn[0].innerText === fullDate) {
                break
            } else {
                cy.get('button[aria-label="next"]').click()
            }
        })
    }

我的代码是这样的。当我运行它时,会显示Unsyntactic break 错误。没有break 也可以工作

【问题讨论】:

  • @NjugunaMureithi 当我使用break 时,会出现Unsyntactic break 错误。

标签: javascript loops cypress break qa


【解决方案1】:

您可以使用for await

async function shouldNext(val) {
  //const $btn = await cy.get('div .fc-left h2')
  const $btn = await fakeCyGet(val.value)
  if ($btn.innerText === 'fullDate') return Promise.resolve({
    done: true
  });
  //cy.get('button[aria-label="next"]').click()
  return val
}

async function fakeCyGet(i) {
  if (i == 5) return {
    innerText: "fullDate"
  }
  return {
    innerText: "fakeData"
  }
}

const asyncIterable = {
  [Symbol.asyncIterator]() {
    return {
      i: 0,
      next() {
        if (this.i < 14) {
          return Promise.resolve(shouldNext({
            value: this.i++,
            done: false
          }));
        }

        return Promise.resolve({
          done: true
        });
      }
    };
  }
};

(async function() {
  for await (let num of asyncIterable) {
    console.log(num);
  }
})();

虽然我的示例有一些模拟,但这是解决问题的方法。

【讨论】:

  • 嗨。我的开发者朋友告诉我,这段代码会使我的测试变慢。所以我没试过这个:)
  • 您能说出原因吗?由于您在操作中所做的事情,您的测试会变慢。我正在按要求回答您的问题。
【解决方案2】:

您会收到错误,因为 break 指令在技术上并不处于循环中,因为它在此回调 .then(($btn) =&gt; { ... } 内。

for (let i = 0; i < 14; i++) {
    const text = await new Cypress.Promise((resolve) => {
        cy.get('div .fc-left h2')
            .invoke('text')
            .then((buttonText) => resolve(buttonText.toString()))
    })
    if (text === fullDate {
        break;
    } else {
        cy.get('button[aria-label="next"]').click()
    }
}

【讨论】:

  • 这对我没有帮助,因为我没有得到元素,每次循环工作时我都会得到一个元素。
  • 好的。请查看我在上面编辑过的回复和解决方案,如果它符合您的预期,请告诉我;)
  • 这对我没有帮助,因为变量返回给我一个对象,而不是文本。
  • @AraGalstyan 您能否附上与上述评论相关的控制台的回溯?
  • 你是如何使用 await 的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多