http://www.testclass.net/ 測試教程網,專業的selenium 學習網站。 javascript
本節重點:css
-----自動化測試的核心html
對象的定位應該是自動化測試的核心,要想操做一個對象,首先應該識別這個對象。一個對象就是一我的同樣,他會有各類的特徵(屬性),如比咱們能夠經過一我的的身份證號,姓名,或者他住在哪一個街道、樓層、門牌找到這我的。前端
那麼一個對象也有相似的屬性,咱們能夠經過這個屬性找到這對象。java
定位對象的目的通常有下面幾種css3
· 操做對象web
· 得到對象的屬性,如得到測試對象的class屬性,name屬性等等函數
· 得到對象的text工具
· 得到對象的數量學習
webdriver提供了一系列的對象定位方法,經常使用的有如下幾種
咱們能夠看到,一個百度的輸入框,能夠用這麼用種方式去定位。
#coding=utf-8
from selenium import webdriver import time browser = webdriver.Firefox() browser.get("http://www.baidu.com") time.sleep(2) #########百度輸入框的定位方式##########
#經過id方式定位
browser.find_element_by_id("kw").send_keys("selenium") #經過name方式定位
browser.find_element_by_name("wd").send_keys("selenium") #經過tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium") #經過class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium") #經過CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium") #經過xphan方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium") ############################################
browser.find_element_by_id("su").click() time.sleep(3) browser.quit()
OK~!經過上面一個例子,就幫咱們展現了幾種定位方式,下面來介紹每種定位方式:
id 和 name
id 和 name 是咱們最最經常使用的定位方式,由於大多數控件都有這兩個屬性,並且在對控件的id 和name命名時通常使其有意義也會取不一樣的名字。經過這兩個屬性使咱們找一個頁面上的屬性變得至關容易
咱們經過前端工具,找到了百度輸入框的屬性信息,以下:
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
id=」kw」
經過find_element_by_id("kw") 函數就是捕獲到百度輸入框
name=」wd」
經過find_element_by_name("wd")函數一樣也能夠捕獲百度輸入框
tag name 和class name
從上面的百度輸入框的屬性信息中,咱們看到,不僅僅只有id 和 name兩個屬性,好比class 和 tag name(標籤名)
<input>
input 就是一個標籤的名字,能夠經過find_element_by_tag_name("input") 函數來定位。
class="s_ipt"
經過find_element_by_class_name("s_ipt")函數捕獲百度輸入框。
可是,碰下面的一組控件屬性,咱們就哭了。
<th width="95"></th> <th width="">文件名</th> <th class="c1">建立時間</th> <th class="c1">狀態</th> <th class="c1">文件大小</th> <th class="c1">時長</th>
下面的css 和 XPath就沒有上面的那麼直觀,若是不懂前端的話可能不太好理解
CSS定位
CSS(Cascading Style Sheets)是一種語言,它被用來描述HTML和XML文檔的表現。CSS使用選擇器來爲頁面元素綁定屬性。這些選擇器能夠被selenium用做另外的定位策略。
CSS的比較靈活能夠選擇控件的任意屬性,上面的例子中:
find_element_by_css_selector("#kw")
經過find_element_by_css_selector( )函數,選擇取百度輸入框的id屬性來定義
也能夠取name屬性
<a href="http://news.baidu.com" name="tj_news">新 聞</a>
driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()
能夠取title屬性
<a onclick="queryTab(this);" mon="col=502&pn=0" title="web" href="http://www.baidu.com/">網頁</a>
driver.find_element_by_css_selector("a[title=\"web\"]").click()
也能夠是取..:
<a class="RecycleBin xz" href="javascript:void(0);">
driver.find_element_by_css_selector("a.RecycleBin").click()
雖然我也沒所有理解CSS的定位,可是看上去應該是一種很是靈活和牛X 的定位方式
擴展閱讀:
http://www.w3.org/TR/css3-selectors/
http://www.w3school.com.cn/css/css_positioning.asp
XPath
什麼是XPath:http://www.w3.org/TR/xpath/
XPath基礎教程:http://www.w3schools.com/xpath/default.asp
selenium中被誤解的XPath : http://magustest.com/blog/category/webdriver/
XPath是一種在XML文檔中定位元素的語言。由於HTML能夠看作XML的一種實現,因此selenium用戶但是使用這種強大語言在web應用中定位元素。
XPath擴展了上面id和name定位方式,提供了不少種可能性,好比定位頁面上的第三個多選框。
xpath:attributer (屬性) driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium") #input標籤下id =kw的元素 xpath:idRelative (id相關性) driver.find_element_by_xpath("//div[@id='fm']/form/span/input").send_keys("selenium") #在/form/span/input 層級標籤下有個div標籤的id=fm的元素 driver.find_element_by_xpath("//tr[@id='check']/td[2]").click() # id爲'check' 的tr ,定閃他裏面的第2個td xpath:position (位置) driver.find_element_by_xpath("//input").send_keys("selenium") driver.find_element_by_xpath("//tr[7]/td[2]").click() #第7個tr 裏面的第2個td xpath: href (水平參考) driver.find_element_by_xpath("//a[contains(text(),'網頁')]").click() #在a標籤下有個文本(text)包含(contains)'網頁' 的元素 xpath:link driver.find_element_by_xpath("//a[@href='http://www.baidu.com/']").click() #有個叫a的標籤,他有個連接href='http://www.baidu.com/ 的元素
link 定位
有時候不是一個輸入框也不是一個按鈕,而是一個文字連接,咱們能夠經過link
#coding=utf-8 from selenium import webdriver import time browser = webdriver.Firefox() browser.get("http://www.baidu.com") time.sleep(2) browser.find_element_by_link_text("貼 吧").click() time.sleep(2) browser.quit()
通常一個那頁面上不會出現相同的文件連接,經過文字連接來定位也是一種簡單有效的定位方式。
Partial Link Text 定位
經過部分連接定位,這個有時候也會用到,我尚未想到很好的用處。拿上面的例子,我能夠只用連接的一部分文字進行匹配:
browser.find_element_by_partial_link_text("貼").click() #經過find_element_by_partial_link_text() 函數,我只用了「貼」字,腳本同樣找到了"貼 吧" 的連接
--------------------------
學習更多selenium 內容: