超时问题可能是 browser.sleep() 和 browser.waitForAngular 的结果吗?

Can the time out issue be the consequence of browser.sleep() and browser.waitForAngular?

在量角器脚本中,我总是遇到超时问题,即使我放了一个很大的 time out jasmine intervalallscripttimeout... 在某些地方,我不得不等到元素出现,就像在主页中一样,直到 url 完全加载。

超时问题可以是

的后果吗

如果是这样,我该如何解决这个问题?

谢谢,

是的,它们可能是 -- browser.sleep() 只有在您的睡眠时间超过您的 Jasmine 超时间隔(默认为 30 秒)时才会超时。

browser.waitForAngular() 会自动应用于 Protractor 的每个 webDriver 操作,因此您不需要调用它。如果这个时间结束,那么您的应用程序仍在同步某些内容。

如果花费的时间太长,这两者都会导致 A Jasmine spec timed out. Resetting the WebDriver Control Flow. 之后是 Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

我不确定你会如何解决它 - 你有很多关于超时的问题(有充分的理由),但在这一点上我认为你需要使用 browser.ignoreSynchronization = true; 并对待你的如果您遇到这么多超时问题,请将应用设为非 Angular。某些东西正在阻止同步完成。

您可以通过扩展 Protractor 的功能来避免显式 browser.sleep() 的功能,从而在非 Angular 应用程序上无缝地创建和执行多种辅助方法。例如,下面的代码暂停测试执行,直到 isPresent returns 为真(或直到超过我指定的 timeout 失败)

Util.prototype.waitForElementPresent = function (el, time) {
    var timeout = time || 0,

    return browser.wait(function() {
        return el.isPresent();
    }, timeout)
};