【问题标题】:XPath locating element using text() not working使用 text() 的 XPath 定位元素不起作用
【发布时间】:2016-03-03 09:56:38
【问题描述】:
<td>
 <a>SAMPLE</a>
 <div>
  <small>Phase:
         Planning >>
  <a>Performance</a>
  </small>
 </div>         
</td>

我试图在上面找到带有“阶段:计划>>性能”文本的元素,但无济于事。

尝试使用:

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

【问题讨论】:

    标签: html xml selenium xpath


    【解决方案1】:

    目前存在的其他三个答案都不能完全满足您的要求。

    以下是一些 XPath 表达式:

    • 您可以选择 small 元素,其标准化字符串 值是 Phase: Planning &gt;&gt; Performance 通过这个 XPath:

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

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

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

    • 您可以只选择层次结构中的最低元素,而不管 其规范化字符串值等于目标字符串的名称

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

    意识到XPath text() = is different than XPath . =很重要。

    【讨论】:

      【解决方案2】:

      试试下面:-

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

      希望对你有帮助:)

      【讨论】:

        【解决方案3】:
        <span>Planning &gt;&gt;</span>
        

        试试这个代码

        【讨论】:

          【解决方案4】:

          文本Phase: Planning &gt;&gt;Performance 属于两个不同的元素。

          要定位 Phase: Planning &gt;&gt; 元素,您可以使用

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

          并找到Performance 元素

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

          请注意,打印第一个元素将为您提供两个元素的文本Phase: Planning &gt;&gt; Performance

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-04-11
            • 2021-02-11
            • 2017-01-07
            • 2016-07-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多