0

我正在尝试使用 Java 上的 Selenium 2.25 WebDriver 测试使用 GWT 2.3.0 和 GXT 2.2.5 编写的应用程序。

在应用程序中,我有一个带有大量选项的 ComboBox,以至于列表中有一个滚动条。我需要选择一个在列表中不可见的项目。

我使用以下代码运行测试:

//xpath for combobox trigger
String xpathExpression = "//div[starts-with(@id,'combobox ID']/descendant::img[contains(@class,'x-form-trigger-arrow')]";
driver.findElement(By.xpath(xpathExpression)).click();

//xpath for combobox list item
xpathExpression = "//div[contains(@class,'x-combo-list-item']/descendant::div[text()='item text']";
driver.findElement(By.xpath(xpathExpression)).click();

其中comboBoxID是我用来标识ComboBox 的ID 前缀,而项目文本是项目下拉列表中显示的文本。

如果该项目在页面上可见,则测试运行良好。如果该项目在列表中太远而无法看到,我会得到一个ElementNotVisibleException

我有什么办法可以选择不可见的项目吗?

4

1 回答 1

0

由于元素不可见,因此您无法使用 Selenium 处理它。因此,一种解决方案是首先滚动下拉菜单以到达该元素,然后进行选择。

与这些divs选择值对应的值是不可见的,它们在 DOM 中呈现。否则,它会在您滚动时即时渲染。因此,您可以执行 javascript 代码并将焦点(如果它已经呈现为不可见)设置到您想要获取的元素或滚动下拉列表(如果未呈现)并使用您的选择器进行选择。例如

WebDriver driver = /*driver you created*/;
if (driver instanceof JavascriptExecutor) {
   JavascriptExecutor jsExec = (JavascriptExecutor)driver;
   //you need to use the correct javascript here to do the scrolling or get the focus ex:
   String js = "document.getElementById("elementID").scrollIntoView()";
   jsExec.executeScript(js);
}

然后你可能不得不在预期的条件下运行上面的代码,比如visibilityOfElementLocated

于 2013-05-23T11:17:13.173 回答