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
你可以使用 等待
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);
}
})();
虽然我的例子有一些嘲讽,但这是如何处理你的问题。
你得到的错误是 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()
}
}