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 中出现额外的层次结构非常有用。