Selenium WebDriver和DropDown Boxes

时间:2011-08-29 15:56:25

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

如果我想选择下拉框的选项,有几种方法可以做到这一点。我一直用:

driver.findElement(By.id("selection")).sendKeys("Germany");

但这并不是每次都有效。有时选择另一个选项。所以我google了一下,发现这段代码每次都有效:

WebElement select = driver.findElement(By.id("selection"));
    List<WebElement> options = select.findElements(By.tagName("option"));
    for (WebElement option : options) {
        if("Germany".equals(option.getText()))
            option.click();
    }

但这确实很慢。如果我有一个包含很多项目的长列表,那真的需要花费太多时间。所以我的问题是,是否有一个解决方案,每次都有效并且很快?

10 个答案:

答案 0 :(得分:47)

你可以试试这个:

IWebElement dropDownListBox = driver.findElement(By.Id("selection"));
SelectElement clickThis = new SelectElement(dropDownListBox);
clickThis.SelectByText("Germany");

答案 1 :(得分:25)

尝试以下方法:

import org.openqa.selenium.support.ui.Select;

Select droplist = new Select(driver.findElement(By.Id("selection")));   
droplist.selectByVisibleText("Germany");

答案 2 :(得分:4)

尝试选择帮助程序类,看看是否有任何区别?

String valueToSelect= "Germany";
WebElement select = driver.findElement(By.id("selection"));
Select dropDown = new Select(select);           
String selected = dropDown.getFirstSelectedOption().getText();
if(selected.equals(valueToSelect)) {//do stuff already selected}
List<WebElement> Options = dropDown.getOptions();
for(WebElement option:Options){
  if(option.getText().equals(valueToSelect)){
       option.click();  
  }
}

答案 3 :(得分:2)

由于某些奇怪的原因,webdriver(版本2.25.1.0)的SelectElement无法正常使用firefoxdriver(Firefox 15)。有时它可能无法从下拉列表中选择一个选项。然而,它似乎与chromedriver一起工作...... This是与chromedriver的链接...只需将它放在bin目录中。

答案 4 :(得分:1)

从下拉列表中选择一个选项的示例:

使用id或csspath或xp​​ath或name单击下拉列表。我在这里使用了id。

driver.findElement(By.id("dropdownlistone")).click(); // To click on drop down list
driver.findElement(By.linkText("india")).click(); // To select a data from the drop down list.

答案 5 :(得分:0)

我必须努力寻找如何实现那些对这个工具不熟悉的人(比如我)

C#代码:

IWebElement ddl = ffDriver.FindElement(By.Id("ddlGoTo")); 
OpenQA.Selenium.Support.UI.SelectElement clickthis = new OpenQA.Selenium.Support.UI.SelectElement(ddl);
clickthis.SelectByText("Your Text");
希望这能帮到别人!

答案 6 :(得分:0)

public static void mulptiTransfer(WebDriver driver, By dropdownID, String text, By to)
{   
    String valuetext = null;
    WebElement element = locateElement(driver, dropdownID, 10);
    Select select = new Select(element);
    List<WebElement> options = element.findElements(By.tagName("option"));
    for (WebElement value: options) 
    {
        valuetext = value.getText();
        if (valuetext.equalsIgnoreCase(text))
        {
            try
            {
                select.selectByVisibleText(valuetext);
                locateElement(driver, to, 5).click();                           
                break;
            }
            catch (Exception e)
            {
                System.out.println(valuetext + "Value not found in Dropdown to Select");
            }       
        }
    }
}

答案 7 :(得分:0)

select = driver.FindElement(By.CssSelector("select[uniq id']"));
                selectElement = new SelectElement(select);
                var optionList =
                    driver.FindElements(By.CssSelector("select[uniq id']>option"));
                selectElement.SelectByText(optionList[GenerateRandomNumber(1, optionList.Count())].Text);

答案 8 :(得分:0)

将WebElement包装到Select Object中,如下所示

Select dropdown = new Select(driver.findElement(By.id("identifier")));

完成此操作后,您可以通过3种方式选择所需的值。考虑像这样的HTML文件

<html>
<body>
<select id = "designation">
<option value = "MD">MD</option>
<option value = "prog"> Programmer </option>
<option value = "CEO"> CEO </option>
</option>
</select>
<body>
</html>

现在确定下拉列表

Select dropdown = new Select(driver.findElement(By.id("designation")));

要选择其选项,请说“程序员”&#39;你可以做到

dropdown.selectByVisibleText("Programmer ");

 dropdown.selectByIndex(1);

 dropdown.selectByValue("prog");

快乐编码:)

答案 9 :(得分:-2)

您可以使用此

(new SelectElement(driver.FindElement(By.Id(""))).SelectByText("");