, python. WebDriver Java, () python. , AJAX Selenium.
1. -. - DOM .
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
2. . ! . , WebDriver . WebDriverWait .
WebDriverWait wait = new WebDriverWait(driver, 60/*timeout in seconds*/);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("refresh")));
ExpectedConditions , .
Java, . . , . , WebDriverWait.
WebDriverWait wait = new WebDriverWait(driver, 60/*timeout in seconds*/);
ExpectedCondition<Boolean> untilIFindStatus = ExpectedConditions
.elementToBeSelected(By.id("status"));
while (wait.until(untilIFindStatus)) {
WebElement refresh = wait.until(ExpectedConditions
.elementToBeClickable(By.id("refresh")));
refresh.click();
List<WebElement> allRows = wait.until(ExpectedConditions
.presenceOfAllElementsLocatedBy(By.className("datarow")));
for (WebElement row : allRows) {
if (row.getText().equals("awesome"))
System.out.println("do something");
}
}
, AJAX jQuery. jQuery.active , , . javascript document.readyState. , 'click' AJAX.
ExpectedCondition<Boolean> jQueryActive_toBeZero = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
try {
return ((Long) jsExecutor
.executeScript("return jQuery.active") == 0) ? true
: false;
} catch (WebDriverException e) {
log.debug("It looks like jQuery is not available on the page, skipping the jQuery wait, check stack trace for details");
return true;
}
}
};
ExpectedCondition<Boolean> document_readyState_toBeComplete = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return jsExecutor.executeScript("return document.readyState")
.toString().equals("complete") ? true : false;
}
};
wait.until(jQueryActive_toBeZero);
wait.until(document_readyState_toBeComplete);