selenium webdriver——XPath 定位



baidu.html代碼如下

....
<
form id="form" class="fm" action="/s" name="f">   <input type="hidden" value="utf-8" name="ie">   <input type="hidden" value="8" name="f">   <input type="hidden" value="1" name="rsv_bp">   <input type="hidden" value="1" name="rsv_idx">   <input type="hidden" value="" name="ch">   <input type="hidden" value="02.." name="tn">   <input type="hidden" value="" name="bar">   <span class="bg s_ipt_wr">     <input id="kw" class="s_ipt" autocomplete="off" maxlength="100" value="" name="wd">   </span>   <span class="bg s_btn_wr">     <input id="su" class="bg s_btn" type="submit" value="百度一下">   </span>
.....

1.絕對路徑定位

XPath 的絕對路徑主要用標簽名的層級關系來定位元素的絕對路徑。最外層為html 語言,body 文本內,一級一級往下查找,如果一個層級下有多個相同的標簽名,那么就按上下順序確定是第幾個

用下面的方法來定位百度輸入框和搜索按鈕

findElement(By.xpath("/html/body/div/div[2]/div/div/div/from/span/input"))
findElement(By.xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input"))

 一旦頁面結構發生改變,改路徑也隨之失效,必須重新。 所以不推薦使用絕對路徑的寫法

 

2.相對路徑定位

//表示當前頁面某個目錄下,input 表示定位元素的標簽名,[@id='kw'] 表示這個元素的id 屬性值等於kw。

findElement(By.xpath("//input[@id='kw']"))
findElement(By.xpath("//input[@id='su']"))

 

如果不想指定標簽名也可以用星號(*)代替

WebElement button = driver.findElement(By.xpath("//*[@id='kw']"));

使用XPath 不僅僅只局限在id、name 和class 這三個屬性值,元素的任意屬性值都可以使用,只要它能唯一的標識一個元素。

 

3.使用邏輯運算符

遇到一個屬性不足以定位一個元素的情況,需要聯合其他的屬性達到精確定位,類似如下:

findElement(By.xpath("//input[@id='kw' and @class='su']/span/input"))

 

4.模糊定位

查找圖片alt屬性開始位置包含'div1'關鍵字的元素

//imag[starts-with(@alt,'div')]

 

查找圖片alt屬性結尾位置包含'div1'關鍵字的元素

//imag[ends-with(@alt,'div')]

 

查找圖片alt屬性包含'g1'關鍵字的元素

//imag[contains(@alt,'g1')]

 

5.text() 函數 文本定位

查找所有文本為"百度搜索" 的元素

driver.findElement(By.xpath("//*[text()='百度搜索']"));

 比如知乎登錄界面的登錄按鈕:

可以寫成這樣:

driver.findElement(By.xpath("//button[text()='登錄']"))

 

查找包含搜索的元素

driver.findElement(By.xpath("//a[contains(text(),'搜索')]"));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM