2017-03-07 9 views
12

我很好奇waitForAngularEnabled()是如何工作的? 虽然看起来并不复杂,但我无法在任何地方得到满意的答案。所以希望有人帮助我清除。waitForAngularEnabled如何工作?

我的目标是检查标准并暂停/锁定运行测试,直到满足标准。例如,这里是例子。

A.暂停运行测试,并等待页面被载入

... 
    let theElement = ...; 
    browser.waitForAngularEnabled(false); 
    browser.wait(protractor.ExpectedConditions.presenceOf(theElement)); 

B.使用browser.wait()时,另一种方法类似用途与一个

browser.wait(() => { 
     browser.waitForAngularEnabled(false); 
     return browser.isElementPresent(by.id('the-element-id')); 
    }, timeout); // timeout may not be given 

所以问题是:

  1. 一旦waitForAngularEnabled(false)被调用会发生什么? (一旦条件满足或超时发生在我的情况)
  2. 我应该还原waitForAngularEnabled(true)以继续正常测试吗?
  3. 如果我该做,该放哪里?

希望能得到一些背景原理明确的答案。

谢谢!

+0

您是否看到量角器的API文档? http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngular AND http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngularEnabled –

+1

是的,我做了,但我并不满意。 你能否回答问题1? 在此先感谢。 – first87

+0

要回答问题#1,我们需要知道为什么你要把它关掉。您是否在Angular结束时获得与$ http或$ timeout轮询相关的超时?另外,看起来这个函数只是'browser.ignoreSynchronization'的替代品,并且这在'waitForAngular()'函数中用来决定是否使用它。这就是两个 – Gunderson

回答

13

1.一旦waitForAngularEnabled(false)被调用会发生什么? (一旦标准是满足或超时发生在我的情况)

根据经验我发现,这似乎导致量角器表现为单纯的webdriver。它不等待Angular“安顿下来”(没有挂起的HTTP请求或查看更新),这是true的行为。相反,如果您使用false设置,则需要使用ExpectedConditions或类似方法来验证可靠地执行测试步骤的先决条件,就如同使用普通的Webdriver测试一样。

2.我应该还原waitForAngularEnabled(true)以继续正常测试吗?

是的。然而,我发现在量角器5.1.1和5.1.2中,无论是否使用控制流,在相同的执行过程中分散不同的waitForAngularEnabled值似乎会产生不可预知的结果;即启用状态不遵循与其他量角器/ Webdriver调用相同的异步语义。到目前为止,我的结论是,您无法在同一个执行中可靠地混合waitForAngularEnabled(false)和waitForAngularEnabled(true)。我怀疑这是一个量角器错误,但我还没有开发出一个简单可靠的测试来证明它支持提交量角器问题。有一个可能相关的问题here,现在已关闭但未完全确诊。

3.如果我该做,该放哪里?

“之前”您做需要恢复等待角语义的量角器/ Webdriver调用。但是,如上所述,目前尚不清楚您是否可以可靠地保证在true设置的背景下真正地进行此类呼叫。

如果你必须有一些测试,使用false和其他true,你可以在不同的执行运行它们(独立的进程;不相同protractorng e2e命令来运行它们)。采取这种方法时我没有遇到任何问题。

+0

感谢您的回答。他们足够丰富,对我非常有帮助,因此我可以用一些有用的惯例与量角器一起工作。再次感谢,威尔。 – first87

+0

太好了。希望随着更多的官方信息出现,或者错误被提交或修复,我们可以改进这一点。 – Will

+0

我遇到了在Angular 4中使用'waitForAngularEnabled(true)'的问题,类似于[this issue](https://github.com/angular/protractor/issues/4233)。 – Will