Javascript 如何有量角器可靠的结果?
我正在使用量角器(V1.3.1)为我的Angular 1.2.26应用程序运行E2E测试 但有时,测试是可以的,有时不是。有时检查似乎是在显示更新之前完成的(或类似“同步”问题)。 我尝试了很多选择: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
- 添加
说明browser.driver.sleep
- 使用
browser.executeScript('$.fx.off=true')禁用效果
- 添加
说明browser.waitForAngular()
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();
});
});