使用text()的XPath定位元素不起作用

时间:2016-03-03 09:56:38

标签: html xml selenium xpath

<td>
 <a>SAMPLE</a>
 <div>
  <small>Phase:
         Planning >>
  <a>Performance</a>
  </small>
 </div>         
</td>

我试图找到元素&#34;阶段:规划&gt;&gt;性能&#34;上面的文字但没有用。

尝试使用:

//*[text()[contains(normalize-space(.),'Phase: Planning >> Performance')]]

4 个答案:

答案 0 :(得分:3)

目前存在的其他三个答案都不会完全符合您的要求。

以下是一些XPath表达式:

  • 您可以选择其标准化字符串的 small元素 通过此XPath值为Phase: Planning >> Performance

    //small[normalize-space() = 'Phase: Planning >> Performance']
    
  • 您可以选择 所有元素,无论名称 , 规范化的字符串值等于目标字符串:

    //*[normalize-space() = 'Phase: Planning >> Performance']
    

    但这不仅会选择small,还会选择div,因为两者都是 字符串值等于Phase: Planning >> Performance

  • 无论如何,您只能选择层次结构中的最低元素 名称,其规范化字符串值等于目标字符串:

    //*[         normalize-space() = 'Phase: Planning >> Performance' and 
        not(.//*[normalize-space() = 'Phase: Planning >> Performance'])]
    

重要的是要认识到 XPath text() = is different than XPath . =

答案 1 :(得分:0)

尝试下面的内容: -

//small[contains(.,'Phase:')]

希望它会对你有所帮助:)。

答案 2 :(得分:0)

<span>Planning &gt;&gt;</span>

试试这段代码

答案 3 :(得分:0)

文字Phase: Planning >>Performance属于两个不同的元素。

要找到Phase: Planning >>元素,您可以使用

//small[contains(text(),'Phase:')]

找到Performance元素

//a[contains(text(),'Performance')]

请注意,打印第一个元素会为您提供两个元素Phase: Planning >> Performance的文本。