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

如何检测AngularJS应用程序何时完成使用JavaScript加载页面?,javascript,python,angularjs,selenium,robotframework,Javascript,Python,Angularjs,Selenium,Robotframework,我正在尝试编写机器人框架测试,以涵盖第三方AngularJS应用程序的某些用例 我需要使用Python 3.5+和SeleniumLibrary(而不是旧的Selenium2库) 我尝试将wait_until_angular_ready关键字from调整为在该库的上下文之外工作,并将其更新为使用Python 3.5+和SeleniumLibrary 关键字在Angular就绪时执行以下JavaScript检查,但它似乎总是立即返回true var cb = arguments[arguments

我正在尝试编写机器人框架测试,以涵盖第三方AngularJS应用程序的某些用例

我需要使用Python 3.5+和SeleniumLibrary(而不是旧的Selenium2库)

我尝试将wait_until_angular_ready关键字from调整为在该库的上下文之外工作,并将其更新为使用Python 3.5+和SeleniumLibrary

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

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)

我是否在这里犯了错误,或者这不是检查angular何时完成页面渲染的正确方法?我承认我对AngularJS不太熟悉。你可以使用文档。readyState,如果页面呈现完整,它将返回“complete”,作为响应

您可能已经解决了此问题,但是如果将来有人遇到同样的不便,可以在Robot框架中使用此库进行Angular:

这不是一个正确的问题,因为没有“Angular完成渲染”的特定时刻。例如,不断刷新图形的仪表板,何时完成渲染?它总是取决于特定的情况,但大多数时候都有一些初始状态可以等待。它无法被追踪。您可以使用一些通用技术,例如等待窗口
加载
事件,每隔一秒左右检查一次,直到页面稳定,等等。当然,一定有某种方法可以做到这一点,否则是如何工作的?通过使用类似于我列出的通用技术,通知WhenNoutstandingRequests是其中之一。没有准确的方法可以做到这一点。如果没有页面呈现到的特定初始状态,所有这些操作都将失败,如仪表板示例中所示。通常,在e2e/验收测试中,您不应该担心应用程序状态(Angular应用程序可能已初始化,但您所追求的指令可能未初始化),而应该轮询DOM中的特定元素(例如,请参阅如何编写量角器测试)。在您的代码中,
| Angular.injector(['ng'])
catch(ex){$inj=Angular inj.injector(['ng'])
否则{cb(true)}
片段将导致误报。如果应用程序处于生产模式,这将不起作用。@Kittenmittons:您能试试这个吗。。。?