【问题标题】:Why is my XPath based on text content failing?为什么我的基于文本内容的 XPath 失败了?
【发布时间】:2021-06-09 23:30:51
【问题描述】:

我正在尝试匹配此a 链接:

<a href="/collection/accessories_wall?productType=Cases+%26+Sleeves&amp;productType=Screen+Protectors&amp;compatibilityCategory=Phone" class="product-link" data-product-id="cases_protection" xpath="1">
  Cases &amp; protection
  
</a>

试过了:

//a[contains(text(),'Cases &amp; protection')]

【问题讨论】:

    标签: html xml xpath


    【解决方案1】:

    您可能忘记使用 &amp;amp; 转义与符号 &amp;amp;
    所以试试这个:

    //a[contains(normalize-space(text()),'Cases &amp; protection')]
    

    编辑:
    我添加了normalize-space(...) 函数来只检查核心文本而不是周围的空格。也许这对你有帮助。

    【讨论】:

    • 好点 (+1) 但看起来 OP 有 &amp;amp; 但只是没有将 XPath 格式化为代码,所以它没有显示。
    【解决方案2】:

    您发布的内容很好,但以下是 XPath 打算在元素文本上匹配的一些常见原因可能会失败:

    1. 诸如&lt;b&gt;&lt;/b&gt; 之类的附加标记会阻止对text() 子节点的测试。
      补救措施: 测试元素的字符串值

      //a[contains(.,'Cases &amp; protection')]
      
    2. 空格导致比较失败。
      补救措施:使用normalize-space()

      //a[contains(normalize-space(),'Cases &amp; protection')]
      
    3. 出现误报匹配是因为其他字符串基于子字符串匹配:
      补救措施:测试相等性而不是子字符串包含:

      //a[normalize-space()='Cases &amp; protection']
      

    与 XPath 匹配的意外失败相关的网页相关问题(文本内容测试除外)包括尚未加载的标记/内容、动态生成或驻留在 iframe 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2012-10-18
      相关资源
      最近更新 更多