我的页面有1个文本字段和2个选择字段。当我在第一个下拉列表中选择一个值时,这会导致回发,并且第二个下拉列表会被填充。
这适用于1台,但不适用于测试服务器。
当我在测试服务器上运行我的selenium maven测试时,我总是得到“无法找到元素”。我尝试过定时器,流利,含蓄和明确,但没有成功。
有什么想法吗?
答案 0 :(得分:1)
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(<Element Locator>));
ExpectedCondtions中有很多选项,根据您的要求选择任意一个。这里的元素定位器是你的第二个下拉定位器ID。
答案 1 :(得分:0)
@ user3436977,我想在这种情况下使用FluentWait。这是一个如何处理这种情况的完整示例。我使用公共webapp的依赖下拉列表。在这个逻辑中,我等待“状态”下拉,直到我得到大于5的选项计数(这将证明动态元素在DOM中加载)。
@Test(enabled=true)
public void dependentDropdown(){
WebDriver driver = new FirefoxDriver();
driver.get("http://phppot.com/demo/jquery-dependent-dropdown-list-countries-and-states/");
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
WebDriverWait wait = new WebDriverWait(driver, 30);
Select country = new Select(wait.until(ExpectedConditions.presenceOfElementLocated(By.id("country-list"))));
country.selectByVisibleText("India");
FluentWait<WebElement> waitFor_state_list_population = new FluentWait<WebElement>(driver.findElement(By.id("state-list")));
wait.withTimeout(60, TimeUnit.SECONDS).pollingEvery(1, TimeUnit.MILLISECONDS).ignoring(NoSuchElementException.class);
com.google.common.base.Function<WebElement, Boolean> elementLoaded = new com.google.common.base.Function<WebElement, Boolean>() {
@Override
public Boolean apply(WebElement ele) {
return ele.getTagName().equals("select")? new Select(ele).getOptions().size()>5? true: false: false;
}
};
if(waitFor_state_list_population.until(elementLoaded)){
Select state = new Select(driver.findElement(By.id("state-list")));
state.selectByVisibleText("Delhi");
}
driver.close();
driver.quit();
}
希望这会有所帮助。
答案 2 :(得分:-1)
使用@log
def funt1(self,weight=None):
return weight
选择第一个下拉列值后,您可以添加延迟。
答案 3 :(得分:-2)
当您从不同的不同页面导航或从下拉列表中选择时,请始终使用Thread.sleep()至少3秒钟。