从<li>下拉列表中选择值 - Selenium

时间:2016-01-14 14:06:37

标签: java selenium drop-down-menu selenium-webdriver

我正在尝试从一个看似“ul”的小下拉列表中选择一个值 这是我在Firebug中看到的内容:

    <button class="btn btn-default dropdown-toggle" aria-expanded="true"       aria-haspopup="true" data-toggle="dropdown" type="button">
<ul class="dropdown-menu">
<li>
<a href="javascript:void(0)">1</a>
</li>
<li>
<a href="javascript:void(0)">2</a>
</li>
<li>
<a href="javascript:void(0)">3</a>

这是我到目前为止用Java编写的内容:

 public void selectPhoneType(String option)
    {
        driver.findElement(By.className("caret")).click();
        new WebDriverWait(driver, 5).until(ExpectedConditions.visibilityOfElementLocated(By.className("dropdown-menu")));
        WebElement element = driver.findElement()
    }

假设我想选择/点击选项“1”。我如何完成我的代码?我没有太多使用“li”,所以我尝试使用select,这显然没有用。任何帮助,将不胜感激!感谢

4 个答案:

答案 0 :(得分:3)

尝试这样的事情:

public void selectPhoneType(String option) {
       // Open the dropdown so the options are visible
        driver.findElement(By.className("dropdown-menu")).click();
        // Get all of the options
        List<WebElement> options = driver.findElements(By.xpath("//ul[@class='dropdown-menu']/li"));
        // Loop through the options and select the one that matches
        for (WebElement opt : options) {
            if (opt.getText().equals(option)) {
                opt.click();
                return;
            }
        }
        throw new NoSuchElementException("Can't find " + option + " in dropdown");
}

注意:Selenium的Select()在这里不起作用,因为你的列表不在'select'标签下。

答案 1 :(得分:0)

根据应用程序中的选择方式,您应该使用element.click()模拟鼠标单击,或使用element.sendKeys(Keys.ENTER);模拟keydown / keyup事件。另请注意,触摸事件可能会因您的应用程序而有所不同(单击可能不行) Here's a similar question

答案 2 :(得分:0)

driver.FindElement(By.XPath("//ul[@class='dropdown-menu']/li/a")).Click();

答案 3 :(得分:0)

另一种参数化选择器的方法。

这将返回所有3个选项:

$$("ul.dropdown-menu>li:eq a")

这会添加一个参数来选择列表中的所需内容:

$$("ul.dropdown-menu>li:nth-child(1) a")

然后,您可以为您的测试映射子编号并将其传递到选择器:

1 = whatever
2 = whatever
3 = whatever

public void By someDroplist(String selection)
  {
return By.cssSelector("ul.dropdown-menu>li:nth-child(" + selection + ") a");
  }