一尘不染

检测Angular 2已完成运行

selenium

我们使用Selenium WebDriver来自动化基于UI的测试。我们的挑战之一是检测页面何时真正完成加载,而Angular
1在这方面也是一个挑战。我们最终执行了这段代码,专门用于检测Angular 1是否完成:

if(typeof window.angular !== \"undefined\")
{
  var injector = window.angular.element(\"*[ng-app]\").eq(0).injector();

  if(injector)
  {
    var $rootScope = injector.get(\"$rootScope\");
    var $http = injector.get(\"$http\");

    if($rootScope.$$phase === \"$apply\" || $rootScope.$$phase === \"$digest\" || $http.pendingRequests.length !== 0)
    {
      return false;
    }
  }
}

我们正在测试的应用程序最近已切换为使用Angular2。上面的代码段不等待Angular 2完成。有什么建议?


阅读 254

收藏
2020-06-26

共1个答案

一尘不染

如果是Angular 2,则应等待 所有Angular 2应用程序
“测试能力”
稳定性

functions.waitForAllAngular2 = function(callback) {
  try {
    var testabilities = window.getAllAngularTestabilities();
    var count = testabilities.length;
    var decrement = function() {
      count--;
      if (count === 0) {
        callback();
      }
    };
    testabilities.forEach(function(testability) {
      testability.whenStable(decrement);
    });
  } catch (err) {
    callback(err.message);
  }
};

摘自量角器源代码。量角器是WebDriverJS
javascript硒绑定的包装器;设计用于测试AngularJS应用程序(不仅,而且 最适合 )。

2020-06-26