为什么 XPath 无法 select 来自 HTML 的任何内容?

Why is XPath failing to select anything from HTML?

我的HTML长得像

...
<lots of nested tags>
  <div class="tiles-tile">
    <div class="brick">
      <div class="brick-header">
        ...
        <ul class="links">
          <li><i class="icon-minus"></i></li>
          <li><i class="icon-resize-small"></i></li>
          <li><i class="icon-list"></i></li>
          <li><i class="icon-time"></i></li>
          <li><a></a></li>
        </ul>
      </div>
    </div>
  </div>
</lots of nested tags>
<lots of nested tags>
  <div class="tiles-tile">
    <div class="brick">
      <div class="brick-header">
        ...
        <ul class="links">
          <li><i class="icon-minus"></i></li>
          <li><i class="icon-resize-small"></i></li>
          <li><i class="icon-list"></i></li>
          <li><i class="icon-time"></i></li>
          <li><a></a></li>
        </ul>
      </div>
    </div>
  </div>
</lots of nested tags>
...

我已经尝试了所有我能想到的方法,通过使用 XPath 来获取所有 <i class="icon-list" 元素的列表,但我就是想不出来。

比如我试过

//div[@class=\"brick-header\"]/ul/li/i[@class=\"icon-list\"]

但这给了我一个空列表。

我该怎么做?

以下 XPath 将 select class icon-list 的所有 i 元素,而不考虑祖先元素:

//i[@class='icon-list']

您的 XPath 可能无法正常工作的原因

  1. 有一个命名空间声明需要考虑。

    补救措施:声明正确的名称空间前缀并在 XPath 中使用它(最好),或针对本地名称进行测试以避免任何名称空间:

    //*[local-name()='i' and @class='icon-list']
    
  2. 还有其他 class 与 icon-list 一起列出。

    补救措施:在谓词中使用contains()而不是相等:

    //i[contains(concat(' ',@class,' '), ' icon-list ')]
    
  3. JavaScript 正在构建或更改标记结构 XPath 是 运行.

    补救措施:等待应用测试,直到文档完成加载并且 JavaScript 完成 运行。