我正在使用Selenium IDE测试ADF应用程序 . 有一次,自动化测试用例必须单击一个按钮,该按钮具有指向页面上的表的 partialTrigger
属性,并且在按钮执行某些背景逻辑之后,该表将填充行,但是 page is not fully refreshed .
我面临的问题是Selenium IDE在单击按钮后无法找到表行 . 可能,Selenium不知道页面的DOM更新,但我不确定 .
到目前为止我尝试过的是:
-
我在表格的第一行中存储了一个单元格的预期完整xpath .
-
创建了一个自动执行的JavaScript函数,用于单击给定的路径 .
-
我在一个简单的HTML页面上测试了以下命令,它们工作正常 .
Selenium命令:
<tr>
<td>store</td>
<td>//html[1]/body[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]</td>
<td>myTableRowPath</td> <!-- store the xpath with name 'myTableRowPath' -->
</tr>
<tr>
<td>storeEval</td>
<td>(function(path) {
var result = selenium.browserbot.getUserWindow()
.document.evaluate(path,
selenium.browserbot.getUserWindow().document,
null,
8,
null).singleNodeValue; result.click();
return null;
})
(${myTableRowPath})
</td>
<td>elementToBeClicked</td>
</tr>
如何让Selenium IDE了解页面上的任何(AJAX)DOM更新?
3 回答
通常,在Selenium IDE上处理AJAX时,您需要使用
waitForElementPresent
类型的操作 .例如,如果您的表格发生变化
至
您可以使用:
Here's一个JSFiddle我对它进行了测试(没有AJAX,但是使用缓慢的JS函数模拟它) .
ADF以一种很难维护XPath的方式操纵生成的HTML . 在ADF中定位特定元素的最简单方法是为此元素提供styleClass并使用class属性访问它 .
ADF在加载表的内容之前加载表UI(ID selenium正在寻找) . 您的webdriver可能在加载之前查找内容,因此您可以在单击该行之前明确等待一小段时间 .
您的表可能正在使用延迟加载,当您将其滚动到视图中时,它只加载表的内容 . 如果您的窗口只显示5行,并且表中有10行,则浏览器将只加载5行 . 如果你要求selenium查找第8行,它将抛出异常 . 我通过单击第一行和driver.switchTo() . activeElement() . sendKeys(Keys.DOWN)解决了这个问题 . 我搜索的行数的次数 . 所以在访问它之前我是"scrolling"