首页 > 解决方案 > 使用 contains(node()) AND contains(@attribute) 通过 xpath 查找元素

问题描述

我试图通过检查innerHTML(属性节点())和一些属性(例如@class)来定位一个元素。两种方法单独工作,但我不能将它们与“和”结合使用

HTML部分:

<tr class="tableRow1">
  <td nowrap="" class="ct">
    <input type="CheckBox" name="RowKey" tabindex="17" value="15635">
    <img src="/tm/images/1pixel.gif" style="height:9px;width:9px;border:0" name="RowIndicator">
  </td>
  <td class="lt" title="ID">XXXXX</td><nobr>0021234567</nobr><td class="rt">1.00</td>
</tr>

所以我需要通过捕捉这部分来定位class="tableRow1"的这个节点(来自许多其他节点):

<nobr>002123456</nobr>.

这两个有效(但捕获了几个元素):

.find_element_by_xpath('//tr[contains(node(), "0021234567")]')
.find_element_by_xpath('//tr[contains(@class, "Row")]')

这个没有:

.find_element_by_xpath('//tr[contains(node(),"0021234567") and contains(@class,"Row")]')

标签: seleniumxpath

解决方案


试试这个 XPath-1.0 表达式:

descendant::*[contains(node(), "0021234567")]/ancestor::tr[contains(@class, "Row")][1]

或在完整的说明中

.find_element_by_xpath('descendant::*[contains(node(), "0021234567")]/ancestor::tr[contains(@class, "Row")][1]')

该指令选择包含 value的(全局)的第一个tr祖先 - 它具有包含classvalue 的属性。Rownode()0021234567


推荐阅读