一、什么是框架
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獲取斷言信息
- 什么是斷言
斷言是編程術(shù)語陋守,表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真利赋,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言猩系。
- 獲取斷言信息的操作
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)為什么要進行等待偏瓤?
網(wǎng)速慢
網(wǎng)站內(nèi)容過多
如果不進行等待而直接定位元素,可能會拋出異常
2)selenium中等待的分類
-
顯示等待
顯示等待是根據(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)
-
隱示等待
隱示等待是根據(jù)事件進行等待厅克,等待特定事件
driver.implicitly_wait(n)
15.IDE功能介紹
[圖片上傳失敗...(image-80f956-1646306144796)]
文件:創(chuàng)建、打開和保存測試案例和測試案例集橙依。編輯:復(fù)制证舟、粘貼、刪除窗骑、撤銷和選擇測試案例中的所有命令女责。Options : 用于設(shè)置seleniunm IDE。
用來填寫被測網(wǎng)站的地址慧域。
速度控制:控制案例的運行速度鲤竹。
運行所有:運行一個測試案例集中的所有案例。
運行:運行當(dāng)前選定的測試案例昔榴。
暫停/恢復(fù):暫停和恢復(fù)測試案例執(zhí)行辛藻。
單步:可以運行一個案例中的一行命令。
錄制:點擊之后互订,開始記錄你對瀏覽器的操作吱肌。
案例集列表。
測試腳本仰禽;table標簽:用表格形式展現(xiàn)命令及參數(shù)氮墨。source標簽:用原始方式展現(xiàn),默認是HTML語言格式吐葵,也可以用其他語言展示规揪。
查看腳本運行通過/失敗的個數(shù)。
當(dāng)選中前命令對應(yīng)參數(shù)温峭。
日志/參考/UI元素/Rollup