如何检测AngularJS应用程序何时完成使用JavaScript加载页面?
我正在尝试编写机器人框架测试,以涵盖第三方AngularJS应用程序的某些用例 我需要使用Python 3.5+和SeleniumLibrary(而不是旧的Selenium2库) 我尝试将wait_until_angular_ready关键字from调整为在该库的上下文之外工作,并将其更新为使用Python 3.5+和SeleniumLibrary 关键字在Angular就绪时执行以下JavaScript检查,但它似乎总是立即返回true如何检测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
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:您能试试这个吗。。。?