web自動化進階

一、什么是框架

1.框架

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

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

框架言沐,其實就是某種應(yīng)用的半成品,就是一組組件酣栈,供你選用完成你自己的系統(tǒng)险胰。簡單說就是使用別人搭好的舞臺,你來做表演矿筝。

2.為什么使用框架起便?

1)自己從頭實現(xiàn)太復(fù)雜。
2)使用框架能夠更專注于業(yè)務(wù)邏輯窖维,加速開發(fā)速度榆综。
3)框架的使用能夠處理更多細節(jié)問題。
4)使用人數(shù)多铸史,穩(wěn)定性鼻疮,擴展性好</pre>

3.selenium工作原理

1)運行腳本
2)啟動驅(qū)動器
3)驅(qū)動器打開瀏覽器
4)訪問網(wǎng)頁</pre>

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ū)動</pre>

5.selenium對瀏覽器操作

1)庫的導(dǎo)入
from selenium import webdriver</pre>

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

driver = webdriver.xxx():必須大寫且加括號

使用dir(driver)查看方法

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

maximize_window() # 最大化
get_window_size() # 獲取瀏覽器尺寸,打印查看
set_window_size() # 設(shè)置瀏覽器尺寸琳轿,400*400</pre>

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

get_window_position() # 獲取瀏覽器位置
set_window_position(x,y) # 設(shè)置瀏覽器位置</pre>

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

close() # 關(guān)閉當(dāng)前標簽/窗口
quit() # 關(guān)閉所有標簽/窗口</pre>

6)頁面請求操作

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

6.selenium獲取斷言信息
  1. 什么是斷言

斷言是編程術(shù)語陋守,表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真利赋,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言猩系。

  1. 獲取斷言信息的操作
  • current_url 獲取當(dāng)前訪問頁面url

  • title獲取當(dāng)前瀏覽器標題

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

  • get_screenshot_as_png() 保存圖片

  • get_screenshot_as_file(file) 直接保存

7.selenium八大元素

八大元素定位

第一種 id

kw = driver.find_element_by_id('kw')
kw.send_keys('坦克')
kw = driver.find_element(By.ID,'kw')

第二種 標簽名字

kw = driver.find_element_by_name('wd')
kw = driver.find_element(By.NAME,'wd')

第三種 class

kw = driver.find_element_by_class_name('s_ipt')
kw = driver.find_element(By.CLASS_NAME,'s_ipt')

第四種 Xpath

kw = driver.find_element_by_xpath(".//[@id='kw']")
kw = driver.find_element(By.XPATH,".//
[@id='kw']")

第五種 css class

kw = driver.find_element_by_css_selector('#kw')
kw = driver.find_element(By.CSS_SELECTOR,'#kw')

第六種 test

kw = driver.find_element_by_link_text('新聞')
kw = driver.find_element(By.LINK_TEXT,'新聞')

第七種 類似于模糊查詢

kw = driver.find_element_by_partial_link_text('新')
kw = driver.find_element(By.PARTIAL_LINK_TEXT,'新')

第八種:標簽名定位媚送,必須得保證一個這種名字的標簽,使用下面這個搜索

kw = driver.find_element_by_tag_name('input')</pre>

8.元素的操作

對元素的相關(guān)操作寇甸,一般要先獲取到元素塘偎,在調(diào)用相關(guān)方法

element = driver.find_element_by_xxx(value)

1)點擊和輸入

點擊操作→element.click()

清空疗涉、輸入操作:

element.clear()→清空輸入框 element.send_keys(data)→輸入數(shù)據(jù)

2)提交操作

element.submit()

9.多標簽之間的切換

1)獲取所有窗口的句柄

handles = driver.window_handlers

2)通過窗口的句柄進入窗口

driver.switch_to_window(handles[n])→方法過時了

driver.switch_to.window(handles[n])

10.多表單切換

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

1)什么是多表單

實際上就是使用iframe/frame咱扣,引用了其他頁面的鏈接真正的頁面數(shù)據(jù)并沒有出現(xiàn)在當(dāng)前源代碼中。

2)處理方法

直接使用id值切換進表單

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

定位到表單元素涵防,在切換進入

el = driver.find_element_by_xxx(value) driver.switch_to.frame(el)/driver.switch_to_frame(el)

11.彈出框操作

1)進入到彈出框中:driver.switch_to.alert

2)接收警告:accept()

3)解散警告:dismiss()

4)發(fā)送文本到警告框:send_keys(data) 用法:driver.switch_to.alert.accept()

12.下拉框
13.鼠標和鍵盤操作

1)鼠標操作

  • 導(dǎo)入動作鏈類闹伪,動作鏈可以存儲鼠標的動作,并一起執(zhí)行

from selenium.webdriver import ActionChains
ActionChains(driver)

  • 鼠標右擊

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

對el執(zhí)行右擊

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

perform()

  • 常用鼠標動作

ActionChains(driver).context_click(ele).perform() # 點擊鼠標右鍵
ActionChains(driver). double_click(ele).perform() # 點擊鼠標左鍵
ActionChains(driver).move_to_element(el).perform() # 鼠標懸停

2)鍵盤操作

鍵盤操作使用的是keys類壮池,一般配合snd_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) # 鍵盤 F1
send_keys(Keys.F12) # 鍵盤 F12

14.瀏覽器等待

1)為什么要進行等待偏瓤?

  1. 網(wǎng)速慢

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

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

2)selenium中等待的分類

  1. 顯示等待

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

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

  1. 隱示等待

    隱示等待是根據(jù)事件進行等待厅克,等待特定事件

driver.implicitly_wait(n)

15.IDE功能介紹

[圖片上傳失敗...(image-80f956-1646306144796)]

  1. 文件:創(chuàng)建、打開和保存測試案例和測試案例集橙依。編輯:復(fù)制证舟、粘貼、刪除窗骑、撤銷和選擇測試案例中的所有命令女责。Options : 用于設(shè)置seleniunm IDE。

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

  3. 速度控制:控制案例的運行速度鲤竹。

  4. 運行所有:運行一個測試案例集中的所有案例。

  5. 運行:運行當(dāng)前選定的測試案例昔榴。

  6. 暫停/恢復(fù):暫停和恢復(fù)測試案例執(zhí)行辛藻。

  7. 單步:可以運行一個案例中的一行命令。

  8. 錄制:點擊之后互订,開始記錄你對瀏覽器的操作吱肌。

  9. 案例集列表。

  10. 測試腳本仰禽;table標簽:用表格形式展現(xiàn)命令及參數(shù)氮墨。source標簽:用原始方式展現(xiàn),默認是HTML語言格式吐葵,也可以用其他語言展示规揪。

  11. 查看腳本運行通過/失敗的個數(shù)。

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

  13. 日志/參考/UI元素/Rollup

16.代碼案例
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猛铅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凤藏,更是在濱河造成了極大的恐慌奸忽,老刑警劉巖堕伪,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異栗菜,居然都是意外死亡欠雌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門疙筹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來富俄,“玉大人,你說我怎么就攤上這事腌歉⊥芾遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵翘盖,是天一觀的道長桂塞。 經(jīng)常有香客問我,道長馍驯,這世上最難降的妖魔是什么阁危? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮汰瘫,結(jié)果婚禮上狂打,老公的妹妹穿的比我還像新娘。我一直安慰自己混弥,他們只是感情好趴乡,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝗拿,像睡著了一般晾捏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哀托,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天惦辛,我揣著相機與錄音,去河邊找鬼仓手。 笑死胖齐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗽冒。 我是一名探鬼主播呀伙,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼添坊!你這毒婦竟也來了区匠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驰弄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體速客,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡戚篙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了溺职。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岔擂。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浪耘,靈堂內(nèi)的尸體忽然破棺而出乱灵,到底是詐尸還是另有隱情,我是刑警寧澤七冲,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布痛倚,位于F島的核電站,受9級特大地震影響澜躺,放射性物質(zhì)發(fā)生泄漏蝉稳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一掘鄙、第九天 我趴在偏房一處隱蔽的房頂上張望耘戚。 院中可真熱鬧,春花似錦操漠、人聲如沸收津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撞秋。三九已至,卻和暖如春吧黄,著一層夾襖步出監(jiān)牢的瞬間部服,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工拗慨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留廓八,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓赵抢,卻偏偏與公主長得像剧蹂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烦却,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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