Javascript &引用;失败:等待量角器与页面同步时出错;在执行量角器测试时

Javascript &引用;失败:等待量角器与页面同步时出错;在执行量角器测试时,javascript,node.js,angularjs,angular,protractor,Javascript,Node.js,Angularjs,Angular,Protractor,我尝试在包含角度和非角度组件的web应用程序上执行一些量角器测试。 我的代码如下所示: describe("Test Name", function() { it("Test case", function() { // first execute steps on a non-Angular component browser.waitForAngularEnabled(false); // some test steps // then execute

我尝试在包含角度和非角度组件的web应用程序上执行一些量角器测试。 我的代码如下所示:

describe("Test Name", function() {
  it("Test case", function() {
    // first execute steps on a non-Angular component
    browser.waitForAngularEnabled(false);
    // some test steps

    // then execute tests on an Angular component, which opens in a new browser tab
    browser.waitForAngularEnabled(true);
    // some more test steps
    });
});
问题是,在运行上述测试后,浏览器启动并立即关闭,出现以下错误:

失败:等待量角器与页面同步时出错:“angularJS可测试性和角度可测试性都未定义。这可能是因为这是一个非角度页面,也可能是因为您的测试 涉及客户端导航,这可能会干扰量角器的引导。有关详细信息,请参阅“

当我删除
browser.waitForAngularEnabled(true)时从代码中,成功执行非角度组件的步骤,然后在“新建浏览器”选项卡中打开应用程序的角度组件,10秒钟内没有任何事情发生(未执行任何步骤),浏览器关闭并出现以下错误:

失败:等待在10007ms后超时


使用
browser.ignoreSynchronization=true与非角度ui交互时,因为它使量角器不等待角度承诺


browser.ignoreSynchronization=false
后接
browser.waitForAngular()与angular ui交互时

您可能应该考虑异步代码,并等待承诺得到解决。另外,添加到test函数,让selenium知道测试何时完成

另一个可能导致这种情况的原因是,在实际进入角度页面之前激活
waitForAngularEnabled
。我建议您在调用前加上一个调用,以检查页面上的内容是否已加载,这样您就知道angular在等待angular活动之前已准备好被量角器钩住

需要注意的是,量角器在
waitForAngularEnabled(true)
之后等待下一个操作来触发检查,如果稍后有人更改代码,依赖该操作可能会使问题变得不清楚

描述(“测试名称”,函数(){
it(“测试用例”,功能(完成){
//首先在非角度组件上执行步骤
browser.waitForAngularEnabled(false)
.然后(()=>/*步骤1*/)
.然后(()=>/*步骤2*/)
// ...

//您的量角器版本是否>6.0,如果不是,您的配置中是否声明了
SELEMIUM\u PROMISE\u MANAGER:false
?@mariobrosbb您可能还应该添加测试步骤以帮助我们帮助您:-)听起来像是一个异步问题。可能尝试使用
done
模式,或者将它们与async\wait或Promissions链接起来。
browser.ignoreSynchronization
已被弃用
browser.waitForAngularEnabled()
是当前所需的替换,我相信在
waitForAngularEnabled(true)之后
is set(设置)量角器仅在页面上有新的交互时才开始监控角度页面的稳定性,触发更改检测,因此设置
waitForAngularEnabled(true)是可以的(甚至是可取的)
在非角度页面上,如果您的下一个操作将带您进入角度页面。我认为您认为这是一个异步问题是正确的,OP可能已经禁用了控制流而没有realizing@DublinDev酷!我不知道:-)但是如果某个东西只适用于特定的情况,我通常不喜欢使用它。如果我编写的测试运行
waitForAngularEnabled(true)
由于下一步操作将我带到一个有角度的页面,一个月后有人在检查其他内容的导航之前添加了一行新行,它可能会在其他人不了解发生了什么情况的情况下中断。因此,我认为我更喜欢在这样做之前确保我确实在一个有角度的页面中。这将使代码更清晰,更简洁可推迟changes@DublinDev在答案中添加了一条注释:-)