我正在尝试使用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 。
我有什么方法可以选择不可见的项目吗?
答案 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