使用selenium進行自動化測試,其實不少時候就是模擬用戶的操做,在前端頁面對元素進行操做,所以元素的定位在自動化測試中是相當重要的。關於如何html
使用id,className,name,linkText這些簡單的定位方式查找元素,本文將很少作介紹。前端
本文中主要介紹selenium webdriver中的核心定位方式——xpath定位。web
1. xpath語法sql
//tagname[@attribute=‘value’]chrome
其中,tagname表示標籤名稱,@後面跟隨屬性名稱,等號後面是屬性值。若是須要查找多重下級,則在父級的xpath路徑後繼續追加定位,例如://div[@id='car_genre_id']/div/div,表示 id是car_genre_id的div元素的子節點div的子節點div。瀏覽器
2. xpath的絕對路徑和相對路徑工具
1)單斜線‘/’表明絕對路徑,表示該富豪後面的元素是上一級節點的子節點的一個,只能一級級按序向下查詢,不能跳級;測試
2)雙斜線'//'表明相對路徑,表示下級任何子節點或者任何嵌套子節點中的一個,能夠跳級;優化
舉個栗子,在路徑//div[@id='root']/input中,表示越過全部父節點,直接在整個html頁面中查找id是'root'的div元素,由於div標籤前是表明相對定位的雙斜線'//';而對於input標籤來講,它必須是id是'root'的div的一級子節點,它和div中間不能越過其餘的層級,由於input標籤前是表明絕對路徑的單斜線'/' 。spa
3. 如何獲取元素的xpath路徑
大多瀏覽器的開發者模式中都具有了輸出元素xpath路徑的功能。以chrome爲例,點擊F12後,在DOM樹中選中元素,右鍵> Copy > CopyXpath後,在記事本上黏貼,便可獲得該元素的xpath路徑。
4. 使用contains屬性查找元素
contains表示查找屬性包含該屬性值value的頁面標籤元素,注意是包含,並非徹底等於,相似於sql查找語句中like的用法。
語法爲: //tagname[contains(attribute1,'value1') and contains(attribute2,'value2') and ... ]
舉個栗子,路徑 //div[@id="root"]//div[contains(text(),'共'] ,表示在id是'root'的div中,越過層級關係,查找文本信息包含"共"的div元素;
路徑//div[@id='root']//div[contains(className,'ant-Btn')], 表示在id是'root'的div中,越過層級關係,查找className屬性中包含'ant-Btn'屬性的元素;
5. 查找父級節點和平級節點
查找父級節點: xpath-to-some-element//parent::tagname
向前查找平級節點:xpath-to-some-element//preceding-sibling::tagname
向後查找平級節點:xpath-to-some-element//following-sibling::tagname
6. 使用xpath定位元素時須要注意的地方
1)保證xpath路徑的惟一性。
必定要保證xpath路徑在頁面中是惟一的。若是不太肯定,能夠在chrome的開發者工具打開的狀況下,點擊ctrol+F,在彈出的輸入框中輸入xpath
的路徑,觀察當前頁面下,以該路徑查找到的元素是否是隻有一個;
2)儘可能不要使用通配符*
*表示能夠是當前頁面中的任意標籤,這樣在查找時會增大負載,儘可能準確地寫出標籤名稱。
3)建議使用相對路徑定位
若是前面頁面的元素結構發生調整,那麼以前的絕對定位就會做廢。而使用相對路徑,能夠減小定位對頁面HTML元素結構的依賴性,且相對路徑
每每長度較短,更加準確美觀。在優化定位方式時,能夠將此原則做爲參考。