使用Selenium(Java),当下拉列表元素具有有限的可识别属性时,如何从下拉列表中选择值?

时间:2015-07-20 11:19:20

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

我尝试使用Selenium从下拉列表中选择一个值,并尝试了所有可能的方法(据我所知)但是徒劳无功。 请帮我在这里找到合适的方法。

以下是HTML代码,供参考:

<select name="list" onchange="this.disabled=true;if(this.options[selectedIndex].value == '')this.disabled=false;else optionselect(this);" onfocus="hint('')">

而且,这些是方法,我试过。

方法-1:

new Select(driver.findElement(By.xpath("xpath"))).selectByVisibleText("Text*");
new Select(driver.findElement(By.name("list"))).selectByVisibleText("Text");

方法-2 :(我尝试使用所有可能的方法来识别名称下的下拉元素,abs xpath,rel xpath,cssSelector等,但没有任何东西可以识别元素)

Select sel = new Select(element);
sel.selectByValue("Value");
Thread.sleep(5000);

方法-3:

Select sel = new Select(element);
sel.selectByIndex(11);
Thread.sleep(5000);

方法-4:

Select select = new Select(driver.findElement(By.name("list")));
select.selectByVisibleText("Text");

我猜测上述所有方法中的问题在于识别下拉元素。但我真的不确定这里有什么问题。

2 个答案:

答案 0 :(得分:1)

尝试使用以下内容。

WebElement dd= driver.findElement(By.xpath("//select[@name='list']"));
Select s=new Select(dd);
s.selectByIndex(1);

答案 1 :(得分:0)

也许你会使用动作获得一些运气?

(使用Firefox或Chrome,IE在执行悬停操作时表现得很奇怪)

Actions actions = new Actions(driver);
WebElement hoverElement = driver.findElement(By.name("list"));

Select sel = new Select(element);
// hover over the element
actions.
moveToElement(hoverElement).
perform();

// now maybe all of your approaches would work
// sel.selectByIndex(11);
// sel.selectByValue("Value");
// sel.selectByVisibleText("Text");

// or just find and click your desired element:
WebElement targetElement = driver.findElement(targetElementLocator);

    actions.
    moveToElement(targetElement).
    click().
    perform();