一篇文章搞定 selenium元素定位

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贈送測試教程,部分截圖

需要其他學習資料或關於轉行建議的:

歡迎大家隨時加我微信騷擾:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章