我需要等待特定文本出现在我的页面中,如果不存在,我需要重新加载页面并重试 [可能需要等待最多 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,但没有成功
我不相信
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')