带有protractorjs的Angular 2失败:等待Protractor与页面同步时出错:" window.getAllAngularTestabilities不是函数"

时间:2016-06-27 09:42:57

标签: javascript angularjs angular protractor

[测试angular 2 web app]

设置为true时browser.ignoreSynchronization = false发生此错误,此错误不会发生,为什么会这样?

我的量角器配置中也设置了useAllAngular2AppRoots: true

2 个答案:

答案 0 :(得分:7)

量角器在WebDriverJS之上运行。 WebDriverJS是一个Javascript接口,相当于Java的Webdriver,让您可以通过编程方式控制浏览器,从而有助于编写自动化测试用例

使用WebDriverJS测试Angular应用程序的问题在于Angular有自己的事件循环,与浏览器分开。这意味着当您执行WebDriverJS命令时,Angular可能仍在执行其操作。

解决这个问题的方法是告诉WebDriverJS等待任意时间(即3000毫秒),以便Angular完成渲染工作,但这不是正确的做事方式。因此创建了Protractor来同步你的使用Angular的事件循环进行测试,推迟运行下一个命令,直到Angular完成处理前一个命令为止。

但是这里有一个问题,当你测试非角度应用程序时,这会成为问题,即使没有Angular来完成它的循环,Protractor也会继续等待角度同步,并且会抛出你正在观察的错误!

因此,对于非Angular页面,您可以通过设置browser.ignoreSynchronization = true告诉Protractor不要查找Angular - 实际上这意味着您只是使用WebDriverJS。

因此,当Protractor在您的页面上找不到Angular时,将其添加到您的配置中,您将放弃所有使得测试Angular应用程序比使用简单的WebDriverJS更容易的方法。是的,在所有命令可能正常工作后添加browser.sleep,但是它很麻烦,只要Angular占用的时间超过你设置的暂停时就会中断,并且会使你的测试花费的时间过长。

结论:在测试不使用Angular的网页时,仅使用browser.ignoreSynchronization = true

参考: https://vincenttunru.com/Error-Error-while-waiting-for-Protractor-to-sync-with-the-page/

答案 1 :(得分:0)

您应该绝对确保您的网页只在测试中加载一次。我们遇到了这个问题,登录模型导致加载的页面在第一次加载完成后立即重新加载 Angular 2应用程序的boostrap代码中。这导致各种不可预测的行为,测试失败,超时或上述错误 - 或运行正常。

因此,请确保在测试之前有一致的页面生命周期。