簡體   English   中英

打破柏樹中的if循環

[英]Break if loop in cypress

我們有一個場景如下

iterate over name elements in the page
 if(name.text() == expName)
{
name.click()
exit from if loop
}
else
{
createName()
}

我如何在 cypress 中實現這一點,因為 return false 沒有從 if 循環中退出。 這是我嘗試過的代碼

export function addProtocol(protocolName, protocolStatus) {
  let flag = "false";
  subject.view({ name: "ProtocolsExplorerList" }).as('currentView');
  cy.get('@currentView').find('td textarea').each($el => {
    cy.wrap($el).invoke('val').then($value => {
      console.log("valueee:" + $value);
      if ($value == protocolName) {
        cy.get($el).click();
        flag = "true";
        return false;
      }
    })
  })

  if (flag == "false") {

    subject.button({ class: "New" }).click();
    subject.field("Name").type(protocolName);
    subject.field("Status").setCaption(protocolStatus);
    save();
    cy.contains(protocolName).click();

  }

}

請問有什么建議嗎? 謝謝。

文檔特別指出:

您可以通過在回調 function 中返回 false 來提前停止 .each() 循環。

所以很可能還有其他事情發生。

問題是您不會從each回調中返回false 您從then回調中返回false then回調通常異步運行,這意味着回調在each完成迭代后執行。

我不熟悉賽普拉斯,但假設他們在 collections 上實現迭代器協議,您可以使用:

const textareas = cy.get('@currentView').find('td textarea');

for (const $el of textareas) {
  const $value = await cy.wrap($el).invoke('val');
  console.log("valueee:" + $value);
  if ($value == protocolName) {
    cy.get($el).click();
    flag = "true";
    break;
  }
}

您必須使包裝 function 成為async function以啟用await的使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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