Selenium webdriver Java 查詢元素

微微微笑發表於2015-07-11

1.簡單查詢

By ID: WebElement element=driver.findElement(By.id("userId"));

By Name:WebElement element=driver.findElement(By.name("cheese"));

By TagName:WebElement element=driver.findElement(By.tagName("a"));

By ClassName:WebElement element=driver.findElement(By.className("login"));

By LinkText:WebElement element=driver.findElement(By.linkText("Blog");

這種方式很簡單,只需要知道id等等屬性值就好。那麼問題來了,怎麼知道屬性值是什麼呢?總不至於通過網頁原始碼一個一個檢視吧!其實Firefox 有一款很強大的外掛,叫 Firebug。它是一款很經典的定位網頁元素以及檢視網頁原始碼的外掛。安裝方法是在火狐的附加元件裡搜尋”Firebug",然後我這邊選擇的是 “Firebug 2.0.8",安裝即可。

2.Xpath

關於Xpath的教程可以參考w3School:http://www.w3school.com.cn/xpath/

為了方便定位以及確認Xpath是否正確,Firefox也有一款外掛叫Xpath finder。選擇附加元件,然後搜尋 Xpath即可看到,我這邊的版本是 Xpath finder 1.02,點選安裝即可。

Xpath使用路徑表示式來選取XML文件中的節點或者節點集。

選取節點

下面列出了最有用的路徑表示式:

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

謂語

謂語用來查詢某個特定的節點或者包含某個指定的值得節點。謂語被嵌在[]中。

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

路徑表示式結果
/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。

使用:WebElement element=driver.findElement(By.xpath("//ul[@class='nav logged_out']/li"));

表示首先查詢class屬性的值為 ”nav logged_out"的ul元素,然後查詢到這些ul元素下面的所有li元素。

3.CSS選擇器

其實大部分的元素都會有一個ID或者Name,這樣通過方法1就可以解決,比較奇葩複雜的也全部可以通過XPath來解決。那麼為啥還要用CSS呢?恩,據說是因為CSS是最快的。這個需要點CSS功底。想當初W3C的教程我可是看了好久。

CSS教程:http://www.w3school.com.cn/css/index.asp

使用:List<WebElement> webElements = webdriver.findElements(By.cssSelector("ul.nav li"));

.nav 代表 class="nav"。

#nav 代表 id="nav"。

ul 代表屬性為 “ul"。

上面那句話的意思是選擇所有class屬性值為”nav"的ul下面的li。話說,有點繞啊~~

相關文章