使用 xpath 到 select 一个基于其孙元素的元素
Using xpath to select an element based on its grandchildren
我正在尝试根据我想要的元素的子元素的子元素在网页中查找元素。我需要这个,因为它是网页的可点击部分。
<table id="uniqueId">
<tbody>
<tr></tr>
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="1" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="2" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="3" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
</tbody>
</table>
我目前有以下 xpath 到 select table 行,其中包含输入值 = 2 的属性:
//*table[@id='uniqueId']//tr[td[0]/value='2']
根据 previous question,这应该可行。为什么它在这里不起作用?
下面的 XPath
//table[@id='uniqueId']//tr[td/input[@value='2']]
当应用于您的输入时 HTML 有输出
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="2" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
XPath tr[td[0]/value='2']
将不起作用,因为值为 2
的 value
属性属于 td
:[=21= 中的输入]
tr[td/input[@value='2']]
此外,正如 LarsH 在评论中提到的,td[0]
意味着 td[position() = 0]
不会 select 任何元素,因为 position()
是基于 1 的,所以 [0]
是一个始终为假的谓词。
我正在尝试根据我想要的元素的子元素的子元素在网页中查找元素。我需要这个,因为它是网页的可点击部分。
<table id="uniqueId">
<tbody>
<tr></tr>
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="1" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="2" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="3" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
</tbody>
</table>
我目前有以下 xpath 到 select table 行,其中包含输入值 = 2 的属性:
//*table[@id='uniqueId']//tr[td[0]/value='2']
根据 previous question,这应该可行。为什么它在这里不起作用?
下面的 XPath
//table[@id='uniqueId']//tr[td/input[@value='2']]
当应用于您的输入时 HTML 有输出
<tr class="row" onclick="do_a_thing">
<td>
<input type="hidden" value="2" />
</td>
<td>
<input type="hidden" value="1" />
</td>
</tr>
XPath tr[td[0]/value='2']
将不起作用,因为值为 2
的 value
属性属于 td
:[=21= 中的输入]
tr[td/input[@value='2']]
此外,正如 LarsH 在评论中提到的,td[0]
意味着 td[position() = 0]
不会 select 任何元素,因为 position()
是基于 1 的,所以 [0]
是一个始终为假的谓词。