我正在尝试使用Protractor for.NET运行用C#(Visual Studio 2015)编写的Selenium测试。这可以与我在网上找到的任何随机的公共Angular2应用程序配合使用。
但是,它不适用于我们公司正在构建的Angular2应用程序。每个简单的"FindElement"命令都会超时(在我设置的时间段之后)。
前端团队告诉我,他们正在使用Angular-CLI,它已经内置量角器,一切都很好。难道我不能用我想要的方式测试一下吗?或者我可能缺少一些设置?
谢谢你的帮助!
只是为了完成这件事:问题已经解决了。就像BBaia在上面的评论中所说的那样。在Angular 2/4中,现在对事物的称呼有所不同,但原理是一样的。
测试中的应用程序不断检查更新的数据(每隔几毫秒),Angular从未进入稳定状态。Protractor的WaitForAngular方法正在等待Angular稳定,因此超时。
前端开发人员帮助我将持续的轮询转移到Angular之外,并且只允许它在数据实际发生变化时将更新的信息反馈到Angular中。
这里有两行JavaScript,可以在浏览器控制台中执行,以检查应用程序是否处于稳定状态:
var testabilities = window.getAllAngularTestabilities();
testabilities[0].isStable();
我也在这篇博客文章中对此进行了总结。
谢谢!
添加以下行也可以帮助您
ngDriver.IgnoreSynchronization = true;
ngDriver.WaitForAngular();
在SetUp()方法中添加此项,或尝试在您面临问题的行中使用
我尝试了一些东西,得出了以下结论:
我得到的超时来自Protractor的"WaitForAngular"方法。现在我只是一个测试人员,对JaveScript一无所知,但我认为Protractor的"clientsidescripts.js"文件可能有问题,因此Protractor for.NET的"clientsidescripts.cs"也有问题,我正在使用:
else if (window.getAllAngularTestabilities) {
var testabilities = window.getAllAngularTestabilities();
var count = testabilities.length;
var decrement = function() {
count--;
if (count === 0) {
callback();
}
};
testabilities.forEach(function(testability) {
testability.whenStable(decrement);
});
(即Protractor中的第156-167行/Protractor net中的第99-110行)
根据我的理解和我的尝试,在最后一行中,"减量"的调用应该是"减量()"。否则,减量函数将不会被调用,回调也不会发生。
到目前为止,这对我来说很好,我不再被暂停所困扰。另一方面,自动等待现在似乎也没有那么好用。但我刚刚找到了这个工作,并将继续玩下去。
更新:上述"修复程序"不起作用。它确实可以防止超时,但也可以防止Protractor正常工作;)