【问题标题】:xpath preceding-sibling not workingxpath 前同级不工作
【发布时间】:2016-06-17 01:35:39
【问题描述】:

我正在尝试单击第一个按钮,该按钮会删除作为第二个按钮的项目。

<tr>
  <td>
    <div class="btn-group">
       <button class="btn btn btn-danger" name="delete" type="button">
    </div>
  </td>
  <td>
     <span class="class"></span>
  </td>
  <td>
     <button class="btn" name="item" type="button">
  </td>
</tr>

XPath

//button[contains(.,'${ITEM}')]/preceding-sibling::button[@name='delete']

【问题讨论】:

    标签: xpath


    【解决方案1】:

    我假设您只是没有向我们显示示例 HTML 中的按钮文本,因为您的两个按钮似乎都没有任何内容。

    preceding-sibling 在这里不起作用,因为这两个按钮不是兄弟。但是 preceding::button 在这种情况下应该可以工作。请注意末尾的[1],以便选择最接近的匹配项:

    //button[contains(.,'${ITEM}')]/preceding::button[@name='delete'][1]
    

    以下内容也应该有效,并且在我看来更简洁:

    //tr[.//button[contains(., '${ITEM}')]]//button[@name  ='delete']
    

    【讨论】:

    • 非常感谢!使用previous::button 对我不起作用,因为它选择了在页面上找到的第一个删除按钮,但第二个效果很好。
    • 啊,是的。如果您使用的是preceding::,则最后需要一个[1]。更新我的答案只是为了彻底。
    • preceding::button[1] 是选择第一个匹配项还是最接近项匹配项(即最后一个匹配项)?
    • @jpaugh 它选择最接近的一个。 preceding...ancestor... 轴被称为“反向轴”:w3.org/TR/xpath/#predicates
    • 感谢您的澄清。我知道preceding-sibling 是这样工作的,这就是我问的原因。我将以“最接近”的形式进行编辑,因为明确地引用文档顺序似乎不那么令人困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多