【发布时间】:2014-08-09 12:55:25
【问题描述】:
我处理的一些网站有大量的 ajax 请求。我计划在单击断言元素之前等待 Ajax 请求完成。目前我使用
try {
if (driver instanceof JavascriptExecutor) {
JavascriptExecutor jsDriver = (JavascriptExecutor)driver;
for (int i = 0; i< timeoutInSeconds; i++)
{
Object numberOfAjaxConnections = jsDriver.executeScript("return jQuery.active");
// return should be a number
if (numberOfAjaxConnections instanceof Long) {
Long n = (Long)numberOfAjaxConnections;
System.out.println("Number of active jquery ajax calls: " + n);
if (n.longValue() == 0L) break;
}
Thread.sleep(1000);
}
}
else {
System.out.println("Web driver: " + driver + " cannot execute javascript");
}
}
catch (InterruptedException e) {
System.out.println(e);
}
但它适用于 Ajax 请求,但不适用于任何具有 jQuery 库变体的类似请求。
注意:
document.readyState == 'complete'
它不适用于 Ajax 请求或任何其他类似的替代方案。
测试都不是由我编写的,也不属于单个 webapp。所以我无法编辑 webapp。
【问题讨论】:
-
你的意思是你在其他网站的ajax调用是不用jquery的?注入jquery的目的是什么?
-
问题是你为什么需要它
-
如果使用 vanilla 等其他库发送异步请求,jquery.active 是否仍然有效?如果不是,那么我问错了问题。
-
如果您的应用程序不使用 jquery,那么您没有任何将其注入应用程序的意义。
-
你检查过这个 SO 问题吗:How to check if HTTP requests are open in browser?
标签: java jquery ajax selenium webdriver