1

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

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

前端团队告诉我他们正在使用 Angular-CLI,它已经内置了量角器,而且非常棒。我不能按照我尝试的方式进行测试吗?或者我可能缺少一些设置?

谢谢你的帮助!

4

3 回答 3

1

只是为了完成这个:问题已经解决了。就像 BBaia 在上面的评论中所说的那样。现在在 Angular 2/4 中对事物的称呼有所不同,但原理是相同的。

被测应用程序确实不断检查更新的数据(每几毫秒),Angular 从未进入稳定状态。Protractor 的WaitForAngular方法正在等待 Angular 稳定,所以它超时了。

前端开发人员通过将持续轮询移到 Angular 之外来帮助我,并让它只在数据实际发生变化时才将更新的信息反馈给 Angular。

这里有两行 JavaScript 可以在浏览器的控制台中执行以检查应用程序是否处于稳定状态:

var testabilities = window.getAllAngularTestabilities();
testabilities[0].isStable();

我也在这篇博文中进行了总结。

谢谢!

于 2017-09-16T16:01:06.747 回答
0

添加以下行也可以帮助您

ngDriver.IgnoreSynchronization = true;
ngDriver.WaitForAngular();

在 SetUp() 方法中添加它或尝试在遇到问题的行使用

于 2019-07-29T09:22:30.797 回答
-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);
  });

(这是 Protractor 中的第 156-167 行 / Protractor-net 中的第 99-110 行)

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

到目前为止,这对我来说很好,我不再被超时所困。另一方面,自动等待现在似乎也没有那么好用了。但我刚刚找到了这个解决方法,并将继续使用它。

更新:上面的“修复”不起作用。它确实可以防止超时,但也可以防止量角器正常工作;)

于 2017-02-06T17:10:49.447 回答