Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带量角器JS的Angular 2失败:等待量角器与页面同步时出错:“0”;window.getAllAngularTestabilities不是一个函数;_Javascript_Angularjs_Angular_Protractor - Fatal编程技术网

Javascript 带量角器JS的Angular 2失败:等待量角器与页面同步时出错:“0”;window.getAllAngularTestabilities不是一个函数;

Javascript 带量角器JS的Angular 2失败:等待量角器与页面同步时出错:“0”;window.getAllAngularTestabilities不是一个函数;,javascript,angularjs,angular,protractor,Javascript,Angularjs,Angular,Protractor,[测试angular 2 web应用程序] 此错误发生在browser.ignoreSynchronization=false设置为true时,不会发生此错误,原因是什么 我还在量角器配置中设置了useAllAngular2AppRoots:true。量角器在WebDriverJ上运行。WebDriverJS是一个Javascript接口,相当于Java的Webdriver,让您可以通过编程控制浏览器,这反过来有助于编写自动化测试用例 使用WebDriverJS测试Angular应用程序的问题在

[测试angular 2 web应用程序]

此错误发生在
browser.ignoreSynchronization=false
设置为true时,不会发生此错误,原因是什么


我还在量角器配置中设置了
useAllAngular2AppRoots:true

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

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

解决方法之一是告诉WebDriverJS等待任意时间(即3000ms),以便Angular完成其渲染工作,但这不是正确的方法。因此,创建了量角器以使您的测试与Angular的事件循环同步,将下一个命令的运行推迟到Angular完成前一个命令的处理之后

但这里还有一个问题,当您测试非角度应用程序时,这会成为问题,量角器会一直等待角度同步,即使没有角度来完成其循环,并且会抛出您正在观察的错误

因此,对于非角度页面,您可以通过设置
browser.ignoreSynchronization=true
,告诉量角器不要查找角度,这实际上意味着您只是在使用WebDriverJ

所以,当量角器无法在页面上找到Angular时,将其添加到您的配置中,您就放弃了测试Angular应用程序比普通WebDriverJ更容易的所有功能。是的,在所有命令之后添加browser.sleep可能会起作用,但这很麻烦,一旦Angular所用的时间超过您设置的暂停时间,它就会中断,并使测试所用的时间过长

结论:仅在测试不使用角度的页面时使用
browser.ignoreSynchronization=true


参考:

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


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

很棒的总结!谢谢