繁体   English   中英

Selenium 2 等到 AJAX 在 JAVA 中完成

[英]Selenium 2 wait until AJAX done in JAVA

我使用Selenium 2Java 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);

但不工作。

编辑

硒依赖是:

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

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

主要的问题是在你点击某个东西后你必须等待ajax加载不可见不可见。这意味着你必须等待元素消失或隐藏。

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

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

试试“return Ajax.activeRequestCount == 0”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM