我目前正在努力寻找正确的xpath表达式,以选择其父/兄弟元素包含特定文本的输入元素 .
在下面的示例中,我想选择"input"元素,其中,在同一 tr
行中,存在具有特定文本的 td
元素 .
my example path - 不返回任何匹配项
//input[contains(../../../td/text(),"15-935-331")]
source code
<tr>
<td><a href="xxx" target="_blank">xxxx, yyyyy</a></td>
<td>Mr</td>
<td></td>
<td> 15-935-331</td>
<form id="betreuerModel" action="xxxx" method="POST">
<td class="tRight">
<input value="Bearbeiten" id="bearbeiten" name="bearbeiten" class="submit" title="Bearbeiten" type="submit"/>
</td>
</form>
</tr>
<tr>
// .. next row with same structure
</tr>
2 回答
给定节点集时,
contains
函数将仅在该节点集中的第一个节点上运行 . 在你的情况下,它是<td><a href="xxx" target="_blank">xxxx, yyyyy</a></td>
. 您可以改为重构表达式,以便谓词在所有要检查的节点上运行,contains
函数对单个项目进行操作:这将获得任何
input
元素,其中父's parent' s父元素包含td
元素,其文本节点包含文本15-935-331
.指定这个的更简单的方法是使用
ancestor::tr[1]/td
代替../../../td
.这将获得祖先层次结构中的第一个
tr
,并对其进行操作 .作为Keith发布的解决方案的替代方案,您可以使用以下XPath表达式:
这使它更加独立于HTML的实际结构 . 它选择
tr
,其中包含一个包含给定文本的td
,并且tr
将input
元素放在form
元素下面的任何位置 .