日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Selenium Webdriver定位頁面元素的幾種方式

 Go_Ahead 2015-09-15
       對于有點(diǎn)開發(fā)經(jīng)驗(yàn)的人來說學(xué)習(xí)這個(gè)定位其實(shí)相對容易很多,只要你寫過前端js方面的代碼,基本上selenium webdriver的元素定位方式一看就懂,當(dāng)然也有幾個(gè)需要特別注意(如By.xpath/),需要深入的去了解一些,畢竟在實(shí)際使用中還是挺頻繁的,下面依照常用->不常用的順序介紹selenium webdriver定位元素的幾種方式:
下圖是通過firebug調(diào)試定位到的百度搜索框:
 

1.By.id

2.By.name
同樣,將控件所對應(yīng)的name屬性找到即可
 
3.By.xpath
這個(gè)方法非常重要,會(huì)經(jīng)常使用到,使用這種方式幾乎可以定位到任意頁面上的元素。如圖所示,將用xpath(頁面中元素的路徑)來定位我們需要用到的元素
 
 該圖所對應(yīng)的頁面上的標(biāo)簽: 
通過路徑來定位控件,分為:絕對路徑、相對路徑(這個(gè)概念對應(yīng)做過開發(fā)的人來說非常熟悉,不錯(cuò)與我們開發(fā)中的絕對路徑相對路徑非常相似),那么通過selenium webdriver的xpath方式定位元素需要注意:
a.絕對路徑以 "/" 表示,相對路徑以 "//" 表示
-- 當(dāng)xpath路徑以 "/" 開頭時(shí),表示從頁面的根節(jié)點(diǎn)開始解析;當(dāng)"/"出現(xiàn)在xpath路徑中時(shí),表示     尋找父節(jié)點(diǎn)的直接子節(jié)點(diǎn)。
-- 當(dāng)xpath路徑以 "//" 開頭時(shí),表示從頁面上任意符合的元素節(jié)點(diǎn)開始解析;當(dāng)"//"出現(xiàn)在xpath路徑中時(shí),表示尋找父節(jié)點(diǎn)下任意符合條件的子節(jié)點(diǎn)。
弄清楚它們各表示什么意思以后,就可以在實(shí)際應(yīng)用中絕對路徑相對路徑混合使用。
下面是相對路徑引用寫法:
查找頁面根元素://
查找頁面上所有的input元素://input
查找頁面上第一個(gè)form元素://form[1]
查找頁面上第一個(gè)form元素內(nèi)的直接input(即第一個(gè)input控件)元素://form[1]/input
查找頁面上第一個(gè)form元素內(nèi)所有的input元素(只要在form元素內(nèi)的input都算,不管嵌套了多少個(gè)其它標(biāo)簽,此時(shí)可使用相對路徑"//")://form[1]//input
查找頁面上id為loginForm的form元素://form[@id='loginForm']
查找頁面上id為loginForm的form元素下第一個(gè)input元素://form[@id='loginForm']/input
查找頁面上id為loginForm的form元素下第4個(gè)input元素://form[@id='loginForm']/input[4]
查找頁面上name屬性為username的input元素://input[@name='username']
查找頁面上name屬性為contiune且type屬性為button的input元素://input[@name='contiune'][@type='button']

4.By.tagName
通過元素的標(biāo)簽名稱來查找元素.該方法與By.id、By.name不同,通常By.tagName查詢出來的元素不止一個(gè),可能會(huì)有多個(gè),所以,使用該方法時(shí)會(huì)結(jié)合findElements來用,如下:
List<WebElement> inputElements = driver.findElements(By.tagName("input"));
for (WebElement input : inputElements) {
if(input.getAttribute("type").equals("text")){
System.out.println(input.getText());
}
}
在頁面中,使用input標(biāo)簽的有:文本框/單選框/復(fù)選框/下拉框/密碼框...,只有type屬性不同

5.By.className
利用元素的css樣式來查找元素.如下頁面代碼,通過className來查找對應(yīng)的<p>標(biāo)簽
 WebElement element = driver.findElement(By.className("bmi_info"));
在我學(xué)習(xí)的過程中,結(jié)合tagName,className來獲取BMI的值,如下:
先獲得className為"bmi_info"的<p>元素,該元素內(nèi)僅有一個(gè)span,這時(shí)就可以通過tagName獲得該span,代碼如下:
WebElement bmiElement = driver.findElement(By.className("bmi_info")).findElement(By.tagName("span"));
String actualBMI = bmiElement.getText();

6.By.cssSelector

cssSelector這種元素定位方式跟xpath比較類似,但執(zhí)行速度較快,而且各種瀏覽器對它的支持都相當(dāng)?shù)轿唬怨δ芤彩切U強(qiáng)大的。

下面是一些常見的cssSelector的定位方式:

定位id為flrs的div元素,可以寫成:#flrs     注:相當(dāng)于xpath語法的//div[@id=’flrs’]

定位id為flrs下的a元素,可以寫成 #flrs > a  注:相當(dāng)于xpath語法的//div[@id=’flrs’]/a

定位id為flrs下的href屬性值為/forexample/about.html的元素,可以寫成: #flrs > a[href=”/forexample/about.html”]

如果需要指定多個(gè)屬性值時(shí),可以逐一加在后面,如#flrs > input[name=”username”][type=”text”]。


7. By.linkText()
通過超文本鏈接上的文字信息來定位元素,這種方式一般專門用于定位頁面上的超文本鏈接
WebElement linkElement = driver.findElement(By.linkText("新聞"));

8.By.partialLinkText()
該方法時(shí)By.linkText的擴(kuò)展,當(dāng)你不能準(zhǔn)確知道超鏈接上的文本信息或者只想通過一些關(guān)鍵字進(jìn)行匹配時(shí),可以使用這個(gè)方法來通過部分鏈接文字進(jìn)行匹配
WebElement linkElement = driver.findElement(By.partialLinkText("新"));













1. 當(dāng)頁面元素有id屬性時(shí),最好盡量用id來定位。但由于現(xiàn)實(shí)項(xiàng)目中很多程序員其實(shí)寫的代碼并不規(guī)范,會(huì)缺少很多標(biāo)準(zhǔn)屬性,這時(shí)就只有選擇其他定位方法。

2. xpath很強(qiáng)悍,但定位性能不是很好,所以還是盡量少用。如果確實(shí)少數(shù)元素不好定位,可以選擇xpath或cssSelector。

3. 當(dāng)要定位一組元素相同元素時(shí),可以考慮用tagName或name。

4. 當(dāng)有鏈接需要定位時(shí),可以考慮linkText或partialLinkText方式。





 

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多