在GXT ComboBox的下拉列表中选择不可见的项目

时间:2013-05-21 21:11:02

标签: selenium-webdriver gxt

我正在尝试使用GW上的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

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

1 个答案:

答案 0 :(得分: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

等预期条件下运行上面的代码