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



我试图从使用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);

方法三:

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

方法四:

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

我猜上面所有方法的问题在于识别下拉元素。

试试下面的

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

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

(使用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();

最新更新