xpath定位方法詳解


1.xpath較復雜的定位方法:

現在要引用id為“J_password”的input元素,可以像下面這樣寫:

WebElement password = driver.findElement(By.xpath("//*[@id='J_login_form']/dl/dt/input[@id='J_password']"));

其中//*[@id=’ J_login_form’]這一段是指在根元素下查找任意id為J_login_form的元素,此時相當於引用到了form元素。后面的路徑必須按照源碼的層級依次往下寫。按照圖所示代碼中,我們要找的input元素包含在一個dt標簽內,而dt又包含在dl標簽內,所以中間必須寫上dl和dt兩層,才到input這層。當然我們也可以用*號省略具體的標簽名稱,但元素的層級關系必須體現出來,比如我們不能寫成//*[@id='J_login_form']/input[@id='J_password'],這樣肯定會報錯的。

另外一種寫法:WebElement password = driver.findElement(By.xpath("//*[@id='J_login_form']/*/*/input[@id='J_password']"));

2.xpath的模糊定位方法:

這段代碼中的“退出”這個超鏈接,沒有標准id元素,只有一個rel和href,不是很好定位。用xpath的幾種模糊匹配模式來定位它,主要有四種方式:

a. 用contains關鍵字,定位代碼如下:

driver.findElement(By.xpath(“//a[contains(@href, ‘logout’)]”));

這句話的意思是尋找頁面中href屬性值包含有logout這個單詞的所有a元素,由於這個退出按鈕的href屬性里肯定會包含logout,所以這種方式是可行的,也會經常用到。其中@后面可以跟該元素任意的屬性名。

b. 用start-with,定位代碼如下:

driver.findElement(By.xpath(“//a[starts-with(@rel, ‘nofo’)]));

這種方式一般用於知道超鏈接上顯示的部分或全部文本信息時,可以使用。

這句的意思是尋找rel屬性以nofo開頭的a元素。其中@后面的rel可以替換成元素的任意其他屬性

c. 用Text關鍵字,定位代碼如下:

driver.findElement(By.xpath(“//a[contains(text(), ’退出’)]));

直接查找頁面當中所有的退出二字,根本就不用知道它是個a元素了。這種方法也經常用於純文字的查找

d.如果知道超鏈接元素的文本內容,也可以用

driver.findElement(By.xpath(“//a[contains(text(), ’退出’)]));

3.XPath 關於網頁中的動態屬性的定位,例如,ASP.NET 應用程序中動態生成 id 屬性值,可以有以下四種方法:

a.starts-with      例子: input[starts-with(@id,'ctrl')]              解析:匹配以 ctrl開始的屬性值

b.ends-with        例子:input[ends-with(@id,'_userName')]     解析:匹配以 userName 結尾的屬性值

c.contains()        例子:Input[contains(@id,'userName')]         解析:匹配含有 userName 屬性值

 

參考網址:http://www.cnblogs.com/qingchunjun/p/4208159.html

xpath詳解:http://www.cnblogs.com/ktgu/archive/2009/04/16/1353246.html


免責聲明!

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



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