[英]How to break for loop inside Cypress's then() function?
如果.contacts
元素的樣式不等於display: none
,我想打破 for 循環,但我找不到在 then() 函數中執行此操作的方法。
用例:我想點擊表格元素,直到出現聯系人面板,然后填寫聯系人。 但是,如果我在面板出現后不停止循環,它將消失並且我會收到錯誤消息。
cy.get('@count').then($count => {
for (let i = 1; i <= $count - 1; i++) {
if (i == 1) {
cy.get(`:nth-child(${i}) > .room-type`).eq(1).click()
}
else {
cy.get(`:nth-child(${i}) > .room-type`).click()
}
cy.get('.spinner').should('not.exist')
cy.get('.contacts').then($contacts => {
if ($contacts.attr('style') != 'display: none;') {
//I want to break the loop here if condition is met
}
})
}
})
我相信關於 go 的最佳方法是遞歸方法。 使用遞歸方法,您的同步和異步代碼問題將自動解決。 所以你可以用下面這樣的方法來解決這個問題。 以下代碼可能無法正常工作,您可能需要相應地進行一些更改。 如果你想避免同步異步代碼問題,主要的想法是嘗試使用遞歸方法
cy.get("@count").then(($count) => {
test_recusive($count);
});
export const test_recusive = (count) => {
if (i == 1) {
cy.get(`:nth-child(${i}) > .room-type`).eq(1).click();
} else {
cy.get(`:nth-child(${i}) > .room-type`).click();
}
cy.get(".spinner").should("not.exist");
cy.get(".contacts").then(($contacts) => {
if ($contacts.attr("style") != "display: none;") {
//I want to break the loop here if condition is met
return;
} else {
return test_recusive(count - 1);
}
});
現在,您代碼中的所有調用都將是同步調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.