如果在XPath中使用双斜杠(//)2次,它意味着什么?

Tus*_*r K 24 xml selenium xpath selenium-webdriver

如果使用双斜线2次,这意味着什么XPath.假如我使用XPath

//div[@id='add']//span[@id=addone']
Run Code Online (Sandbox Code Playgroud)

Guy*_*Guy 31

双斜杠//表示html树中与定位符匹配的当前节点的任何后代节点.

单斜杠/表示节点,它是当前的直接子节点.

//div[@id='add']//span[@id=addone'] 会匹配

<div id="add">
  <div>
    <span id="addone">
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

<div id="add">
    <span id="addone">
</div>
Run Code Online (Sandbox Code Playgroud)

//div[@id='add']/span[@id=addone'] 将仅匹配第二个html树.


kjh*_*hes 23

双斜线(//)是后轴或自身轴; 它很简短/descendant-or-self::node()/.

在您的示例XPath中:

//div[@id='add']//span[@id='addone']
Run Code Online (Sandbox Code Playgroud)
  • 第一次//出现时,它选择div文档中的所有元素,其id属性值等于'add'.
  • 第二次//出现时,它选择所有前面选择的每个span元素的后代div元素.
  • 请注意,使用两个双斜杠两次与使用双斜杠一次不同.例如,//span[@id='addone']将选择 整个文档中的所有 span元素@id='addone',无论它们是否是divwith 的后代@id='add'.


小智 6

如果你有这个:

<div id='add'>
   <ul>
      <li>
        <span id='add one' />
      </li>
   </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

然后

//div[@id='add']//span[@id='addone']
Run Code Online (Sandbox Code Playgroud)

将导致span因为第二个//意味着你寻找相对于的任何孩子

div[@id='add']
Run Code Online (Sandbox Code Playgroud)

那是span[@id='add one']

如果你使用一根斜线

//div[@id='add']/span[@id='addone']
Run Code Online (Sandbox Code Playgroud)

那么你当然不会找到它,因为然后你寻找一个直接的孩子,你必须使用

//div[@id='add']/ul/li/span[@id='addone']
Run Code Online (Sandbox Code Playgroud)

因此,第二个//对于避免 XPath 中出现额外的层次结构非常有用。