java - Selenium 2 等到 AJAX 在 JAVA 中完成

标签 java unit-testing selenium selenium-webdriver

我使用 Selenium 2Java 1.7。 我想等待我的 HtmlUnitDriver 直到我点击过滤器按钮时 ajax 完成。

我的司机:

Webdriver driver = new HtmlUnitDriver(true);

过滤按钮和点击 Action :

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> 

最佳答案

使用下面的代码。它检查 JQuery 是否处于 Activity 状态并等待它处于 Activity 状态。

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) {}
  }
}

关于java - Selenium 2 等到 AJAX 在 JAVA 中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102543/

相关文章:

java - 每 3 秒运行一次的线程

java - JPA 具有延迟加载字段的对象集合

c# - 我是否在我的测试方法中 stub 或填充方法?

java - 如何模拟调用其他私有(private)静态方法的静态方法?

java - 使用随机访问文件的 EOFException

java - Hibernate 异常不断由 RuntimeException.class 而不是 HibernateException.class 处理

java - 在 Junit 中断言等于 2 个列表之间

javascript - 在 Selenium Webdriver 中滚动网页上的 div,而不滚动主页

python - 如何将数据附加到 Robot Framework 中的 csv 文件?

firefox - Selenium 无法在 Firefox 4 上加载