如何在html标签之间检索引用的文本



我正试图在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中是非常丑陋的,看起来完全错误。

最新更新