我正试图在Eclipse中使用groovy/geb来自动化遗留网页的GUI测试,但由于某些原因,部分页面html的构建方式非常不同,这导致了通常能让标签中的文本不起作用的方法。我也在用壁虎和萤火虫。下面是我正在处理的一个非常简单的例子。
html在浏览器中检查元素时的外观:
...
<div>
<td class="RowLabelPopup">
" Name: "
</td>
<span class="RowValue">Bob Smith</span>
<td class="RowLabelPopup">Address:</td>
<span class="RowValue">123 that st</span>
</div>
...
我如何将导航器设置为页面对象中的元素:
nameLabel {$("td.RowLabelPopup")[0]}
nameValue {$("span.RowValue")[0]}
addressLabel {$("td.RowLabelPopup")[1]}
addressValue {$("span.RowValue")[1]}
我是如何尝试在我的规范中检查这些元素的:
nameLabel.text() == " Name: " //fails as nameLabel.text() returns ""
nameValue.text() == "Bob Smith"
addressLabel.text() == "Address:"
addressValue.text() == "123 that st"
我尝试过.value((,检查文本是否被视为nameLabel的子级为什么.text((不适用于nameLabel,但它适用于其他所有内容?我如何检索此文本?
我过于简化的例子隐藏了这样一个事实,即div位于ID为的表中
真的吗?当我试图重现您的问题时,只有当我将您的代码片段放在table
之外的页面上时,我才成功,因为在这种情况下,没有父级的两个td
会产生空的导航符,因此也不会产生文本。在DOM中根本找不到它们。
当我把你的代码片段放入table
中时,它就工作了:
<table>
<tr>
<div>
<td class="RowLabelPopup">
" Name: "
</td>
<span class="RowValue">Bob Smith</span>
<td class="RowLabelPopup">Address:</td>
<span class="RowValue">123 that st</span>
</div>
</tr>
</table>
它甚至在移除tr
元素时继续工作,将div
直接放入table
中。但当然,您的条件必须从nameLabel.text() == " Name: "
更改为nameLabel.text() == '" Name: "'
才能考虑到双引号。
然而,我同意Tim的观点:将表单元格和span
封装在div
中是非常丑陋的,看起来完全错误。