我无法使用我的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;
}
答案 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