Selenium selenium 等待 ajax 结束有哪些方法?

树叶 · 2022年06月09日 · 最后由 陈恒捷 回复于 2022年06月10日 · 5263 次阅读

如下代码,有时候并不能工作:

WebDriverWait wait = new WebDriverWait(dr, 60);
     wait.until(new ExpectedCondition<Object>() {

         @Override
         public Object apply(WebDriver webDriver) {
             System.out.println("当前ajax active 数量: " + ((JavascriptExecutor) webDriver).executeScript("return jQuery.active"));
             return ((JavascriptExecutor) webDriver).executeScript("return jQuery.active==0");
         }
     });

有时候会报错,

org.openqa.selenium.JavascriptException: javascript error: jQuery is not defined
  (Session info: chrome=102.0.5005.63)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'

而有时候就不会

另外一种等待 ajax 结束就是 等待某个元素出现,或者可点击,还有别的方法么?

最佳回复

从报错信息看,报错的时候 jQuery 这个库应该还没初始化完毕,所以 jQuery 这个全局变量暂时还不存在。你可以配合增加一些等待页面加载完毕的函数(比如判断 document.readyState )

另外,等待 ajax 结束我理解只是技术手段,因为除了 ajax 还有很多其他异步加载的手段。最终目的应该是等待某个你要操作的元素/控件加载完毕,再开始操作吧?如果是,可能对要操作的元素增加 selenium 的显式等待更合适一些。

PS:一楼这种评论让人反感,大家只是友情分享自己所知道的知识而已,没有义务或责任必须给你反馈的。而且工作忙起来没空回也很正常。既然是请教问题,请保持虚心请教的态度。

共收到 2 条回复 时间 点赞

就这么凉了吗?还是说我的问题太低级?
大家都对齐赋能去了?

从报错信息看,报错的时候 jQuery 这个库应该还没初始化完毕,所以 jQuery 这个全局变量暂时还不存在。你可以配合增加一些等待页面加载完毕的函数(比如判断 document.readyState )

另外,等待 ajax 结束我理解只是技术手段,因为除了 ajax 还有很多其他异步加载的手段。最终目的应该是等待某个你要操作的元素/控件加载完毕,再开始操作吧?如果是,可能对要操作的元素增加 selenium 的显式等待更合适一些。

PS:一楼这种评论让人反感,大家只是友情分享自己所知道的知识而已,没有义务或责任必须给你反馈的。而且工作忙起来没空回也很正常。既然是请教问题,请保持虚心请教的态度。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册