Selenium Webdriver:选择显示无

时间:2012-09-12 00:21:02

标签: selenium

  

可能重复:
  Selenium WebDriver - hidden select and anchor

在发布我的问题之前,我只是想告诉我,我是Selenium的新手。 我想从下拉列表中选择一个选项。单击下拉框中的向下箭头时会显示选项。但是,当在Firebug中检查时,显示样式为“none”,当尝试使用Eclipse中的click方法使用JUnit webdriver代码选择该选项时,它不起作用并且它给出了异常 - “org.openqa.selenium。 ElementNotVisibleException:元素当前不可见,因此可能无法与“。

进行交互

请参阅附件中的下拉列表和HTML标记。

<select class="size-dropdown mediumSelect selectBox" name="skuAndSize" style="display: none;">
<option value=""></option>
<option value="2545672:S" name="skuId"> S</option>
<option value="2545673:M" name="skuId"> M</option![enter image description here][1]>
<option value="2545674:L" name="skuId"> L</option>
<option value="2545675:XL" name="skuId"> XL</option>
<option value="2545676:XXL" name="skuId"> XXL</option>
<option value="2545677:XXXL" name="skuId"> XXXL</option>
<option value="2545678:XXXXL" name="skuId"> XXXXL</option>
</select>

在发布此问题之前,我查看了这个链接 - Selenium WebDriver - hidden select and anchor 但是,由于我刚开始,我无法理解清楚。

注意:使用clickAt方法时,在IDE中也一样。但是在Webdriver中,clickAt方法不存在。任何人都可以帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

问题是Selenium无法与隐形(禁用)元素进行交互。所以你需要让元素可见。 BAsic想法:将下拉列表向下滚动,然后等待driver.manage.timeout(...),然后单击下拉列表中显示的所需元素。 或者您可以使用javascript直接单击元素,而无需在下拉列表前滚动。 Js能够应付它。

所以这种方法总是有效

css1=select[class="size-dropdown mediumSelect selectBox"]>option[value=""]
css2=select[class="size-dropdown mediumSelect selectBox"]>option[value="2545672:S"]
css2=select[class="size-dropdown mediumSelect selectBox"]>option[value="value="2545673:M"]
//.... and so on.....
public void jsClickOn(String cssSelector){
JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssSelector+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());
}
jsClickOn(css1);
jsClickOn(css2);
jsClickOn(css3);

另一种方式:  使用操作构建器,高级用户操作API。你可以阅读它here并且代码会像那样:

WebElement mnuElement;
WebElement submnuElement;
mnEle = driver.findElement(By.Id("mnEle")).click();
sbEle = driver.findElement(By.Id("sbEle")).click();

Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.moveToElement(mnEle).Perform();
// Giving 5 Secs for submenu to be displayed
Thread.sleep(5000L);
// Clicking on the Hidden SubMenu
driver.findElement(By.Id("sbEle")).click();

但是也要注意你如何找到css选择器的方式,xpath验证它在例如firepath,在ffox中添加到firebug。 enter image description here 希望这对你有所帮助)

请参阅此屏幕,以查找下拉选项的示例。 dropdownOptions