【发布时间】:2016-06-27 09:42:57
【问题描述】:
[测试 Angular 2 网络应用]
browser.ignoreSynchronization = false 设置为 true 时会出现此错误,但不会出现此错误,这是为什么呢?
我还在量角器配置中设置了useAllAngular2AppRoots: true。
【问题讨论】:
标签: javascript angularjs angular protractor
[测试 Angular 2 网络应用]
browser.ignoreSynchronization = false 设置为 true 时会出现此错误,但不会出现此错误,这是为什么呢?
我还在量角器配置中设置了useAllAngular2AppRoots: true。
【问题讨论】:
标签: javascript angularjs angular protractor
Protractor 在 WebDriverJS 之上运行。 WebDriverJS 是一个相当于 Java 的 Webdriver 的 Javascript 接口,可以让您以编程方式控制浏览器,从而有助于编写自动化测试用例
使用 WebDriverJS 测试 Angular 应用程序的问题是 Angular 有自己的事件循环,与浏览器分开。这意味着当你执行 WebDriverJS 命令时,Angular 可能仍在做它的事情。
解决此问题的方法是告诉 WebDriverJS 等待任意时间(即 3000 毫秒),以便 Angular 完成其渲染工作,但这不是正确的做事方式。因此,创建 Protractor 是为了同步您的使用 Angular 的事件循环进行测试,方法是推迟运行下一个命令,直到 Angular 处理完上一个命令。
但是这里有一个问题,当您测试非 Angular 应用程序时,这会成为问题,即使没有 Angular 完成其周期,量角器也会继续等待 Angular 同步,并且会抛出您正在观察的错误!
因此,对于非 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/
【讨论】:
您绝对应该确保您的页面在测试中只加载一次。我们在登录模型中遇到了这个问题,它导致加载的页面在第一次加载完成后立即重新加载在 Angular 2 应用程序的boostrap 代码中。这会导致各种不可预知的行为,测试因超时或上述错误而失败 - 或运行正常。
因此,请确保您在测试之前拥有一致的页面生命周期。
【讨论】: