关于xpath 定位部分呢,除了《2016.9.20 automation 总结》中 最后一部分总结的xpath基础外,
可能有时候我们遇到一些不好定位的元素。
你有遇到过定位一个元素,需要先有一个有特殊特性的元素,找到它的祖先元素,在通过祖先元素,在找它的子孙来定位的吗?
遇到过定位某个元素包含固定的属性,但是属性值不固定的吗?
Xpath 还提供了一些keywords 来实现更多定位
ancestor:祖先节点
ancestor-or-self: 寻找自己或者祖先节点
/*[@class] : 找有class 属性的元素
//div[ul] : 找有孩子tag 是ul (不包含孙子,只孩子)的div 元素
preceding-sibling: 查找文档内与当前节点同一父节点,且上面显示的兄弟姐妹
following-sibling: 查找文档内与当前节点同一父节点,且当前节点下面的兄弟姐妹
preceding: 当前节点前所有的元素
following:当前节点后所有的元素
parent: 当前节点的父节点
descendant: 后裔
For Example:
假设HTML 如下 :
<div id="parent">
<a id="name"> 1</a>
<div id="c">
<a id="a"> 内部</a>
</div>
<em>3</em>
</div>
Xpath 及对应结果:
//*[@id="a"]/ancestor::*, 结果是 <div id="parent">, <div id="c">
//*[text()="3"]/preceding-sibling::*, 结果是 <a id="name">, <div id="c">
//*[text()="2"]/preceding-sibling::*, 结果是 <a id="name">
//*[text()="2"]/following-sibling::*, 结果是 <em>
//*[text()="2"]/parent::*, 结果是 <div id="parent">
//*[@id="parent"]/child , 结果是 <a id="name"><div id="c">, <em>
//*[@id="parent"]/descendant::* , 结果是 <a id="name"><div id="a">, <a id="a"><em>
//*[@id="parent"]/descendant::a , 结果是 <a id="name">, <a id="a">
网友评论