簡體   English   中英

在元素存在時執行,但在元素不存在時不失敗(賽普拉斯 E2E 測試)

[英]Act when element exists, but don't fail when it doesn't (Cypress E2E tests)

我正在 Cypress(版本 12.3.0)中編寫 E2E 測試。 我在多步驟創建過程中有一個包含表格的頁面,需要來自后端應用程序的一些數據。 在某些情況下(很少,但會發生)請求被卡住並且加載器永遠不會消失。 解決方法很簡單:go 回到上一步,回到“卡住”的表。 重新發送請求並且很可能會收到響應 - 流程和測試可以進一步進行。 如果加載程序不存在,則應該跳過來回(大多數時候)。

我設法使用下面的代碼解決了這個問題,但我想知道是否可以使用一些內置的賽普拉斯函數來完成它而無需顯式等待 不幸的是,我沒有在 Cypress 文檔和 StackOverflow 上找到任何內容。 我想也許我可以使用then function 來處理“有條件存在”的元素,但它在get上失敗了,這就是為什么我在jQuery祖先元素上使用find的原因。

  waitForTableData() {
    return cy.get('.data-table')
             .should('exist')
             .then(table => {
               if (this.loaderNotPresent(table)) {
                 return;
               }
               cy.wait(200)
                 .then(() => {
                   if (this.loaderNotPresent(table)) {
                     return;
                   }
                   cy.get('button')
                     .contains('Back')
                     .click()
                     .get('button')
                     .contains('Next')
                     .click()
                     .then(() => this.waitForTableData());
                 });
             });
  }

  loaderNotPresent(table: JQuery) {
    return !table.find('.loader')?.length;
  }

在我看來,您的代碼是您目前能做的最好的。

cy.wait(200)大小合適,也許小一點會更好 - 50 - 100 毫秒。 遞歸調用將為您提供與 Cypress 重試類似的行為(它也在內部等待,以免影響測試運行器)。

另一種方法是cy.intercept()並模擬后端,假設是后端卡住了。

如果加載僅在一小部分時間內失敗,也值得嘗試簡單的測試重試。

暫無
暫無

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

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