Я 2 Выберите объекты, после того, как значение выбирается первый один, второй один вызвать вызов AJAX и обновлять свои значения.
В этом случае вы должны попытаться использовать WebDriverWait
подождать, пока <select>
не имеет опции, как показано ниже: -
Select dropDownRegion = new Select(driver.findElement(By.id("FirstID")););
dropDownRegion.selectByValue("myValue");
WebDriverWait wait = new WebDriverWait(driver, 10);
//Now wait for nested options for this select element
List<WebElement> optionProvinces = wait.until(ExpectedConditions.presenceOfNestedElementsLocatedBy(By.id("DDLProvince"), By.tagName("option")));
for(WebElement optionProvince : optionProvinces) {
System.out.println("*****************Province: " + optionProvince.getText() + " *************");
}
Edited: - Как вы знаете, выше код не будет ждать, пока параметры, присутствующие в окне выбора но если бы он нашел опцию в качестве опции по умолчанию, которая уже присутствует, это станет правдой, и вы все равно не найдете реальных опций.
В этом случае вы должны попытаться использовать numberOfElementsToBeMoreThan
подождать, пока элемент представит более заданного числа, как показано ниже: -
List<WebElement> optionProvinces = wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector("select#DDLProvince option"), 2));
for(WebElement optionProvince : optionProvinces) {
System.out.println("*****************Province: " + optionProvince.getText() + " *************");
}
Или вы можете подождать, пока Ajax вызова завершена, прежде чем найти второй выпадающее меню, как показано ниже: -
Select dropDownRegion = new Select(driver.findElement(By.id("FirstID")););
dropDownRegion.selectByValue("myValue");
WebDriverWait wait = new WebDriverWait(driver, 10);
//Now wait until ajax call complete
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return (Boolean)js.executeScript("return jQuery.active == 0");
}};
//Now find the second dropdown
Select dropDownProvince = new Select(driver.findElement(By.id("DDLProvince")););
for(WebElement optionProvince : dropDownProvince.getOptions()) {
System.out.println("*****************Province: " + optionProvince.getText() + " *************");
}
Я думаю, вам нужно создать ожидание, пока элемент не появится. Вызов ajax, скорее всего, будет запущен, но ваш код не дождался его результата. –