Ich habe Probleme mit der konsequenten Auswahl des Flug-Rückreisedatums von einer Reisesuch-Website. Manchmal funktioniert es, aber die meiste Zeit nicht und ich bin an dieser Stelle ziemlich ratlos. Der Fehler, den ich erhalte, ist: Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out after 20 seconds waiting for visibility of element located by By.id: ui-datepicker-div
Timeout nach Warten auf Sichtbarkeit des Elements
Ich habe einige Warteanweisungen für die Datumselemente eingerichtet, auf die ich klicke, aber ich erhalte immer noch einen Fehler. Ich versuche eine Lösung zu finden, bei der ich Thread.sleep vermeiden kann. Jede Hilfe würde sehr geschätzt werden!
Hier ist mein Skript:
public class DatePickerTest {
private static WebDriver driver = new FirefoxDriver();
static WebDriverWait wait = new WebDriverWait(driver, 20);
public static void main(String[] args) {
driver.get("http://lowfares.com");
selectDepartDate(2016, 5, 18);
selectReturnDate(2016, 5, 21);
}
public static void selectDepartDate(int year, int month, int day) {
month--; // replacing zero based index
Integer.toString(year);
Integer.toString(month);
Integer.toString(day);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("depart_date")));
// click on text box to open up date picker calendar
driver.findElement(By.id("depart_date")).click();
// close pop up window
String parentWindowHandler = driver.getWindowHandle();
String subWindowHandler = null;
Set<String> handles = driver.getWindowHandles();
Iterator<String> iterator = handles.iterator();
while (iterator.hasNext()) {
subWindowHandler = iterator.next();
}
driver.switchTo().window(subWindowHandler);
driver.close();
driver.switchTo().window(parentWindowHandler);
// wait for calendar interface to appear
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ui-datepicker-div")));
// select depart date
driver.findElement(By.xpath("//td[contains(@data-month, " + month + ") and contains(@data-year, " + year + ")]//a[contains(text(), " + day + ")]")).click();
}
public static void selectReturnDate(int year, int month, int day) {
month--; // replacing zero based index
Integer.toString(year);
Integer.toString(month);
Integer.toString(day);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("return_date")));
// click on text box to open up date picker calendar
driver.findElement(By.id("return_date")).click();
// wait for calendar interface to appear
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ui-datepicker-div")));
// select return date
driver.findElement(By.xpath("//td[contains(@data-month, " + month + ") and contains(@data-year, " + year + ")]//a[contains(text(), " + day + ")]")).click();
}
}