如果加载程序仍然存在于页面上,请重试等待

Retry wait if loader is still present on the page

我正在使用加载数据时间非常不稳定的应用程序。我已经将 waitFor 超时设置为 15 秒,我不想再增加它了。 我的测试在 CI 中 运行 进行,而且我经常不得不重新 运行 一切,因为一个元素没有及时加载。

此外,我不想使用某些 bail 技巧或重试整个测试。

我的想法是等待元素,如果带有定位器 .loader 的元素仍然存在于页面上,我想重试等待。

所以我正在寻找实现这个的最佳方法(也许是 Promise?)

function waitWithRetry(elementLocator, retryCount) {
    while (retryCount > 0) {
        try {
            $(`${elementLocator}`).waitForDisplayed();
        } catch (e) {
            if ($('.loader').isDisplayed()) {
                retryCount--;
            } else {
                throw new Error(e);
            }
        }
    }
}

下面的代码将重试,直到加载器元素可用,一旦元素不可见,将重试 retryCount 次。

function waitWithRetry(elementLocator, retryCount) {
    while (retryCount > 0) {
        try {
            $(`${elementLocator}`).waitForDisplayed();
        } catch (e) {
            if ($('.loader').isDisplayed() && retryCount === 1) {
               throw new Error(e);
            }
             retryCount--;
        }
    }
}