簡體   English   中英

如果賽普拉斯沒有找到元素,是否可以繼續執行測試

[英]Is it possible to keep executing test if element wasn't found with Cypress

我有一個案例,我需要等待元素(廣告),如果它可見則需要單擊它,但如果在超時后未找到元素,則需要繼續執行測試。

如何處理 Cypress 的情況?

賽普拉斯說檢查條件元素的方式是元素存在

cy.get('body').then(($body) => {
  const modal = $body.find('modal')
  if (modal.length) {
    modal.click()
  }
})

很可能您將它放在測試的頂部,並且它運行得太快(沒有重試超時)。

您可以添加等待 30 秒,但每次測試都會延遲。

最好遞歸調用

const clickModal = (selector, attempt = 0) => {

  if (attempt === 100) return  // whole 30 seconds is up

  cy.get('body').then(($body) => {
    const modal = $body.find('modal')
    if (!modal.length) {
      cy.wait(300)  // wait in small chunks
      clickModal(selector, ++attempt)
    }
  })
  return             // done, exit
}

cy.get('body')
  .then($body => clickModal('modal'))

攔截廣告

最好的是,如果您可以在網絡選項卡中找到廣告的 url,請使用cy.intercept()捕獲它並將其存根以停止模式顯示。

我嘗試了上述解決方案,但似乎在某些情況下參數$body不能包含必要的元素,因為當我們調用cy.get('body')時它沒有被加載。 所以,我找到了另一個解決方案,通過 Cypress 使用 jQuery,這里是:

let counter = 0;
const timeOut: number = Cypress.config('defaultCommandTimeout');
  
  const sleep = (milliseconds) => {
    const date = Date.now();
    let currentDate = null;
    do {
      currentDate = Date.now();
    } while (currentDate - date < milliseconds);
  };

  while (true) {
    if (Cypress.$(element).length > 0 && Cypress.$(element).is(':visible')) {
      Cypress.$(element).click();
      break;
    } else {
      sleep(500);
      counter = counter + 500;
        if (counter >= timeOut) {
          cy.log(elementName+ ' was not found after timeout');
          break;
        }
    }
  }

暫無
暫無

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

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