问题描述
我正在尝试使用 Eclipse 中的 groovy/geb 自动执行旧网页的 GUI 测试,由于某种原因,部分页面 html 的构建方式非常不同,这导致通常可以使标签内的文本无法正常工作。我也在使用 geckodriver 和 firefox。 下面是我正在处理的一个非常简化的例子。
在浏览器中检查元素时 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
中非常难看,而且看起来是错误的。