如何使用Selenium WebDriver从Java下拉框中选择项目?

时间:2012-05-11 07:08:12

标签: java selenium selenium-webdriver

我正在尝试使用java代码自动化测试用例。我使用selenium服务器库。当我到达某个页面时,我得到一个具有一定数量元素的下拉框。下拉框被称为'流派'。现在我想要做的是点击我想要展开的下拉框,以便在下一步我能够点击特定项目,例如。摇滚/金属/流行音乐等以上所有我试图自动化,但每次我这样做,我抛出相同的例外:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//*[@id='Genre']"}

我已经尝试了By By Byxpath,By.name,By.id等可用的各种方法,但无效。我因此复制了与'Genre'框相关的粘贴信息供您参考。请指导我使用哪种方法,以便我能够成功实现我刚才描述的目标。

当我突出显示Genre给我时,查看选择源:

<td id="genre" width="50%">
                                                                Genre <br><select name="Genre" id="Genre" class="input_boxbbb" onchange="subgener(this.value)"><option value="0000">All</option><option value="26">AIRTEL JINGLE</option><option value="19">ARTISTS</option><option value="27">BATTERY</option><option value="25">BOLLYWOOD</option><option value="28">

2 个答案:

答案 0 :(得分:1)

好的,所以Pavel建议的代码是正确的,应该可行。

我只有一个评论。 而不是手动迭代所有选项,您只需使用以下一个:

genres.selectByIndex(int index)
genres.selectByValue(String value) 
genres.selectByVisibleText(String text) 

问题在于HTML,请注意您有2个具有相同ID但不同情况的元素。

<td id="genre" width="50%">
<select name="Genre" id="Genre">

这可能会导致窗帘浏览器出现问题,并且通常是不好的做法。

如果您控制HTML,我建议将<td>元素的ID更改为其他内容并使用上述代码。

如果您不是使用

编写HTML的人
Select genre = new Select(driver.findElementBy(By.name("Genre"))) [Notice the Case sensetivity];

如果即使不起作用,请尝试检查页面中的所有<select>元素并使用它来挑选您需要的元素:

List<WebElement> selects = driver.findElementsBy(By.tagName("select"));
for (WebElement select : selects) {
   System.out.println(select)
}

希望有所帮助

答案 1 :(得分:0)

假设您正在使用WebDriver。稍后的driver变量被视为有效的Webdriver实例:

public void selectGenre(String genreName){ 
   Select genres = new Select(driver.findElement(By.id("genre")));
   List<WebElement> options = new ArrayList<WebElement>;
   options = genres.getOptions();
   for (WebElement genre:options){
       if(genre.getText().equals(genreName)){
           genre.click();
       }
   }
}