Selenium Java等待AngularJS v1.6加载方法失效,求解决方案
问题背景
已知存在多份同主题技术讨论帖,但目前检索到的所有解决方案均无法适配AngularJS v1.6版本。
已尝试的实现方案与故障表现
方案1:基于$browser服务的异步等待实现
public void waitForAngularRequestsToFinish() { while ((boolean) jsExec.executeScript( "return (typeof angular !== 'undefined')? true : false;")) { jsExec.executeAsyncScript( "var callback = arguments[arguments.length - 1];" + "angular.element(document.body).injector().get('$browser').notifyWhenNoOutstandingRequests(callback);"); } }
故障表现:该实现会直接陷入死循环,无法正常执行后续流程。
方案2:基于$http待处理请求计数的轮询实现
private void waitForAngularLoad() { String angularReadyScript = "return angular.element(document).injector().get('$http').pendingRequests.length === 0"; angularLoads(angularReadyScript); } public void waitUntilAngularReady() { try { Boolean angularUnDefined = (Boolean) jsExec.executeScript("return window.angular === undefined"); if (!angularUnDefined) { Boolean angularInjectorUnDefined = (Boolean) jsExec.executeScript("return angular.element(document).injector() === undefined"); if (!angularInjectorUnDefined) { poll(20); waitForAngularLoad(); poll(20); } } } catch (WebDriverException ignored) { } }
故障表现:该方案执行后无任何生效表现,无法达到等待Angular空闲的预期效果。
当前诉求
目前已在该问题上完全陷入瓶颈,所有尝试的方法均无法正常运行,需要可适配AngularJS v1.6版本的可行解决思路或落地实现方案。
内容的提问来源于stack exchange,提问作者Kinder9211
相关产品推荐
相关产品推荐

