我们使用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完成。有什么建议?
如果是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应用程序(不仅,而且 最适合 )。