我正在使用 Selenium IDE 测试 ADF 应用程序。在某一时刻,自动化测试用例必须单击一个按钮,该按钮有一个指向页面上表格的 partialTrigger
属性,并且在该按钮执行一些后台逻辑后,该表格将填充行,但页面未完全刷新。
我面临的问题是,单击按钮后,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 更新?
最佳答案
通常,在 Selenium IDE 上处理 AJAX 时,您需要使用 waitForElementPresent
类型的操作。
例如,如果您的表格更改为
<table id="myTable">
<tbody>
<tr>
<td>foo</td>
<td>bar</td>
</tr>
</tbody>
</table>
至
<table id="myTable">
<tbody>
<tr>
<td>foo</td>
<td>bar</td>
</tr>
<tr>
<td>something</td>
<td>else</td>
</tr>
</tbody>
</table>
您可以使用:
<tr>
<td>click</td>
<td>//input[@id='myButton']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//table[@id='myTable']/tbody/tr[2]</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//table[@id='myTable']/tbody/tr[2]/td</td>
<td>something</td>
</tr>
Here's我测试了一个 JSFiddle(没有 AJAX,但使用慢速 JS 函数来模拟)。
关于javascript - Selenium IDE 找不到组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499408/