如何检测AngularJS应用程序何时使用JavaScript加载页面?

时间:2018-04-18 17:02:11

标签: javascript python angularjs selenium robotframework

我正在尝试编写Robot Framework测试来涵盖第三方AngularJS应用程序的某些用例。

我要求我需要使用Python 3.5+和SeleniumLibrary(而不是旧的Selenium2Library)。

我尝试将https://github.com/rickypc/robotframework-extendedselenium2library中的wait_until_angular_ready关键字调整为在此库的上下文之外工作,更新它以使用Python 3.5+和SeleniumLibrary。

该关键字执行以下JavaScript以检查Angular何时就绪,但它似乎总是立即返回

var cb = arguments[arguments.length-1];
if(window.angular){
  var $inj;
  try {
    $inj = angular.element(document.querySelector('[data-ng-app],[ng-app],.ng-scope')
      ||document).injector()
      ||angular.injector(['ng'])
  } catch(ex) {
    $inj = angular.injector(['ng'])
  };
  $inj.get = $inj.get||$inj;
  $inj.get('$browser').notifyWhenNoOutstandingRequests(function() {
    cb(true) // it's always returning here
  })
} else {
  cb(true)
}

这是从我的wait_until_angular_ready关键字版本中调用的,该关键字位于SeleniumLibrary WaitingKeywords类的子类中。

执行Js的代码看起来像

WebDriverWait(self.driver, 100, 0.1). \
  until(lambda driver: driver.execute_async_script(script), error)

我在这里犯了错误,或者这不是检查角度完成呈现页面的正确方法吗?我承认我对AngularJS不是很熟悉

2 个答案:

答案 0 :(得分:2)

可能你解决了这个问题,但如果将来有人有同样的不便,可以在 Robot 框架中将这个库用于 Angular:https://github.com/Selenium2Library/robotframework-angularjs

答案 1 :(得分:0)

您可以使用 document.readyState ,如果页面完整呈现,它将返回“完整”作为响应。