一、瀏覽器的操作
1、瀏覽器最大化
在統一的瀏覽器大小下運行用例,可以比較容易的跟一些基于圖像比對的工具進行結合,提升測試的靈活性及普遍適用性。比如可以跟sikuli 結合,使用sikuli 操作flash。(待實驗)
import time
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
print("瀏覽器最大化")
browser.maximize_window()? # 將瀏覽器最大化
time.sleep(30)
browser.quit()
2、設置瀏覽器寬和高
在不同的瀏覽器大小下訪問測試站點,對測試頁面截圖并保存,然后觀察或使用圖像比對工具對被測頁面的前端樣式進行評測。比如可以將瀏覽器設置成移動端大小(320x480),然后訪問移動站點,對其樣式進行評估
browser.set_window_size(400,800)
3、控制瀏覽器前進、后退
瀏覽器上有一個后退、前進按鈕,對于瀏覽網頁的人是比較方便的;對于web 自動化測試來說是 ? 一個比較難模擬的操作;webdriver 提供了back()和forward()方法,使實現這個操作變得非常簡單。
# 控制瀏覽器前進、后退
importtime
fromseleniumimportwebdriver
driver = webdriver.Firefox()
# 訪問百度頁面
first_url ="http://www.baidu.com"
print("now access ")
print(first_url)
driver.get(first_url)
time.sleep(2)
# 訪問新聞頁面
second_url ="http://news.baidu.com"
print("now access")
print(second_url)
driver.get(second_url)
time.sleep(2)
# 后退到百度頁面
print("back to ")
print(first_url)
driver.back()
time.sleep(2)
# 前進到新聞頁面
print("forward to")
print(second_url)
driver.forward()
time.sleep(2)
二、簡單對象的定位
對象(元素)的定位和操作是自動化測試的核心,其中操作又建立在定位的基礎上。 ? ? ? ? ? ? ? ? ? ? 一個對象就像是一個人,他會有各種的特征(屬性),如比我們可以通過一個人的身份證號、姓名或者他的住址找到這個人。那么一個元素也有類似的屬性,我們可以通過這種區別于其他元素的唯一屬性來定位這個元素 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
webdriver 提供了一系列的元素定位方法,常用的有以下幾種
id
name
class name
tag name
link text
partial link text
xpath
css selector ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
分別對應python webdriver 中的方法為:
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()
1、id和name定位
id 和name 是我們最常用的定位方式,因為大多數元素都有這兩個屬性,而且在對控件的id 和name命名時一般使其有意義也會取不同的名字。通過這兩個屬性使我們找一個頁面上的屬性變得相當容易。
通過元素中所帶的id 和name 屬性對元素進行定位:
id=”gs_htif0”
find_element_by_id("gs_htif0")
name=”btnK”
find_element_by_name("btnK")
name=”btnI”
find_element_by_name("btnI")
2、tag name 和 class name定位
不是所有的前端開發人員都喜歡為每一個元素添加id 和name 兩個屬性,但除此之外,一個元素不單單只有id 和name,它還有class 屬性;而且每個元素都會有標簽。
通過元素中帶的class 屬性對元素進行定位:
class=”jhp_big”
find_element_by_class_name("jhp_big")
class=”s_ipt”
find_element_by_class_name("s_ipt")
通過tag 標簽名對對元素進行定位:
find_element_by_tag_name("div")
find_element_by_tag_name("form")
find_element_by_tag_name("input")
tag name 定位應該是所有定位方式中最不靠譜的一種了,因為在一個頁面中具有相同tag name 的元素極其容易出現。
3、link text 和 partial text定位
有時候需要操作的元素是一個文字鏈接,那么可以通過link text 或partial link text 進行元素定位。
通過link text 定位元素:
find_element_by_link_text("新聞")
find_element_by_link_text("貼吧")
find_element_by_link_text("一個很長的文字連接")
通partial link text 也可以定位到上面幾個元素:
find_element_by_partial_link_text("新")
find_element_by_partial_link_text("吧")
find_element_by_partial_link_text("一個很長的")
當一個文字連接很長時,可以通過partial_text只取其中的一部分,只要取的部分可以唯一標識元素。一般一個頁
面上不會出現相同的文件鏈接,通過文字鏈接來定位元素也是一種簡單有效的定位方式。
4、Xpath定位
XPath 是一種在XML 文檔中定位元素的語言。因為HTML 可以看做XML 的一種實現,所以selenium 用戶可使用這種強大語言在web 應用中定位元素。
用xpath 來定位最后一個元素。
用絕對路徑定位:
find_element_by_xpath("/html/body/div[2]/form/span/input")
當我們所要定位的元素很難找到合適的方式時,都可以通這種絕對路徑的方式位,缺點是當元素在很多級目錄下時,我們不得不要寫很長的路徑,而且這種方式難以閱讀和維護。
相對路徑定位:
find_element_by_xpath("http://input[@id=’input’]") #通過自身的id 屬性定位
find_element_by_xpath("http://span[@id=’input-container’]/input") #通過上一級目錄的id 屬性定位
find_element_by_xpath("http://div[@id=’hd’]/form/span/input") #通過上三級目錄的id 屬性定位
find_element_by_xpath("http://div[@name=’q’]/form/span/input")#通過上三級目錄的name 屬性定位
通過上面的例子,我們可以看到XPath 的定位方式非常靈活和強大的,而且XPath 可以做布爾邏輯運算,例如://div[@id=’hd’ or @name=’q’]
缺點:
1、性能差,定位元素的性能要比其它大多數方式差;
2、不夠健壯,XPath會隨著頁面元素布局的改變而改變;
3. 兼容性不好,在不同的瀏覽器下對XPath 的實現是不一樣的。
5、CSS定位
這個好難!!!!!!!!!!!!!!看的暈。。。。。
CSS(Cascading Style Sheets)是一種語言,它被用來描述HTML 和XML 文檔的表現。CSS 使用選
擇器來為頁面元素綁定屬性。這些選擇器可以被selenium 用作另外的定位策略。
后期再補吧。。。。。
此文參考《selenium 2 Python自動化測試實戰》