Selenium是自動化測試工具,主要用于Web應用程序的自動化測試,當然缭黔,也支持所有基于web的管理任務自動化入问。
Selenium 的特點:
? 開源丹锹,免費
? 多瀏覽器支持:FireFox、Chrome芬失、IE楣黍、Opera
? 多平臺支持:linux 、windows棱烂、MAC
? 多語言支持:java租漂、Python、Ruby颊糜、php哩治、C#、JavaScript
? 對 web 頁面有良好的支持
? 簡單(API 簡單)衬鱼、靈活(用開發(fā)語言驅(qū)動)
? 支持分布式測試用例執(zhí)行
這里使用的是selenium2.0业筏,和selenium1.0的區(qū)別是集成了WebDriver
和書中一樣使用python腳本語言進行操作
安裝selenium
pip install Selenium
WebDriver API
-
元素定位:
-
八種元素定位方法:
? id
? name
? class name
? tag name
? link text
? partial link text
? xpath
? css selector 相對應的方法
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
-
方法功能簡單直觀,這里介紹一下xpath:
XPath 是一種在 XML 文檔中定位元素的語言鸟赫。因為 HTML 可以看做 XML 的一種實現(xiàn)蒜胖,所以 selenium用戶可是使用這種強大語言在 web 應用中定位元素。
- 絕對路徑定位:
- XPath 有多種定位策略惯疙,最簡單和直觀的就是寫元素的絕對路徑翠勉。如果仍然把一個元素看做一個人的話,那么現(xiàn)在有一個人霉颠,他沒有任何屬性特征对碌,那么這個人一定會存在于某個地理位置,如:xx 省 xx 市xx 區(qū) xx 路 xx 號蒿偎。那么對于一個元素在一個頁面當中也會有這樣的一個絕對地址朽们。
參考 baidu.html 前端工具所展示的代碼怀读,我們可以用下面的方式來找到百度輸入框和搜索按鈕。
- XPath 有多種定位策略惯疙,最簡單和直觀的就是寫元素的絕對路徑翠勉。如果仍然把一個元素看做一個人的話,那么現(xiàn)在有一個人霉颠,他沒有任何屬性特征对碌,那么這個人一定會存在于某個地理位置,如:xx 省 xx 市xx 區(qū) xx 路 xx 號蒿偎。那么對于一個元素在一個頁面當中也會有這樣的一個絕對地址朽们。
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input"
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")
find_element_by_xpath()方法用于 XPath 語言定位元素骑脱。XPath 的絕對路徑主要用標簽名的層級關系來定位元素的絕對路徑菜枷。最外層為 html 語言,body 文本內(nèi)叁丧,一級一級往下查找啤誊,如果一個層級下有多個相同的標簽名,那么就按上下順序確定是第幾個拥娄,div[2]表示第二個 div 標簽蚊锹。
- 利用元素屬性定位:除了使用絕對路徑的以外,XPath 也可以使用使素的屬性值來定位稚瘾。同樣以百度輸入框和搜索按鈕為例了:
find_element_by_xpath("http://input[@id='kw']")
find_element_by_xpath("http://input[@id='su']")
//表示當前頁面某個目錄下牡昆,input 表示定位元素的標簽名,[@id='kw'] 表示這個元素的 id 屬性值等于kw摊欠。下面通過 name 和 class 屬性值來定位丢烘。
find_element_by_xpath("http://input[@class='s_ipt']")
find_element_by_xpath("http://*[@class='bg s_btn']")
如果不想指定標簽名也可以用星號(*)代替。當然些椒,使用 XPath 不僅僅只局限在 id播瞳、name 和 class 這三個屬性值,元素的任意屬性值都可以使用摊沉,只要它能唯一的標識一個元素狐史。
find_element_by_xpath("http://input[@maxlength='100']")
find_element_by_xpath("http://input[@autocomplete='off']")
find_element_by_xpath("http://input[@type='submit']")
層級與屬性結合:如果一個元素本身并沒有可以唯一標識這個元素的屬性值,我們可以找其上一級元素说墨,如果它的上級有可以唯一標識屬性的值骏全,也可以拿來使用。參考 baidu.html 文本
假如百度輸入框本身沒有可利用的屬性值尼斧,我們可以查找它的上一級屬性姜贡。比如,“小明”剛出生的時候沒有名字棺棵,沒上戶口(沒身份證號)楼咳,那么親朋好友來找“小明”可以先到小明的爸爸,因為他爸爸是有很多屬性特征的烛恤,找到了小明的爸爸母怜,抱在懷里的一定就是小明了。通過 XPath 描述如下:
find_element_by_xpath("http://span[@class='bg s_ipt_wr']/input")
find_element_by_xpath("http://span[@class='bg s_btn_wr']/input")
span[@class='bg s_ipt_wr'] 通過 class 屬性定位到是父元素缚柏,后面/input 也就表示父元素下面標簽名為input 的子元素苹熏。如果父元素沒有可利用的屬性值,那么可以繼續(xù)向上查找“爺爺”元素。
find_element_by_xpath("http://form[@id='form']/span/input")find_element_by_xpath("http://form[@id='form']/span[2]/input")
我們可以通過這種方法一級一級的向上打找轨域,直到找到最外層的<html>標簽袱耽,那么就是一個絕對路徑的寫法了。
- 使用邏輯運算符如果一個屬性不能唯一的區(qū)分一個元素干发,我們還可以使用邏輯運算符連接多個屬性來區(qū)別于其它屬性朱巨。
find_element_by_xpath("http://input[@id='kw' and @class='su']/span/input")
通過 這些方法,就能夠?qū)撁嫔系脑匾灰贿M行定位了