Selenium 2等待AJAX在JAVA中完成

Selenium 2等待AJAX在JAVA中完成,java,unit-testing,selenium,selenium-webdriver,Java,Unit Testing,Selenium,Selenium Webdriver,我使用selenium2和java1.7。 我想等待我的HtmlUnitDriver,直到我单击过滤器按钮时ajax完成 我的司机: Webdriver driver = new HtmlUnitDriver(true); 过滤按钮并单击操作: WebElement weFilterButton = driver.findElement(By.name("filterButton")); weFilterButton.click(); 我尝试了三种方法来完成任务 第一: WebElement

我使用selenium2java1.7。 我想等待我的HtmlUnitDriver,直到我单击过滤器按钮时ajax完成

我的司机:

Webdriver driver = new HtmlUnitDriver(true);
过滤按钮并单击操作:

WebElement weFilterButton = driver.findElement(By.name("filterButton"));
weFilterButton.click();
我尝试了三种方法来完成任务

第一:

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");
    }
});
但这不是工作

编辑

硒依赖性是:

<dependency>
     <groupId>org.seleniumhq.selenium</groupId>
     <artifactId>selenium-java</artifactId>
     <version>2.45.0</version>
</dependency> 

org.seleniumhq.selenium
硒爪哇
2.45.0

主要问题是,单击某个内容后,必须等待ajax加载不可见。这意味着您必须等待元素淡出或隐藏

您可以通过在中使用
not
来实现这一点。它将返回一个布尔类型。如果为真,则可以继续。否则,请增加等待时间并查看

 WebDriverWait wait = new WebDriverWait(driver, 60);
   Boolean present = wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfElementLocated(By.id("ctl00_ContentPlaceHolder1_Reports1_ajaxloadingImage"))));

使用下面的代码。它检查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) {}
  }
}

尝试使用“return Ajax.activeRequestCount==0”

第一个通常是正确的,为什么不起作用?@tilois ajaxloadingImage无法禁用页面中的任何元素。我一次又一次地点击过滤按钮。嗨@Madhan,我试着看不见FelementLocated,你说的和你说的一样。但是它不起作用。先在firefox或chrome中尝试一下,然后看看……你有没有得到任何异常。你得到的返回值是多少……你确定在点击按钮后元素是可见的[ajax加载程序]吗?否则,你必须等待一段时间才能检查可见性这是为使用Prototype的人准备的
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) {}
  }
}