Selenium 2等待AJAX在JAVA中完成
我使用selenium2和java1.7。 我想等待我的HtmlUnitDriver,直到我单击过滤器按钮时ajax完成 我的司机: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
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) {}
}
}