Cypress 等待文本出现在页面上

问题描述 投票:0回答:1

我需要等待特定文本出现在我的页面中,如果不存在,我需要重新加载页面并重试 [可能需要等待最多 3 分钟]。我决定使用 waitUntil 插件

 cy.waitUntil(
        () =>
    cy.get("tr").find("td").contains("mysampletext").reload(true),
        {
          verbose: true,
          errorMsg: "Campaign status failing to synchronize with clickhouse",
          timeout: 180000,
          interval: 30000,
        }
    );

我的问题是, contains 方法失败并退出而不重新加载。还有其他意见可以解决这个问题吗?我将无法使用任何元素,因为它非常动态

我尝试使用不同的递归方法而不是waituntil,但没有成功

cypress reload cypress-wait-until
1个回答
0
投票

我不相信

cy.waitUntil()
为现代赛普拉斯增加了很多价值(它是不久前写的)。

但是 Cypress 缺少的一件事是在超时重试期间执行类似

cy.reload()
的操作。

递归函数应该可以解决这个问题

function waitUntilWithReload(selector, expectedText, interval, error, iteration = 0) {

  if (iteration > 100) {   // set an upper limit to stop infinite retry
    throw new Error(error)
  }

  const text = Cypress.$(selector).text();
  if (text.includes(expectedText) {
    return
  }

  cy.wait(interval)
  cy.reload().then(() => {
    waitForText(selector, expectedText, interval, iteration + 1) 
  }
}

waitUntilWithReload('tr td', 'mysampletext', 30_000, 'Campaign status failing')
© www.soinside.com 2019 - 2024. All rights reserved.