Webdriver下拉列表无法选择/选择

时间:2011-07-25 08:51:57

标签: java webdriver

我无法使用我的Webdriver方法选择HTML下拉列表。我的代码出了什么问题。你能给我一些提示吗。

 <select>
<option value="32">32</option>

<option value="34">34</option>

<option value="36">36</option>


</select>

public static List<WebElement> chooseSize(Integer size){
WebElement select = findElement(By.xpath(DropDown_Article_Size_XPATH_ID));
List<WebElement> options = select.findElements(By.tagName("option"));
for(WebElement option : options){
    if(option.getText().equals(size)){
        option.isSelected(); // or .click()?
       }
}
return options;
}

8 个答案:

答案 0 :(得分:3)

在WebDriver中有一个可以帮助你的支持类:“org.openqa.selenium.support.ui.Select”。

以下是您使用它的方式:

// First, get the WebElement for the select tag
WebElement selectElement = driver.findElement(By.xpath(DropDown_Article_Size_XPATH_ID));

// Then instantiate the Select class with that WebElement
Select select = new Select(selectElement);

// Get a list of the options
List<WebElement> options = select.getOptions();

// For each option in the list, verify if it's the one you want and then click it
for (WebElement we : options) {
    if (we.getText().equals(valueToSelect)) {
        we.click();
        break;
    }
}

答案 1 :(得分:2)

Select select = new Select(driver.findElement(By.xpath("Xpath_of_Select_Element")));
select.selectByVisibleText("Option_to_Select");

这是从选择下拉列表中选择选项的最简单方法

答案 2 :(得分:1)

对于这种情况,我正在使用xpath表达式。你会节省很多代码!

对于您的要求,这应该做(我假设您的xpath正确定位相应的select):

// Click select first:
// (See http://code.google.com/p/selenium/issues/detail?id=2112)
findElement(By.xpath(DropDown_Article_Size_XPATH_ID)).click();

// Then click option:
String xpathOption = String.format("%s/option[text()='%d']",
    DropDown_Article_Size_ID, size);
log.debug("Selecting option by text '{}' using xpath '{}'", size, xpathOption);
findElement(By.xpath(xpathOption)).click();

顺便说一句,我不明白为什么你的chooseSize会返回所有选项的列表。您应该将方法重命名为有意义的方法(getOptionsBySize,例如,如果这是您想要的)。

答案 3 :(得分:1)

位修改对我有用,非常感谢它完成了这么简单的代码。

Select select = new Select(driver.findElement(By.name("Status_operator")));
select.selectByValue("=");

答案 4 :(得分:0)

你试过setSelected()吗? isSelected()是一个吸气剂,因此它不会改变任何东西。

答案 5 :(得分:0)

如果您使用的是Selenium2,则必须使用option.click()

答案 6 :(得分:0)

我担心ChromeDriver和Select存在问题。在Chrome for MacOSX上测试,.click()和.isSelected()不起作用。 FireFox中的相同代码按预期工作。两种浏览器之间有什么不同吗?

List<WebElement> opciones = select.getOptions();

for(WebElement el : opciones){
  System.out.println("Elemento disponible: ["+el.getAttribute("value")+"]["+el.getText()+"]");

  //Select actual option            
  el.click();
  if(el.isSelected())
    System.out.println("Selected: ["+el.getAttribute("value")+"]["+el.getText()+"]");
}

答案 7 :(得分:0)

你可以做到

WebElement selectElement = driver.findElement(By.xpath(DropDown_Article_Size_XPATH_ID));
selectElement.sendKeys("34") 

选择34

就这么简单。 Sendkeys是webdriver中非常有用的方法,对不同类型的对象有不同的实现,即对于文本框,Sendkeys会在文本中键入,而对于select元素,它会选择元素。

我甚至读过,对于文件上传字段,您可以使用sendkeys输入文件路径。

欢呼声

Shrikant