selenium頁面元素定位方法
selenium中元素的定位是很關鍵的,定位不準,也就無法操作頁面元素,自動化也是白搭,現在讓我們來了解一下selenium的定位方法,
方法 | 語法 | 描述 |
---|---|---|
id | driver.findElement(By.id(String id)) | 使用頁面元素的id屬性 |
name | driver.findElement(By.name(String name)) | 使用頁面元素的name屬性 |
className | driver.findElement(By.className(String class)) | 使用頁面元素的類名屬性 |
tagName | driver.findElement(By.tagName(String tag)) | 使用頁面元素的HTML的標籤名屬性 |
linkText | driver.findElement(By.linkText(String text)) | 使用頁面連結元素的文字屬性(全部對應文字內容) |
partialLinkText | driver.findElement(By.partialLinkText(String text)) | 使用頁面連結元素的文字屬性(包含部分文字內容) |
xpath | driver.findElement(By.xpath(String xpath) | 使用xpath定位 |
cssSelector | driver.findElement(By.cssSelector(String css)) | 使用CSS選擇器定位 |
定位方法有了,就是要如何在頁面中找到元素,正確選擇元素定位,首先要在瀏覽器中找到相應元素,右鍵點選檢查或檢視按鈕
這時就可以清楚的看見頁面元素的屬性值,現在幾乎所有的主流瀏覽器都有這個功能,當然也有一些外掛,比如火狐上的Firebug.
可以檢視元素的相應屬性,這時候就可以來寫定位元素的程式碼了。
1.id定位
WebElement el=driver.findElement(By.id("kw"));
2.name定位
WebElement el=driver.findElement(By.name("wd"));
3.className定位
className屬性是利用元素的css樣式表所引用的偽類名稱來進行元素查詢的方法。對於任何HTML頁面的元素來說,一般程式設計師會給元素直接賦予一個樣式屬性或者利用css檔案裡的偽類來定義元素樣式,使元素在頁面上顯示時能夠更加美觀。
WebElementel=driver.findElement(By.className("s_ipt"));
4.tagName定位
該方法可以通過元素的標籤名稱來定位元素,這個方法搜尋到的元素通常不止一個,所有操作元素時定位並不準確,所以使用並不多
WebElementel=driver.findElement(By.tagName("input"));
5.linkText定位
這種方式一般專門用於定位頁面上的超文字連結,通過超文字連結上的文字資訊來定位元素,比如下面這個百度首頁的地圖按鈕
<a href="http://map.baidu.com"target="_blank" class="mnav">地圖</a>
定位程式碼如下
WebElementel=driver.findElement(By.linkText("地圖"));
6.partialLinkText定位
同上一個方法一樣也是定位超文字連結的,如果你不能準確知道超連結上的文字資訊或者只想通過一些關鍵字進行匹配時,可以使用這個方法來通過部分連結文字進行匹配
WebElementel=driver.findElement(By.partialLinkText("地"));
7.xpath定位
XPath是XML Path的簡稱,由於HTML文件本身就是一個標準的XML頁面,所以我們可以使用XPath的語法來定位頁面元素,使用這種方法幾乎可以定位到頁面上的任意元素。xpath有兩種寫法,一種是絕對路徑,另外一種是相對路徑,一般不推薦使用絕對路徑的寫法,因為一旦頁面結構發生變化,該路徑也隨之失效,必須重新寫。詳細的xpath語法可以參考http://www.w3school.com.cn/xpath/index.asp
WebElementel=driver.findElement(By.xpath("//input[@id='kw']"));
8.cssSelector定位
WebElementel=driver.findElement(By.cssSelector("#kw"));
總共有8種方法,但是在實際的運用中,我們一定要合理使用,按以下方法進行選擇
1. 當頁面元素有id和name屬性時,最好儘量用id和name來定位。但由於現實專案程式碼並不規範,沒有這些屬性時,就要選擇其他方法定位。
2. xpath和cssSelector功能很強大,但定位效能並不是太好,所以當有id和name屬性可以定位時就勿用。如果元素用別的方法都無法定位,可以選擇xpath或cssSelector。
3. 當要定位一組相同元素時,可以考慮用tagName、className或者name。
4. 當需要定位超文字連結時,可以使用linkText或partialLinkText方式。