簡體   English   中英

如何打破賽普拉斯的 then() function 中的循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM