被測試網頁的HMTL代碼html
<html> <body> <div id="div1"> <input name="div1input"></input> <a href="http://www.sogou.com">搜狗搜索</a> <img alt="div1-img1" src="http://www.sogou.com/images/logo/new/sogou.png" href="http://www.sogou.com">搜狗圖片</img> <input type="button" value="查詢"></> </div> <br> <div name="div2"> <input name="div2input"></input> <a href="http://www.baidu.com">百度搜索</a> <img alt="div2-img2" src="http://www.baidu.com/img/bdlogo.png" href="http://www.baidu.com">百度圖片</img> </div> </body> </html>
在被測試網頁中,查找第一個 div 標籤中的按鈕。dom
XPath的表達式: /html/body/div/input[@value="查詢"]函數
Java的定位語句: WebElement button= driver.findElement(By.xpath("/html/body/div/input[@value='查詢']"));測試
在被測試網頁中,查找第一個 div 標籤中的按鈕。
XPath的表達式:
// input[@value="查詢"]
Java的定位語句:
WebElement button= driver.findElement(By.xpath("//input[@value='查詢']"));spa
被測試網頁的HMTL代碼3d
使用索引號定位方式: 在被測試網頁中,查找第二個 div 標籤中的「查詢」按鈕。code
XPath的表達式: //input[2]htm
Java的定位語句: WebElement button= driver.findElement(By.xpath("//input[2]"));blog
使用頁面屬性值方式:索引
咱們嘗試定位被測試網頁中的第一個圖片元素。
XPath 的表達式
//img[@alt='div1-img1']
Java的定位語句:
WebElement img= driver.findElement(By.xpath("//img[@alt='div1-img1']"));
預期定位的頁面元素 | 定位表達式示例 | 使用的屬性值 |
---|---|---|
定位頁面的第一個圖片 | //img[@href='http://www.sogou.com'] | 使用img標籤的href屬性值 |
定位第二個div中第一個Input輸入框 | //div[@name='div2']/input[@name='div2input'] | 使用div標籤的name屬性值 使用 input標籤的name 屬性值 |
定位第一個div中的第一個連接 | //div[@id='div1']/a[@href='http://www.sogou.com'] | 使用的div標籤的id 屬性值 使用了a標籤的href屬性值 |
定位頁面的查詢按鈕 | //input[@type='button'] | 使用了type屬性值 |
XPath函數 | 定位表達式示例 | 表達式解釋 |
---|---|---|
Starts-with() | //img[starts-with(@alt,'div1')] | 查找圖片alt屬性開始位置包含’div1’關鍵字的頁面元素 |
Contains() | //img[contains(@alt,'g1')] | 查找圖片alt屬性包含’g1’關鍵字的頁面元素 |
軸:
XPath軸(XPath Axes)可定義某個相對於當前節點的節點集:
一、child 選取當前節點的全部子元素
二、parent 選取當前節點的父節點
三、descendant 選取當前節點的全部後代元素(子、孫等)
四、ancestor 選取當前節點的全部先輩(父、祖父等)
五、descendant-or-self 選取當前節點的全部後代元素(子、孫等)以及當前節點自己
六、ancestor-or-self 選取當前節點的全部先輩(父、祖父等)以及當前節點自己
七、preceding-sibling 選取當前節點的開始標籤以前的全部同級節點
八、following-sibling 選取當前節點的結束標籤以後的全部同級節點
九、preceding 選取文檔中當前節點的開始標籤以前的全部節點
十、following 選取文檔中當前節點的結束標籤以後的全部節點
十一、self 選取當前節點
十二、attribute 選取當前節點的全部屬性
1三、namespace 選取當前節點的全部命名空間節點
XPath軸關鍵字 | 軸的含義說明 | 定位表達式示例 | 表達式解釋 |
ancestor | 選擇當前節點上層的全部節點 | //img[@alt='div2-img2']/ancestor::div | 查找到alt屬性值爲div2-img的圖片,並基於圖片位置找到他上級的div頁面元素 |
descendant | 選擇當前節點下層的全部節點注:不能超出當前節點的結束標籤 | //div[@name='div2']/descendant::img | 查找到name屬性值的div頁面元素,並基於div的位置找到他下級全部節點中的img頁面元素 |
following | 選取當前節點的結束標籤以後的全部節點注:仔細體會與descendant的區別 | //div[@id='div1']/following::img | 超找到id 屬性值爲div1的div頁面元素,並基於div的位置找到它後面(結束標籤以後)節點中的img頁面元素 |
following-sibling | 選取當前節點的結束標籤以後的全部平級節點 ,自上而下,離當前結點最近的爲索引1,越往下數字越大。 | //a[@href='http://www.sogou.com']/follo wing-sibling::input | 查找到連接地址爲http://www.sogou.com的連接頁面元素,並基於連接的位置找到它後續節點中input頁面元素 |
preceding | 選擇當前節點開始標籤以前的全部節點 | //img[@alt='div2-img2']/preceding::div | 查找到alt屬性值爲div2-img2的圖片頁面元素,並基於圖片的位置找到它前面節點中的div頁面元素 |
preceding-sibling | 選擇當前節點開始標籤以前的全部同級節點,自下而上,離當前結點最近的爲索引1,越往上數字越大。 | //img[@alt='div2-img2']/preceding-sibling ::a[1] | 查找到alt屬性值爲div2-img2的圖片頁面元素,並基於圖片的位置找到它前面同級節點中的第二個連接頁面元素 |
以下,須要根據下圖中的「河南」關鍵字,定位到前面的操做按鈕,:
查看html代碼,結構以下
1)先找到河南的元素位置
xpath=//a[contains(text(),'河南')]
2)根據dom結構,相對定位
xpath=//a[contains(text(),'河南')]/parent::li/child::i
參考:https://www.cnblogs.com/testlife007/p/4263745.html