關于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">