Python webdriver API(一)瀏覽器的操作和簡單對象的定位

一、瀏覽器的操作

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自動化測試實戰》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容