2

可能重复:
Selenium WebDriver - 隐藏的选择和锚点

在我发布我的问题之前,我只想告诉我我是 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 方法不存在。任何人都可以在这方面帮助我。谢谢!

4

1 回答 1

1

问题是 Selenium 无法与不可见(禁用)的元素进行交互。所以你需要让元素可见。基本思想:使下拉菜单向下滚动,然后等待,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。你可以在这里阅读它并且代码将是这样的:

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 选择器的,xpaths 在例如 firepath 中验证它,在 fox 中添加到 firebug。 在此处输入图像描述 希望这对你有帮助)

将此屏幕视为定位下拉选项的示例。 下拉选项

于 2012-09-12T09:04:01.310 回答