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

时间:2016-05-11 11:27:41

标签: angularjs jasmine timeout protractor appium

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

超时问题可以是

的后果吗?
  • browser.sleep(time_ms);
  • browser.waitForAngular();

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

Here the problem in details

谢谢,

1 个答案:

答案 0 :(得分:3)

是的,他们可以 - browser.sleep()只有在睡眠时间长于Jasmine超时间隔(默认为30秒)时才会超时。

Protractor会自动将

browser.waitForAngular()应用于每个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的功能,可以在非Angular应用程序上无缝创建和执行几种辅助方法,以避免显式browser.sleep()。例如,以下代码暂停测试执行,直到isPresent返回true(或直到超出我指定的timeout失败)

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

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