量角器 browser.wait 间歇性地阻止网站执行

protractor browser.wait intermittently blocks the website execution

我在 angularjs 应用程序上使用 Protractor 4.0.14。

我们正在执行一个异步调用,该调用需要 30 秒并带有加载条。所以我在等待那个时间之后出现的元素。加载栏总是达到 100%,然后由于 browser.wait 而间歇性地卡在 100%,但大多数时候它都能正常工作并显示我正在寻找的元素。

如果没有,它只是停留在 100%,超时,然后继续测试。只发生在量角器上,手动在浏览器上,它永远不会卡住。

it('Should wait for the end of the api call', function () {
    browser.wait(function () {
        return $('#loaded i.check').isPresent();
    }, 60000);
    expect($('#score button').isPresent()).toBe(true);
}, 61000);

我尝试将 ignoreSynchronization 设置为 true,我尝试使用 implicitlyWait,等待预期条件 "EC",使用 browser.driver.wait 而不是 browser.wait,睡眠,但没有任何改变问题。它有时会卡在加载栏上,阻止应用程序继续。

有什么建议吗?

编辑:不是量角器问题。我设法在常规 Chromium 浏览器中手动重现错误。

你可以做得更简单。您可以等待元素中的“100%”文本。 这里有一个代码:

return browser.wait(ExpectedConditions.textToBePresentInElement(element, '100%'), 60000);

您唯一需要做的就是将 element 替换为文本应该可见的对象。

顺便说一句。由于缺少 chai-as-promise 库,您的期望断言不起作用。

试试下面的代码。

var EC=protractor.ExpectedConditions;
var ele=$('#loaded i.check')

it('Should wait for the end of the api call', function () {
 browser.wait(EC.visibilityOf(ele),60000,"NOT VISIBLE");
 expect($('#score button').isPresent()).toBe(true);
});

这不是 docker 问题,因为我设法在没有量角器的情况下在 chromium 上重现了该错误。

the cause was a network error : err-network-changed