Web自動化測試進(jìn)階

1. 什么是框架

框架(framework)是一個框子 -- 指其約束性丹拯,也是一個架子 -- 指其支撐性,是一個基本概念上的結(jié)構(gòu),用于去解決或者處理復(fù)雜的問題旺上。

框架是整個或部分系統(tǒng)的可重用設(shè)計,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法糖埋;另一種定義認(rèn)為宣吱,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。前者是從應(yīng)用方面而后者是從目的方面給出的定義瞳别。

框架征候,其實(shí)就是某種應(yīng)用的半成品,就是一組組件祟敛,供你選用完成你自己的系統(tǒng)疤坝。簡單說就是使用別人搭好的舞臺,你來做表演馆铁。

2. 為什么使用框架

1)自己從頭實(shí)現(xiàn)太復(fù)雜

2)使用框架能夠更專注于業(yè)務(wù)邏輯跑揉,加快開發(fā)速度

3)框架的使用能夠處理更多細(xì)節(jié)問題

4)使用人數(shù)多,穩(wěn)定性埠巨,擴(kuò)展性好

3. selenium工作原理

原理:webdriver是按照server–client的經(jīng)典設(shè)計模式設(shè)計的历谍。

server端就是remote server,可以是任意的瀏覽器辣垒。當(dāng)我們的腳本啟動瀏覽器后望侈,該瀏覽器就是remote server,它的職責(zé)就是等待client發(fā)送請求并做出相應(yīng)勋桶;client端簡單說來就是我們的測試代碼脱衙,我們測試代碼中的一些行為,比如打開瀏覽器例驹,轉(zhuǎn)跳到特定的url等操作是以http請求的方式發(fā)送給被測試瀏覽器捐韩,也就是remote server;remote server接受請求眠饮,并執(zhí)行相應(yīng)操作奥帘,并在response中返回執(zhí)行狀態(tài)铜邮、返回值等信息仪召。

4. selenium環(huán)境搭建

1)python3.7

2)Firefox35(大于43)

3)selenium2框架

穩(wěn)定版 2.48.0 (pip install selenium==2.48.0)

4)瀏覽器驅(qū)動

注意:Firefox35(大于43)版本不需要下載驅(qū)動器,大于這個版本的需要松蒜,Chrome需要下載驅(qū)動器扔茅,下邊分別演示。

5. selenium對瀏覽器操作

1)庫的導(dǎo)入

fromseleniumimportwebdriver

2)創(chuàng)建瀏覽器對象

driver = webdriver.xxx()

使用dir(driver)查看方法

# 必須為大寫driver = webdriver.Firefox()driver = webdriver.Chrome()

3)瀏覽器尺寸相關(guān)操作

maximize_window()? ? 最大化get_window_size()? ? 獲取瀏覽器尺寸秸苗,打印查看set_window_size()? ? 設(shè)置瀏覽器尺寸召娜,400*400

4)瀏覽器位置相關(guān)操作

get_window_position()? ? 獲取瀏覽器位置set_window_position(x,y)? ? 設(shè)置瀏覽器位置

注意:顯示器以左上角為(0,0),所有的位置操作都是相對于顯示器左上角展開的位移操作,單位是像素惊楼。

5)瀏覽器的關(guān)閉操作

close()關(guān)閉當(dāng)前標(biāo)簽/窗口quit()關(guān)閉所有標(biāo)簽/窗口

6)頁面請求操作

driver.get(url)請求某個url對應(yīng)的響應(yīng)refresh()刷新頁面操作back()回退到之前的頁面forward()前進(jìn)到之后的頁面

6. selenium獲取斷言信息

6.1 什么是斷言

斷言是編程術(shù)語玖瘸,表示為一些布爾表達(dá)式秸讹,程序員相信在程序中的某個特定點(diǎn)該表達(dá)式值為真,可以在任何時候啟用和禁用斷言驗(yàn)證雅倒,因此可以在測試時啟用斷言而在部署時禁用斷言璃诀。

6.2 獲取斷言信息的操作

current_url? ? 獲取當(dāng)前訪問頁面url

title? ? ? 獲取當(dāng)前瀏覽器標(biāo)題

page_source? ? ? 獲取網(wǎng)頁源碼

print(driver.current_url)print(driver.title)print(driver.page_source)

get_screenshot_as_png()? ? 保存圖片

data=driver.get_screenshot_as_png()withopen("a.png","wb")asf:f.write(data)

get_screenshot_as_file(file)? ? 直接保存

driver.get_screenshot_as_file("b.png")

7. selenium八大元素定位

8. 元素的操作

對元素的相關(guān)操作,一般要先獲取到元素蔑匣,再調(diào)用相關(guān)方法

element = driver.find_element_by_xxx(value)

1)點(diǎn)擊和輸入

點(diǎn)擊操作---------->element.click()

清空/輸入操作:

element.clear()---------------------->清空輸入框

element.send_keys(data)-------->輸入數(shù)據(jù)

案例

1.打開百度搜索? ? ? ? 2.搜索關(guān)鍵字 selenium? ? ? ? 3.清空? ? ? ? ? ? 4.搜索python

2)提交操作

element.submit()

9. 多標(biāo)簽之間的切換

場景:有的時候點(diǎn)擊一個鏈接劣欢,新頁面并非由當(dāng)前頁面跳轉(zhuǎn)過去,而是新開一個頁面打開裁良,這種情況下凿将,計算機(jī)需要識別多標(biāo)簽或窗口的情況。

1)獲取所有窗口的句柄

handles = driver.window_handlers

調(diào)用該方法會得到一個列表价脾,在selenium運(yùn)行過程中的每一個窗口都有一個對應(yīng)的值存放在里面牧抵。

2)通過窗口的句柄進(jìn)入的窗口

driver.switch_to_window(handles[n])

driver.switch_to.window(handles[n])

通過窗口句柄激活進(jìn)入某一窗口

10. 多表單切換

在網(wǎng)頁中,表單嵌套是很常見的情況侨把,尤其是在登錄的場景

10.1 什么是多表單

實(shí)際上就是使用iframe/frame灭忠,引用了其他頁面的鏈接,真正的頁面數(shù)據(jù)并沒有出現(xiàn)在當(dāng)前源碼中座硕,但是在瀏覽器中我們看到弛作,簡單理解可以使頁面中開了一個窗口顯示另一個頁面

10.2 處理方法

直接使用id值切換進(jìn)表單

driver.switch_to.frame(value)/driver.switch_to_frame(value)

定位到表單元素,再切換進(jìn)入

el = driver.find_element_by_xxx(value)

driver.switch_to.frame(el)/driver.switch_to_frame(el)

11. 彈出框操作

進(jìn)入到彈出框中

driver.switch_to.alert

接收警告

accept()

解散警告

dismiss()

發(fā)送文本到警告框

send_keys(data)

用法:driver.switch_to.alert.accept()

12.下拉框

fromseleniumimportwebdriverimporttimedriver=webdriver.Firefox()driver.get("http://www.baidu.com")ele=driver.find_element_by_id("s-usersetting-top")ele.click()ele1=driver.find_element_by_xpath(".//*[@id='s-user-setting-menu']/div/a[2]")ele1.click()time.sleep(2)ele2=driver.find_element_by_xpath(".//*[@id='yadv-setting-gpc']/div/div[1]/i[1]")ele2.click()list_ele=driver.find_elements_by_class_name("c-select-item")print(list_ele)list_ele[2].click()# for list_i in list_ele:#? ? print(list_i.text)#? ? if list_i.text =="最近一周":#? ? ? ? list_i.click()

13. 鼠標(biāo)和鍵盤操作

手動測試時鍵盤的操作在selenium頁有實(shí)現(xiàn)华匾,關(guān)于鼠標(biāo)的操作由ActionChains()類來提供映琳,關(guān)于鍵盤的操作由Key()類來提供

1)鼠標(biāo)操作

導(dǎo)入動作鏈類,動作鏈可以儲存鼠標(biāo)的動作蜘拉,并一起執(zhí)行

fromselenium.webdriverimportActionChainsActionChains(driver)

鼠標(biāo)右擊

el=driver.find_element_by_xxx(value)context_click(el)

對el執(zhí)行右擊

執(zhí)行ActionChains中儲存的所有動作

perform()

常用鼠標(biāo)動作:

ActionChains(driver).context_click(ele).perform()點(diǎn)擊鼠標(biāo)右鍵ActionChains(driver). double_click(ele).perform()點(diǎn)擊鼠標(biāo)左鍵ActionChains(driver).move_to_element(el).perform()鼠標(biāo)懸停

2)鍵盤操作

鍵盤操作使用的是Keys類,一般配合send_keys使用

導(dǎo)入

from selenium.webdriver.common.keys import Keys

常用鍵盤操作

send_keys(Keys.BACK_SPACE)刪除鍵(BackSpace)send_keys(Keys.SPACE)空格鍵(Space)send_keys(Keys.TAB)制表鍵(Tab)send_keys(Keys.ESCAPE)回退鍵(Esc)send_keys(Keys.ENTER)回車鍵(Enter)send_keys(Keys.CONTROL,‘a(chǎn)’)全選(Ctrl+A)send_keys(Keys.CONTROL,‘a(chǎn)’)全選(Ctrl+A)send_keys(Keys.CONTROL,‘x’)剪切(Ctrl+X)send_keys(Keys.CONTROL,‘v’)粘貼(Ctrl+V)send_keys(Keys.F1)鍵盤 F1send_keys(Keys.F12)鍵盤 F12

14. 瀏覽器等待

1) 為什么要進(jìn)行等待萨西?

1.網(wǎng)速慢

2.網(wǎng)站內(nèi)容過多

3.如果不進(jìn)行等待而直接定位元素,可能會拋出異常

2) selenium中等待的分類:

顯示等待

顯示等待是根據(jù)條件進(jìn)行等待旭旭,等待條件出現(xiàn)

實(shí)現(xiàn):

fromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECWebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

WebDriverWait類是由WebDirver 提供的等待方法谎脯。在設(shè)置時間內(nèi),默認(rèn)每隔一段時間檢測一次當(dāng)前頁面元素是否存在持寄,如果超過設(shè)置時間檢測不到則拋出異常源梭。

思考:顯示等待與time的區(qū)別?

隱式等待

隱式等待是根據(jù)是件進(jìn)行等待,等待特定時間

driver.implicitly_wait(n)

n的單位為秒,n為最大值稍味,在這個最大值內(nèi)只要該界面上的全部元素都加載完成定就結(jié)束沒有加載出元素就拋出? NosuchException.

注意:優(yōu)先隱式等待废麻,次之顯式等待,最次固定等待

15. 練習(xí)

使用游覽器登錄http://www.baidu.com

搜索淘寶官網(wǎng)

登錄用戶名和密碼

搜索商品(手機(jī)模庐,電腦烛愧,,,怜姿,),給定約束條件(價格,包郵,發(fā)貨地址慎冤。。沧卢。)

將商品添加到購物車

在購物中游覽該商品

根據(jù)自己的喜好進(jìn)行下面的操作

16. 2.IDE功能簡介

文件:創(chuàng)建粪薛、打開和保存測試案例和測試案例集。編輯:復(fù)制搏恤、粘貼违寿、刪除、撤銷和選擇測試案例中的所有命令熟空。Options : 用于設(shè)置seleniunm IDE藤巢。

用來填寫被測網(wǎng)站的地址。

速度控制:控制案例的運(yùn)行速度息罗。

運(yùn)行所有:運(yùn)行一個測試案例集中的所有案例掂咒。

運(yùn)行:運(yùn)行當(dāng)前選定的測試案例。

暫停/恢復(fù):暫停和恢復(fù)測試案例執(zhí)行迈喉。

單步:可以運(yùn)行一個案例中的一行命令绍刮。

錄制:點(diǎn)擊之后,開始記錄你對瀏覽器的操作挨摸。

案例集列表孩革。

測試腳本;table標(biāo)簽:用表格形式展現(xiàn)命令及參數(shù)得运。source標(biāo)簽:用原始方式展現(xiàn)膝蜈,默認(rèn)是HTML語言格式,也可以用其他語言展示熔掺。

查看腳本運(yùn)行通過/失敗的個數(shù)饱搏。

當(dāng)選中前命令對應(yīng)參數(shù)。

日志/參考/UI元素/Rollup

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末置逻,一起剝皮案震驚了整個濱河市推沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌券坞,老刑警劉巖鬓催,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異报慕,居然都是意外死亡深浮,警方通過查閱死者的電腦和手機(jī)压怠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門眠冈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事蜗顽〔伎ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵雇盖,是天一觀的道長忿等。 經(jīng)常有香客問我,道長崔挖,這世上最難降的妖魔是什么贸街? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮狸相,結(jié)果婚禮上薛匪,老公的妹妹穿的比我還像新娘。我一直安慰自己脓鹃,他們只是感情好逸尖,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘸右,像睡著了一般娇跟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上太颤,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天苞俘,我揣著相機(jī)與錄音,去河邊找鬼龄章。 笑死苗胀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓦堵。 我是一名探鬼主播基协,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菇用!你這毒婦竟也來了澜驮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤惋鸥,失蹤者是張志新(化名)和其女友劉穎杂穷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卦绣,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耐量,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滤港。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廊蜒。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡趴拧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出山叮,到底是詐尸還是另有隱情著榴,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布屁倔,位于F島的核電站脑又,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锐借。R本人自食惡果不足惜问麸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钞翔。 院中可真熱鬧口叙,春花似錦、人聲如沸嗅战。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮捍。三九已至疟呐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間东且,已是汗流浹背启具。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留珊泳,地道東北人鲁冯。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像色查,于是被迫代替她去往敵國和親薯演。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一秧了、什么是框架 框架(framework)是一個框子 -- 指其約束性跨扮,也是一個架子 -- 指其支撐性,是一個基本...
    故里里閱讀 207評論 0 1
  • 1. 什么是框架 框架(framework)是一個框子 -- 指其約束性验毡,也是一個架子 -- 指其支撐性衡创,是一個基...
    我向星明許愿閱讀 219評論 0 0
  • 1. 什么是框架 框架(framework)是一個框子 -- 指其約束性,也是一個架子 -- 指其支撐性晶通,是一個基...
    何雅軒閱讀 167評論 0 0
  • 多標(biāo)簽之間的切換 場景:有的時候點(diǎn)擊一個鏈接璃氢,新頁面并非由當(dāng)前頁面跳轉(zhuǎn)過去,而是新開一個頁面打開狮辽,這種情況下一也,計算...
    老友_9e40閱讀 299評論 0 0
  • 1. 什么是框架 框架(framework)是一個框子 -- 指其約束性巢寡,也是一個架子 -- 指其支撐性,是一個基...
    友情提示閱讀 149評論 0 0