【问题标题】:Using xpath to select an element based on its grandchildren使用 xpath 根据其孙子元素选择元素
【发布时间】:2015-04-03 04:36:45
【问题描述】:

我正在尝试根据我想要的元素的子元素的子元素在网页中查找元素。我需要这个,因为它是网页的可点击部分。

<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 来选择包含输入值为 2 的属性的表行:

//*table[@id='uniqueId']//tr[td[0]/value='2']

根据previous question,这应该可以工作。为什么它在这里不起作用?

【问题讨论】:

  • 当您说某事“不起作用”时,,请始终说明您得到了什么结果(最好是您期望的结果)。否则,您会让人们猜测您是否收到错误消息或错误结果,以及结果是什么。并且可能错误不在您收到的结果中,而是在您对应该收到的结果的期望中。

标签: html xpath


【解决方案1】:

以下 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 中的输入:

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

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

【讨论】:

  • @bagelmakers 然后它将返回所有行,因为所有 tr 都包含一个 td 和一个 input 和值 1
  • 这很完美!我只想添加//table[@id='uniqueId']//tr[td[1]/input[@value='2']] 更具体。
  • @bagelmakers 很高兴能帮到你。关于针对特定td 的调整-我只是不确定您是否总是知道input value="2" 在特定td 中,正如您在问题中提到的那样,您想选择包含输入这个值。
  • 只是添加到这个答案:tr[td[0]/value='2'] 不选择任何节点的另一个原因是因为td[0] 表示td[position() = 0],但position() 的值是从 1 开始的。所以[0] 是一个永远为假的谓词。
  • @LarsH 感谢您的提及,我刚刚将其添加到答案中,因为我只是专注于 XPath 在发布时按值选择输入。
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 2018-05-21
  • 2012-03-18
  • 2017-07-22
  • 2012-03-29
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多