运行C#Selenium&量角器测试Angular 2 CLI App

时间:2017-02-03 12:04:09

标签: .net selenium protractor angular-cli protractor-net

我正在尝试使用Protractor for .NET运行用C#(Visual Studio 2015)编写的Selenium测试。这适用于我在网上找到的任何随机公共Angular2应用程序。

但是,它不适用于我们公司正在构建的Angular2应用程序。每个简单的'FindElement'命令超时(在我设置的时间范围之后)。

前端团队告诉我他们正在使用Angular-CLI,它已经内置了量角器,并且非常精彩。我不能以我想要的方式测试这个吗?或者是否有一些我缺少的设置?

感谢您的帮助!

3 个答案:

答案 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行)

在我的理解和我尝试的内容中,在最后一行中,“减量”的调用应该是“减量()”。否则,将不会调用递减函数,也不会发生回调。

到目前为止,这对我来说还不错,我不会再遇到超时了。另一方面,现在自动等待似乎也没有那么好用。但我刚刚发现这种解决方法,并将继续使用它。

更新:上述“修复”无效。它确实可以防止超时,但它也会阻止量角器正常工作;)