2.1 為什么選 python
之前的菜鳥系列是基于 java 的,一年沒學其實也忘的差不多了,目前所測的產品
部分也是 python 寫的,而且團隊也在推廣 python ,其實就測試人員來說,python 也
相當受歡迎。易學,易用。翻翻各測試招聘,python 出現的概率也頗高。(個人原因)
最重要的還是 python 簡單易學,應用也相對廣泛;是測試人員學習編程的不二之選。
下面看看 python 穿上 selenium webdriver 是多么的性感:
2.2 第一個腳本
# coding = utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
博客園—蟲師
http://fnng.cnblogs.com
10
browser.quit()
2.3 腳本解析
# coding = utf-8
可加可不加,開發人員喜歡加一下,防止亂碼嘛。
from selenium import webdriver
要想使用 selenium 的 webdriver 里的函數,首先把包導進來嘛
browser = webdriver.Firefox()
我們需要操控哪個瀏覽器呢?Firefox ,當然也可以換成 Ie 或 Chrome 。browser 可以
隨便取,但后面要用它操縱各種函數執行。
browser.find_element_by_id("kw").send_keys("selenium")
一個控件有若干屬性 id 、name、(也可以用其它方式定位),百度輸入框的 id 叫 kw ,
我要在輸入框里輸入 selenium 。多自然語言呀!
browser.find_element_by_id("su").click()
搜索的按鈕的 id 叫 su ,我需要點一下按鈕( click() )。
browser.quit()
退出并關閉窗口的每一個相關的驅動程序,有潔癖用這個。
browser.close()
關閉當前窗口 ,用哪個看你的需求了。
博客園—蟲師
http://fnng.cnblogs.com
11
三、元素的定位
對象的定位應該是自動化測試的核心,要想操作一個對象,首先應該識別這個對象。
一個對象就是一個人一樣,他會有各種的特征(屬性),如比我們可以通過一個人的身
份證號,姓名,或者他住在哪個街道、樓層、門牌找到這個人。
那么一個對象也有類似的屬性,我們可以通過這個屬性找到這對象。
webdriver 提供了一系列的對象定位方法,常用的有以下幾種
?
· id
?
· name
?
· class name
?
· link text
?
· partial link text
?
· tag name
?
· xpath
?
· css selector
我們可以看到,一個百度的輸入框,可以用這么用種方式去定位。
<input
id="kw"
class="s_ipt"
type="text"
maxlength="100"
name="wd"
autocomplete="off">
#coding=utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
#########百度輸入框的定位方式##########
#通過 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")
博客園—蟲師
http://fnng.cnblogs.com
12
#通過 CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通過 xphan 方式定位
browser.find_element_by_xpath("http://input[@id='kw']").send_keys("selenium")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
3.1
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")函數同樣也可以捕獲百度輸入框
3.2
tag name 和 class name 定位
從上面的百度輸入框的屬性信息中,我們看到,不單單只有 id 和 name 兩個屬性,
比如 class 和 tag name(標簽名)
<input
id="kw"
class="s_ipt"
type="text"
maxlength="100"
name="wd"
autocomplete="off">
<input>
博客園—蟲師
http://fnng.cnblogs.com
13
input 就是一個標簽的名字
3.4
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("http://input[@id='kw']").send_keys("selenium")
#input 標簽下 id =kw 的元素
xpath:idRelative (id 相關性)
driver.find_element_by_xpath("http://div[@id='fm']/form/span/input").send_keys("s
elenium")
#在/form/span/input 層級標簽下有個 div 標簽的 id=fm 的元素
driver.find_element_by_xpath("http://tr[@id='check']/td[2]").click()
# id 為'check' 的 tr ,定位它里面的第2個 td
xpath:position (位置)
driver.find_element_by_xpath("http://input").send_keys("selenium")
driver.find_element_by_xpath("http://tr[7]/td[2]").click()
#第7個 tr 里面的第2個 td
xpath: href (水平參考)
driver.find_element_by_xpath("http://a[contains(text(),'網頁')]").click()
#在 a 標簽下有個文本(text)包含(contains)'網頁' 的元素
xpath:link
driver.find_element_by_xpath("http://a[@).click()
#有個叫 a 的標簽,他有個鏈接 href='http://www.baidu.com/ 的元素
博客園—蟲師
http://fnng.cnblogs.com
15
3.5
link 定位
有時候不是一個輸入框也不是一個按鈕,而是一個文字鏈接,我們可以通過 link
#coding=utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_link_text("貼 吧").click()
browser.quit()
一般一個頁面上不會出現相同的文件鏈接,通過文字鏈接來定位也是一種簡單有效
的定位方式。
3.6
Partial link text 定位
通過部分鏈接定位,這個有時候也會用到,我還沒有想到很好的用處。拿上面的例
子,我可以只用鏈接的一部分文字進行匹配:
browser.find_element_by_partial_link_text("貼").click()
#通過 find_element_by_partial_link_text() 函數,我只用了“貼”字,腳本一樣找到了"貼 吧
" 的鏈接