Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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 如何有量角器可靠的结果?_Javascript_Angularjs_Testing_Selenium Webdriver_Protractor - Fatal编程技术网

Javascript 如何有量角器可靠的结果?

Javascript 如何有量角器可靠的结果?,javascript,angularjs,testing,selenium-webdriver,protractor,Javascript,Angularjs,Testing,Selenium Webdriver,Protractor,我正在使用量角器(V1.3.1)为我的Angular 1.2.26应用程序运行E2E测试 但有时,测试是可以的,有时不是。有时检查似乎是在显示更新之前完成的(或类似“同步”问题)。 我尝试了很多选择: 添加browser.driver.sleep说明 使用browser.executeScript('$.fx.off=true')禁用效果 添加browser.waitForAngular()说明 没有成功 使用量角器进行可靠E2E测试的最佳实践是什么 JM.每当我遇到类似问题时,我都会使用w

我正在使用量角器(V1.3.1)为我的Angular 1.2.26应用程序运行E2E测试

但有时,测试是可以的,有时不是。有时检查似乎是在显示更新之前完成的(或类似“同步”问题)。 我尝试了很多选择:

  • 添加
    browser.driver.sleep
    说明
  • 使用
    browser.executeScript('$.fx.off=true')禁用效果
  • 添加
    browser.waitForAngular()
    说明
没有成功

使用量角器进行可靠E2E测试的最佳实践是什么


JM.

每当我遇到类似问题时,我都会使用with()。通常有一组内置的预期条件就足够了,但您可以轻松定义自定义的预期条件

例如,等待某个元素变为可见:

几点注意:

  • 如果不满足条件并引发超时错误,可以指定自定义错误消息,请参阅:

  • 您可以将
    EC
    设置为指向
    量角器的全局可用变量。ExpectedConditions
    。将此行添加到配置中的
    onPrepare()

    onPrepare: function () {
        global.EC = protractor.ExpectedConditions;
    }
    
  • 有关自定义预期条件的示例,请参见


在使用量角器进行测试时,另一个非常重要的点是了解控制流。您可以在此处找到解释和代码示例:


<> P.Marc

有两件事要考虑。

首先,您应该正确地排列所有量角器动作的顺序(正如@jmcollin92所暗示的)。为此,我通常使用
。然后在每个步骤上使用

第二个重要的事情是确保新的测试只在前一个测试完成后才开始

如果您使用最新版本的量角器,则可以使用Jasmine 2.x及其支持来发出测试完成的信号:

it('should do something', function(done) {
   clicksomething().then(function() {
     expect(...);
     done();
   });
});
这里调用
done
参数来表示测试准备就绪。如果不这样做,量角器将安排
clicksomething
命令,然后立即进行下一个测试,仅在
clicksomething
完成后返回当前测试

由于通常两个测试都检查并可能修改同一个浏览器/页面,因此如果您让它们同时发生,您的测试将变得不可预测(一个测试单击到下一个页面,而另一个测试仍在检查上一个页面)

如果您使用的是早期版本的量角器(如您所示为1.3),则可以使用Jasmine 1.3
运行
等待函数来模拟此行为


请注意,使用量角器的全部要点是,量角器应该知道角度测量何时完成。因此,原则上,应该不需要调用
waitForAngular
(我自己的测试套件有几十个场景,其中不包括一个wait/waitForAngular)。测试中的应用程序越符合Angular的设计原则,您需要的Angular的等待时间就越少。

我想补充一点,禁用ngAnimate可能还不够。您可能还必须通过注入CSS()来禁用所有过渡动画。

谢谢您的解决方案!我将尝试这个,但我必须更新我的量角器版本。我会和你保持联系的,非常有趣!我用的是摩卡咖啡,我想这里解释的“完成”原则对摩卡咖啡是有效的。我自己没有用过摩卡咖啡,但我认为Jasmine 2.x采用了摩卡咖啡的
done
方法。
onPrepare: function () {
    global.EC = protractor.ExpectedConditions;
}
it('should do something', function(done) {
   clicksomething().then(function() {
     expect(...);
     done();
   });
});