如何在柏树块内打破循环?

问题描述 投票:0回答:1
    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

javascript loops cypress break qa
1个回答
0
投票

你可以使用 等待

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);
  }
})();

虽然我的例子有一些嘲讽,但这是如何处理你的问题。


0
投票

你得到的错误是 break 指令从技术上讲并不在循环中,因为它在这个回调里面。.then(($btn) => { ... }.

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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.