我需要在下拉窗口中选择一个元素。每次我在要测试的网站中打开下拉窗口时,网站都会为该下拉窗口随机生成一个ID。下拉窗口的先前实例是可见的(使用Firebug),但不能选择。有一个静态路径,但是仅当我用ChromeDriver测试它时才起作用,而当我使用FirefoxDriver时它不起作用。第一次尝试按类名查找动态生成的元素时(下拉窗口的每个实例都具有相同的类),但是每次使用ChromeDriver和FirefoxDriver时,每次都会出错。我认为它可能正在尝试定位该第一个实例,而不是可选择的实例。
这是动态代码的代码:
driver.findElement(By.xpath("//div[@class='really long name for drop down menu']/ul/li[2]")).click();
这是我的静态代码:
driver.findElement(By.xpath("//option[normalize-space(.)='Text']")).click();
这是动态HTML:
<html class="FakeName1" style=""> <body style="margin: 0px; background-color: rgb(219, 230, 244);"> <form id="Form1" action="MenuSelector.aspx?Ihopethisstuffisnotimportant" method="post"> <div id="Menu1384921" class="really long name for drop down menu" style="overflow-y: auto; width: 438px; height: 320px; position: absolute; visibility: hidden; left: 165px; top: 88px; display: none;"> <div id="Menu1092875" class="really long name for drop down menu" style="overflow-y: auto; width: 438px; height: 320px; position: absolute; visibility: visible; left: 165px; top: 88px;"> <ul> <li unselectable="on"></li> <li unselectable="on">Text</li> </ul> </div> </body> </html>
这是静态HTML:
<div id="ThingList" style="width:100%;"> <table id="Table1" style="margin: 0px; padding: 0px; width: 100%; border-spacing: 4px;"> <tbody> <tr> <td align="right" style="width: 20%; font-size: 9pt;">Select a Thing: </td> <td> <select id="bThings" class="bInput" style="width: 436px;" onchange="javascript:setTimeout('__doPostBack(\'bThings\',\'\')', 0)" name="bThings"> <option value=""></option> <option value="2">Text</option> </select> </td> </tr> </tbody> </table> </div>
试试这个方法:
获取所有元素。
java.util.List<WebElement> elements = driver.findElements(By.xpath("//div[@class='really long name for drop down menu']/ul/li[2]")); elements[elements.count - 1].click();
那应该点击那个特定类的最后一个元素。