无法使用selenium选择下拉列表

时间:2016-10-07 06:45:51

标签: java maven selenium

我的页面有1个文本字段和2个选择字段。当我在第一个下拉列表中选择一个值时,这会导致回发,并且第二个下拉列表会被填充。

这适用于1台,但不适用于测试服务器。

当我在测试服务器上运行我的selenium maven测试时,我总是得到“无法找到元素”。我尝试过定时器,流利,含蓄和明确,但没有成功。

有什么想法吗?

4 个答案:

答案 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秒钟。