使用 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'] 将不起作用,因为值为 2value 属性属于 td:[=21= 中的输入]

tr[td/input[@value='2']]

此外,正如 LarsH 在评论中提到的,td[0] 意味着 td[position() = 0] 不会 select 任何元素,因为 position() 是基于 1 的,所以 [0] 是一个始终为假的谓词。