XPath定位

我們知道,selenium的元素定位有以下幾種方法:

  • id=id
  • name=name
  • dom=javascriptExpression
  • xpath=xpathExpression
  • link=textPattern
  • css=cssSelectorSyntax

1. 通過id,name,link來定位

  (以下是在baidu中,查詢“test”,在查詢結果顯示後,點擊上方的“新聞”連接)

selenium 學習(2)--Xpath的知識 - 流口水的小豬 - 軌跡

 上面的id,name有個問題,就是開發人員有時不會使用id 或者name;或者name有重複的;或者id/name是系統自動生成的,隨機的。相對來說link的使用具有一定的實際意義。

2. 通過xpath定位

    下面的操作示意 如下,準備註冊baidu用戶 

selenium 學習(2)--Xpath的知識 - 流口水的小豬 - 軌跡
 
核心代碼如下圖
selenium 學習(2)--Xpath的知識 - 流口水的小豬 - 軌跡
 
 
對以上的補充說明=========================
其實通過firebug,我們能看到性別選擇的時候,我們用name,id都不能處理(name是一樣的,id沒有)
selenium 學習(2)--Xpath的知識 - 流口水的小豬 - 軌跡
這時只能用xpath。這裏我們用到了工具Xpath Checker 幫助我們來定位。
不過,Xpath Checker不一定能給出最好的xpath。
例如,我們看到代碼中“女”的按鈕時://input[@name='sex' and @value='2']
                               直接用工具得到的:id('sex')/x:div[2]/x:input[2]
我們還是需要通過經驗的積累來優化xpath的寫法。即,xpath的定位表達式不只一種。一個元素可能有好幾種的表達式。
 
對Xpath的學習=======================
什麼是 XPath?
XPath 使用路徑表達式在 XML 文檔中進行導航,是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。
XPath 包含一個標準函數庫.XPath 含有超過 100 個內建的函數。這些函數用於字符串值、數值、日期和時間比較、節點和 QName 處理、序列處理、邏輯值等等。

在 XPath 中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、註釋以及文檔(根)節點。XML 文檔是被作爲節點樹來對待的。樹的根被稱爲文檔節點或者根節點。
 
 下面將w3school的部分內容轉過來 http://www.w3school.com.cn/xpath/xpath_syntax.asp
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>
 
選取節點
XPath 使用路徑表達式在 XML 文檔中選取節點。節點是通過沿着路徑或者 step 來選取的。
下面列出了最有用的路徑表達式:

 表達式  描述
 nodename  選取此節點的所有子節點。
 /  從根節點選取。
 //  從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置
 .  選取當前節點。
 ..  選取當前節點的父節點。
 @  選取屬性。

  

 謂語(Predicates)

謂語用來查找某個特定的節點或者包含某個指定的值的節點。

謂語被嵌在方括號中。

實例

在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結果:

  路徑表達式  結果
 /bookstore/book[1]  選取屬於 bookstore 子元素的第一個 book 元素
  /bookstore/book[last()]  選取屬於 bookstore 子元素的最後一個 book 元素
 /bookstore/book[last()-1]  選取屬於 bookstore 子元素的倒數第二個 book 元素。
 /bookstore/book[position()<3]  選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素
 //title[@lang]  選取所有擁有名爲 lang 的屬性的 title 元素
 //title[@lang='eng']  選取所有 title 元素,且這些元素擁有值爲 eng 的 lang 屬性。
 /bookstore/book[price>35.00]  選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00。
  /bookstore/book[price>35.00]/title  選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大於 35.00。
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章