1. 程式人生 > >Robot Framework自動化測試-元素定位之xpath

Robot Framework自動化測試-元素定位之xpath

用xpath定位元素幾乎是萬能的了,可以定位到99%的元素;

如果一個元素沒有id 沒有name那我們該怎麼定位該元素了,第一想到的就是用xpath了。
在網上copy了一段程式碼,就以這個做說明吧,xpath定位元素分相對路徑和絕對路徑,主要說明下相對路徑的用法。

示例程式碼如下:

<html>
  <body link="#0000cc">
    <div id="wrapper" style="display: block;">
      <div id="content" style="display: block;">
      <div
id="u1" style="display: block;"> <div id="m"> <p id="lg"> <p id="nv"> <div id="fm"> <form id="form" class="fm" action="/s" name="f1"> <span class="s_ipt_wr"> <input id
="kw" type="text" name="wd"> ...... </body> </html>

1、絕對路徑定位

使用絕對路徑的方式定位除非是其父級元素都沒有一個唯一識別的元素才使用該方式;
假如要定位到輸入框,那麼使用絕對路徑的方式為:
xpath= /html/body/div[1]/div[2]/div[1]/div[1]/form/span[1]/input
就是從根部開始找,一級一級往下走,如果有同級別的需要用[]標明序號,從1開始

2、相對路徑定位

下面各方法中都是以定位到input做說明,以下不再說明。

2.1 元素本身找


xpath=//input[@id=”kw” ] 或者xpath=//*[@id=”kw” ]
//input表示匹配input標籤的所有元素
//*表示匹配所有元素的標籤
當然不限於用id,也可以xpath=//*[@type=”text”]
注意:要保證這些元素可以唯一的識別一個元素

2.2 布林值寫法
如果input標籤中 id不是唯一的,type也不是唯一的,但在該頁面中包含該id和type的只有這個元素時,那麼我們可以用組合的方式定位
xpath=//*[@id=”kw” and @type=”text”]
當然還有or 或,慎用
xpath=//*[@id=”kw” or @type=”text”]

2.3 找父級
如果自己沒有唯一的標誌,那麼就找自己的上級(父級),或者上級的上級,以此類推。
找父級:xpath=//span[@class=’s_ipt_w’]/input
找父級的父級:xpath=//form[@id=”form”]/span[1]/input

2.4 跳級
如果需要定位的元素在該頁面不是唯一,但在某個容器內是唯一的,當然那個容器必須要有唯一的標誌;
跳級的話要用兩個//
那麼可以這樣表示:xpath=//div[@id=”wrapper”]//input [@id=”kw”]
注意:該方法要保證在某容器內該元素是唯一的。

2.5 軸
這裡不介紹圖中的每個方法,只以第一個做說明;

這裡寫圖片描述

用我實際工作中的介紹下,如圖:
這裡寫圖片描述
要定位要編輯按鈕(圖片底部處)
假如要定位列表中的某些資料某個按鈕,但不能確定他的位置在第一個還是第二個還是其他,那麼可以用軸的方式定位;
xpath=//*[@id=”main-container”]//div[@class=”tabbable”]//li/h3[starts-with(text(),”【圖片素材】”)]/ancestor::li[1]/div[3]/a[@title=”編輯”]
ancestor的前半部分,表示先定位到要找名稱以“【圖片素材】”開頭的資料;後半部分定位到名稱處後,再根據ancestor的功能(ancestor表示選取當前節點的所有先輩,那麼要從名稱處的父級開始定位)定位要需要定位的元素“編輯”按鈕。
注意:該方法很實用,能定位到比較複雜的元素,還要加兩個::

2.6 步

語法:軸名稱::節點測試[謂語]

這裡介紹下last();上面的軸方法中,還存在一個問題就是,一條資料中圖片數量不同的話,上面的方法又不能使用了,需用到步方法
xpath=//*[@id=”main-container”]//div[@class=”tabbable”]//li/h3[starts-with(text(),”【圖片素材】”)]/ancestor::li[1]/div[last()]/a[@title=”編輯”]
因為編輯按鈕在最後一個div中,所以前面不管有多少圖片的話他總是會定位到最後一個,如果要定位要其他的則在()輸入數字即可。

差不多了,用以上這些方式進行定位基本能應付常規工作中的定位了。