我正在尝试编写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不是很熟悉
答案 0 :(得分:2)
可能你解决了这个问题,但如果将来有人有同样的不便,可以在 Robot 框架中将这个库用于 Angular:https://github.com/Selenium2Library/robotframework-angularjs
答案 1 :(得分:0)
您可以使用 document.readyState ,如果页面完整呈现,它将返回“完整”作为响应。