【问题标题】:XPath attribute selection bug in Chrome?Chrome 中的 XPath 属性选择错误?
【发布时间】:2018-03-31 00:22:31
【问题描述】:

所以我有以下 HTML:

<div myID='carousel'>
   <div>
    <div>
     <h3>First Text</h3>
    </div>
   </div>
</div>

<div myID='carousel'>
   <div>
    <div>
     <h3>Second Text</h3>
    </div>
   </div>
</div>

我正在尝试获得第二个轮播 - 即 Second Text

我可以使用$x('//div[./h3[contains(text(),"Second Text")]]') 获取h3

但是我想要带有 myID 的父 div - 有什么想法吗?

【问题讨论】:

  • @kjhughes 只是检查一下 - 数字 2 是我想要的 - 但它似乎没有工作
  • 它返回 [] - 我希望它返回第二个 div 第二个对我来说很有意义,所以我也不明白为什么它不起作用。此外,如果我在没有and 的情况下尝试它们,它会返回预期的
  • 那仍然不是 - 所以如果我这样做 //div[h3 = "Second Text"] 它会返回一些东西。如果我这样做//div[@myID="carousel"] 它也会返回一些东西。但是使用and//div[h3 = "Second Text" and @myID="carousel"] 它不会

标签: html xml google-chrome xpath google-chrome-devtools


【解决方案1】:

纯 XML/XPath 答案

鉴于此 XML,

<html>
  <div myID='carousel'>
     <div>
       <div>
         <h3>First Text</h3>
       </div>
     </div>
  </div>

  <div myID='carousel'>
     <div>
       <div>
         <h3>Second Text</h3>
       </div>
     </div>
  </div>
</html>

然后:

  1. 这个 XPath,

    //div[.//h3 = "Second Text"]
    

    选择所有包含后代h3 元素的div 元素,其字符串值为"Second Text"

  2. 这个 XPath,

    //div[div/div/h3 = "Second Text" and @myID="carousel"]
    

    如果div 元素也有一个等于myID 属性值等于"carousel",则选择所有包含后代h3 元素(其字符串值为"Second Text")的div 元素。

  3. 这个 XPath,

    //div[div/div/h3 = "Second Text" and @myID]
    

    选择所有 div 元素,其中包含字符串值为 "Second Text" 的后代 h3 元素,前提是 div 元素还具有 myID 属性,无论其值如何。

谷歌浏览器 XPath 答案

这是令人困惑的部分:XPaths #2#3 在 Chrome 中通过 $x() 选择 nothing . (什么?)

原因是in Chrome, XPath requires lowercasing to query attributes,或许是受到XHTML's requirement that element and attribute names must be in lower case的推动。

Chrome 解决方法:测试@myid 而不是@myID

【讨论】:

  • 我已经教给了你足够多的东西,你应该能够从这里开始学习。祝你好运。
  • 谢谢 - 我明白了:$x('//*[div/div/h3 = "Related Products" and @data-id="decoratedCarouselContainer"]')
  • 答案已更新,以解决与 Chrome XPath 选择大写属性相关的混淆问题。 (呃)
  • @userMod2:除了最后一个键之外,我已经删除了所有的 cmets。既然我们已经弄清楚了,您可能也想清理您的评论线索。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多