我正在尝试使用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">
答案 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();
}
}
}