Python webdriver API(一)瀏覽器的操作和簡(jiǎn)單對(duì)象的定位

一、瀏覽器的操作

1、瀏覽器最大化

在統(tǒng)一的瀏覽器大小下運(yùn)行用例,可以比較容易的跟一些基于圖像比對(duì)的工具進(jìn)行結(jié)合,提升測(cè)試的靈活性及普遍適用性。比如可以跟sikuli 結(jié)合,使用sikuli 操作flash。(待實(shí)驗(yàn))

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、設(shè)置瀏覽器寬和高

在不同的瀏覽器大小下訪問測(cè)試站點(diǎn),對(duì)測(cè)試頁面截圖并保存,然后觀察或使用圖像比對(duì)工具對(duì)被測(cè)頁面的前端樣式進(jìn)行評(píng)測(cè)。比如可以將瀏覽器設(shè)置成移動(dòng)端大小(320x480),然后訪問移動(dòng)站點(diǎn),對(duì)其樣式進(jìn)行評(píng)估

browser.set_window_size(400,800)

3、控制瀏覽器前進(jìn)、后退

瀏覽器上有一個(gè)后退、前進(jìn)按鈕,對(duì)于瀏覽網(wǎng)頁的人是比較方便的;對(duì)于web 自動(dòng)化測(cè)試來說是 ? 一個(gè)比較難模擬的操作;webdriver 提供了back()和forward()方法,使實(shí)現(xiàn)這個(gè)操作變得非常簡(jiǎn)單。

# 控制瀏覽器前進(jìn)、后退

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)

# 前進(jìn)到新聞頁面

print("forward to")

print(second_url)

driver.forward()

time.sleep(2)


二、簡(jiǎn)單對(duì)象的定位

對(duì)象(元素)的定位和操作是自動(dòng)化測(cè)試的核心,其中操作又建立在定位的基礎(chǔ)上。 ? ? ? ? ? ? ? ? ? ? 一個(gè)對(duì)象就像是一個(gè)人,他會(huì)有各種的特征(屬性),如比我們可以通過一個(gè)人的身份證號(hào)、姓名或者他的住址找到這個(gè)人。那么一個(gè)元素也有類似的屬性,我們可以通過這種區(qū)別于其他元素的唯一屬性來定位這個(gè)元素 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

webdriver 提供了一系列的元素定位方法,常用的有以下幾種

id

name

class name

tag name

link text

partial link text

xpath

css selector ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

分別對(duì)應(yīng)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 是我們最常用的定位方式,因?yàn)榇蠖鄶?shù)元素都有這兩個(gè)屬性,而且在對(duì)控件的id 和name命名時(shí)一般使其有意義也會(huì)取不同的名字。通過這兩個(gè)屬性使我們找一個(gè)頁面上的屬性變得相當(dāng)容易。

通過元素中所帶的id 和name 屬性對(duì)元素進(jìn)行定位:

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定位

不是所有的前端開發(fā)人員都喜歡為每一個(gè)元素添加id 和name 兩個(gè)屬性,但除此之外,一個(gè)元素不單單只有id 和name,它還有class 屬性;而且每個(gè)元素都會(huì)有標(biāo)簽。

通過元素中帶的class 屬性對(duì)元素進(jìn)行定位:

class=”jhp_big”

find_element_by_class_name("jhp_big")

class=”s_ipt”

find_element_by_class_name("s_ipt")

通過tag 標(biāo)簽名對(duì)對(duì)元素進(jìn)行定位:

find_element_by_tag_name("div")

find_element_by_tag_name("form")

find_element_by_tag_name("input")

tag name 定位應(yīng)該是所有定位方式中最不靠譜的一種了,因?yàn)樵谝粋€(gè)頁面中具有相同tag name 的元素極其容易出現(xiàn)。

3、link text 和 partial text定位

有時(shí)候需要操作的元素是一個(gè)文字鏈接,那么可以通過link text 或partial link text 進(jìn)行元素定位。

通過link text 定位元素:

find_element_by_link_text("新聞")

find_element_by_link_text("貼吧")

find_element_by_link_text("一個(gè)很長的文字連接")

通partial link text 也可以定位到上面幾個(gè)元素:

find_element_by_partial_link_text("新")

find_element_by_partial_link_text("吧")

find_element_by_partial_link_text("一個(gè)很長的")

當(dāng)一個(gè)文字連接很長時(shí),可以通過partial_text只取其中的一部分,只要取的部分可以唯一標(biāo)識(shí)元素。一般一個(gè)頁

面上不會(huì)出現(xiàn)相同的文件鏈接,通過文字鏈接來定位元素也是一種簡(jiǎn)單有效的定位方式。

4、Xpath定位

XPath 是一種在XML 文檔中定位元素的語言。因?yàn)镠TML 可以看做XML 的一種實(shí)現(xiàn),所以selenium 用戶可使用這種強(qiáng)大語言在web 應(yīng)用中定位元素。

用xpath 來定位最后一個(gè)元素。

用絕對(duì)路徑定位:

find_element_by_xpath("/html/body/div[2]/form/span/input")

當(dāng)我們所要定位的元素很難找到合適的方式時(shí),都可以通這種絕對(duì)路徑的方式位,缺點(diǎn)是當(dāng)元素在很多級(jí)目錄下時(shí),我們不得不要寫很長的路徑,而且這種方式難以閱讀和維護(hù)。

相對(duì)路徑定位:

find_element_by_xpath("http://input[@id=’input’]") #通過自身的id 屬性定位

find_element_by_xpath("http://span[@id=’input-container’]/input") #通過上一級(jí)目錄的id 屬性定位

find_element_by_xpath("http://div[@id=’hd’]/form/span/input") #通過上三級(jí)目錄的id 屬性定位

find_element_by_xpath("http://div[@name=’q’]/form/span/input")#通過上三級(jí)目錄的name 屬性定位

通過上面的例子,我們可以看到XPath 的定位方式非常靈活和強(qiáng)大的,而且XPath 可以做布爾邏輯運(yùn)算,例如://div[@id=’hd’ or @name=’q’]

缺點(diǎn):

1、性能差,定位元素的性能要比其它大多數(shù)方式差;

2、不夠健壯,XPath會(huì)隨著頁面元素布局的改變而改變;

3. 兼容性不好,在不同的瀏覽器下對(duì)XPath 的實(shí)現(xiàn)是不一樣的。

5、CSS定位

這個(gè)好難!?。。。。。。。。。。。?!看的暈。。。。。

CSS(Cascading Style Sheets)是一種語言,它被用來描述HTML 和XML 文檔的表現(xiàn)。CSS 使用選

擇器來為頁面元素綁定屬性。這些選擇器可以被selenium 用作另外的定位策略。

后期再補(bǔ)吧。。。。。

此文參考《selenium 2 Python自動(dòng)化測(cè)試實(shí)戰(zhàn)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容