我使用 Selenium 2 和 Java 1.7 。 我想等待 HtmlUnitDriver ,直到我点击过滤器按钮完成ajax。
我的司机:
Webdriver driver = new HtmlUnitDriver(true);
过滤按钮并点击操作:
WebElement weFilterButton = driver.findElement(By.name("filterButton"));
weFilterButton.click();
我尝试了三种等待AJAX的方法。
第一
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ctl00_ContentPlaceHolder1_Reports1_ajaxloadingImage")));
第二
Boolean el = wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return (Boolean) js.executeScript("return document.readyState").toString().equals("complete");
}
});
虽然这不是一个好的解决方案
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
但不起作用。
修改
Selenium依赖是:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.45.0</version>
</dependency>
答案 0 :(得分:1)
使用以下代码。它检查JQuery是否处于活动状态并等待它处于活动状态。
Boolean isJqueryUsed = (Boolean)((JavascriptExecutor)driver).executeScript("return (typeof(jQuery) != 'undefined')"));
if(isJqueryUsed){
while (true){
// JavaScript test to verify jQuery is active or not
Boolean ajaxIsComplete = (Boolean)(((JavascriptExecutor)driver).executeScript("return jQuery.active == 0"));
if (ajaxIsComplete) break;
try{
Thread.sleep(100);
}catch (InterruptedException e) {}
}
}
答案 1 :(得分:0)
主要问题是你点击之后你必须等待ajax加载不可见不可见。这意味着你必须等待元素消失或隐藏。
你可以在ExpectedConditions中使用not
来实现这一点。它将返回一个布尔类型。如果确实你可以继续.Else增加等待时间,看看..
WebDriverWait wait = new WebDriverWait(driver, 60);
Boolean present = wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfElementLocated(By.id("ctl00_ContentPlaceHolder1_Reports1_ajaxloadingImage"))));
答案 2 :(得分:0)
尝试使用&#34;返回Ajax.activeRequestCount == 0&#34;