我正在尝试使用Protractor for .NET运行用C#(Visual Studio 2015)编写的Selenium测试。这适用于我在网上找到的任何随机公共Angular2应用程序。
但是,它不适用于我们公司正在构建的Angular2应用程序。每个简单的'FindElement'命令超时(在我设置的时间范围之后)。
前端团队告诉我他们正在使用Angular-CLI,它已经内置了量角器,并且非常精彩。我不能以我想要的方式测试这个吗?或者是否有一些我缺少的设置?
感谢您的帮助!
答案 0 :(得分:1)
只是为了完成这个:问题已经解决了。就像BBaia在上面的评论中所说的那样。现在在Angular 2/4中对事物的看法不同,但原理是相同的。
测试中的应用程序不断检查更新的数据(每几毫秒),Angular从未进入稳定状态。量角器的 WaitForAngular 方法正在等待Angular变得稳定,因此它会超时。
前端开发人员通过在Angular之外移动常量轮询来帮助我,如果数据实际发生了变化,它只会将更新后的信息反馈给Angular。
这里有两行JavaScript可以在浏览器的控制台中执行,以检查应用程序是否处于稳定状态:
var testabilities = window.getAllAngularTestabilities();
testabilities[0].isStable();
我也在此blog post中对其进行了总结。
谢谢!
答案 1 :(得分:0)
添加以下几行也可以帮助您
ngDriver.IgnoreSynchronization = true;
ngDriver.WaitForAngular();
在SetUp()方法中添加此代码,或尝试在遇到问题的行中使用
答案 2 :(得分:-1)
我尝试了一些事情并得出以下结论:
我得到的超时来自量角器的'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);
});
(量角器中的156-167行/量角器网中的99-110行)
在我的理解和我尝试的内容中,在最后一行中,“减量”的调用应该是“减量()”。否则,将不会调用递减函数,也不会发生回调。
到目前为止,这对我来说还不错,我不会再遇到超时了。另一方面,现在自动等待似乎也没有那么好用。但我刚刚发现这种解决方法,并将继续使用它。
更新:上述“修复”无效。它确实可以防止超时,但它也会阻止量角器正常工作;)