selenium
元素定位
定義:XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。XPath 是 W3C XSLT 標準的主要元素,並且 XQuery 和 XPointer 同時被構建於 XPath 表達之上。
下面的例子中紅色字體表示使用對應語法獲取的元素(或屬性)。
XPath軸(XPath Axes)可定義某個相對於當前節點的節點集:
1、child 選取當前節點的所有子元素
2、parent 選取當前節點的父節點
3、descendant 選取當前節點的所有後代元素(子、孫等)
4、ancestor 選取當前節點的所有先輩(父、祖父等)
5、descendant-or-self 選取當前節點的所有後代元素(子、孫等)以及當前節點本身
6、ancestor-or-self 選取當前節點的所有先輩(父、祖父等)以及當前節點本身
7、preceding-sibling 選取當前節點之前的所有同級節點
8、following-sibling 選取當前節點之後的所有同級節點
9、preceding 選取文檔中當前節點的開始標籤之前的所有節點
10、following 選取文檔中當前節點的結束標籤之後的所有節點
11、self 選取當前節點
12、attribute 選取當前節點的所有屬性
13、namespace 選取當前節點的所有命名空間節點
following-sibling 選取當前節點之後的所有同級節點,跟preceding-sibling一樣都是選取同級同父的節點,只不過following是取對應節點之後的節點,preceding-sibling取的是該節點之前的節點。
/AAA/BBB/following-sibling::* 取/AAA/BBB節點的之後的所有同級節點
AAA/BBB/following-sibling::* 取/AAA/BBB節點的之後的所有同級節點
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
//CCC/following-sibling::* 選取所有CCC元素的之後所有同級節點
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
xpath的作用就是兩個字“定位”,運用各種方法進行快速準確的定位,推薦兩個非常有用的的firefox工具:firebug和xpath checker
定位
01依靠自己屬性,文本定位
//td[text()='xxx']
//div[contains(@class,'xxx')]
//div[@class='xxx' and @type='xxx']
02依靠父節點定位
//div[@class='xxx']/div
//div[@id='xxx']/div
03依靠子節點定位
//div[div[@id='xxx']]
//div[div[@name='xxx']]
04混合型
//div[div[@name='xxx']]/img
//td[a/font[contains(text(),'xxx')]]//input[@type='xxx']
xpath的學習-拓展
01 following-sibling
following-sibling即爲“選擇當前節點之後的所有同級節點”,那麼沒有加上“sibling”關鍵字的,搜索的就是之上/之下的所有節點,忽略同級概念,例如:
<div>
<input id="123">
<input>
</div>
要定位第二個input://input[@id='123']/following-sibling::input
02 preceding-sibling
preceding-sibling的解釋是“選取當前節點之前的所有同級節點”,那麼沒有加上“sibling”關鍵字的,搜索的就是之上/之下的所有節點,忽略同級概念, preceding-sibling和following-sibling是剛好相反的
<div>
<span>text</span>
<input id="123">
</div>
要定位第二個input://input[@id='123']/preceding-sibling::span
03 contains
和字面意思一樣就是包含,例如://div[contains(@class,'xxx')]
04 starts-with
和字面意思一樣就是以某某開頭,例如://input[starts-with(@class,'xxx')]
05 not
就是否定的意思
比如找一個id不爲123的input:input[not[id='123']]
又如找一個文本中不包含xxx字段的span://span[not(contains(text(),'xxx'))]
xpath的學習-補充
01 絕對路徑
html/body/div/span[2]/input[2] 中間結構變化,就失效
02 相對路徑
//開始,在整個html source裏找,不管在什麼位置
03 postition=2position()>3position()<3
例如html:<div id="positions">
<input>
<span>test position()1</span>
<span>test position()2</span>
<span>test position()3</span>
<span>test position()4</span>
<span>test position()5</span>
</input>
</div>
獲取第一個span,可以是//div[@id='positions']/span[1],也可以是//div[@id='positions']/span[position()=1]
//div[@id='positions']/span[position()>3]就是定位了test position()4和test position()5
//div[@id='positions']/span[position()<3]就是定位了test position()1和test position()2
04 last()last()-1
以上面的html爲例子,獲取最後一個span://div[@id='positions']/span[last()]
以上面的html爲例子,獲取倒數第二個span://div[@id='positions']/span[last()-1]
05 屬性定位元素
@class //div[@class] 有class屬性的div
06 屬性值定位
//div[@class='xxx']
關注公衆號回覆1贈送測試書籍
回覆2贈送測試教程,部分截圖
需要其他學習資料或關於轉行建議的:
歡迎大家隨時加我微信騷擾: