我使用Protractor (v1.3.1)为我的角1.2.26应用程序运行E2E测试。
但有时,测试是可以的,有时不行。似乎有时检查是在更新显示(或类似于“同步”问题)之前完成的。我尝试了许多选择:
browser.driver.sleep
指令,browser.executeScript('$.fx.off = true')
禁用效果browser.waitForAngular()
指令但没有成功。
用量角器进行可靠的E2E测试的最佳实践是什么?
JM。
发布于 2015-03-19 18:00:13
每次遇到类似的问题,我都会使用browser.wait()
和“预期条件” (在量角器1.7中引入)。有一组内置的预期条件通常是足够的,但是您可以很容易地定义您的自定义预期条件。
例如,等待元素变得可见。
var EC = protractor.ExpectedConditions;
var e = element(by.id('xyz'));
browser.wait(EC.visibilityOf(e), 10000);
expect(e.isDisplayed()).toBeTruthy();
很少有人注意到:
EC
设置为指向protractor.ExpectedConditions
的全局可用变量。将这一行添加到配置中的onPrepare()
中:
onPrepare:函数() { global.EC = protractor.ExpectedConditions;}发布于 2015-03-29 18:12:21
在使用量角器进行测试时,另一个非常重要的问题是理解ControlFlow。您可以在这里找到解释和代码示例:什么时候我们应该使用.then与量角器承诺?
让-马克
发布于 2015-03-29 21:22:21
有两件事要考虑。
首先,您应该正确地排列所有量角器动作的顺序(正如@jmcollin92所暗示的那样)。为此,我通常在每一步都使用.then
。
第二件重要的事情是确保一个新的测试it(...)
只在上一个it(...)
完成之后才开始。
如果使用最新版本的Protractor,可以使用Jasmin2.x及其对测试完成信号的支持:
it('should do something', function(done) {
clicksomething().then(function() {
expect(...);
done();
});
});
在这里,调用done
参数来表示测试已经准备就绪。否则,Protractor将调度clicksomething
命令,然后立即继续进行下一个测试,只在clicksomething
完成后才返回到当前测试。
由于通常两个测试都检查并可能修改同一个浏览器/页面,所以如果允许它们同时发生,测试就变得不可预测(一个测试单击下一个页面,而另一个测试仍在检查前一个页面)。
如果您使用早期版本的Protractor (正如您所指出的那样),可以使用Jasmin1.3runs
和waitsFor
函数来模拟这种行为。
注意,使用量角器的全部要点是,量角器应该知道何时完成角。因此,原则上,不需要调用waitForAngular
(我自己的测试套件中有几十个场景不包括一个等待/等待waitForAngular)。测试中的应用程序越好地遵循Angular的设计原则,您应该需要的WaitForAngular
就越少。
https://stackoverflow.com/questions/29151557
复制相似问题