關於xpath相對路徑前加點與不加點的區別


轉自:https://blog.csdn.net/qingmu_9923/article/details/51771602

 

最近在用selenium做web工程自動化測試的相關項目,會經常用到元素定位,由於原項目開發中並不是所有關鍵元素都加有id,所以xpath就成為了使用最為頻繁的定位方式。

眾所周知,xpath定位分為絕對定位和相對定位,如果以單斜線“/”開頭則表示為從根目錄下開始的絕對路徑,以雙斜線“//”開始的是相對路徑。為了適應頁面結構的改變,一般相對路徑較為常用。selenium2中的webDriver提供了findElement(By)的方法,該方法中的參數By就可以是xpath的形式。我在工作中也大多使用此方法,由於fireFox提供的fireBug和firePath插件獲取元素非常方便,所以經常用插件定位。但是奇怪的是每次定位雙斜線的前面總是會多一個點:“.//”,但是去掉點之后似乎也沒有什么影響,因此一直沒有在意。但是后來的一件是讓我對此改變了看法。

 

[html]  view plain  copy
 
  1. <span style="font-family:SimSun;"><a>  
  2.   <b>blank</b>  
  3.     <id="z">  
  4.       <b>content</b>  
  5.     </c>    
  6. </a></span>  


上面是一個簡單的示例文檔結構,在selenium中webElement也有一個findElement的方法,用於查找該元素下的子孫元素,假如我們已經獲得了C元素,我們現在要獲取C元素下的b元素:請注意以下兩種代碼的區別。

寫法一:webElement b = C.findElement(By.xpath(".//b"))

寫法二:webElement b = C.findElement(By.xpath("//b"))

其實兩個代碼的區別就在於xpath路徑加不加點的問題上,事實證明,寫法一取到的是包含blank的b元素,而寫法二取到的是包含content的b元素。所以其實加點和不加點是有很大區別的,在查找整個頁面的時候沒有區別,但是在當前元素調用此方法時就有了,加點代表取當前元素為根節點向下查找元素,而不加點是以整個頁面為根元素向下查找的。所以firePath這個插件還是很智能的,默認給xpath路徑加上了點,以防止在當前元素下找元素時發生錯誤。


免責聲明!

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



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