點(diǎn)擊這里學(xué)習(xí)更多自動(dòng)化測(cè)試知識(shí) ->>>查看詳情
什么是selenium
簡(jiǎn)單來(lái)說(shuō)selenium是一個(gè)基于web端的UI自動(dòng)化測(cè)試組件浑此,模擬用戶操作去控制瀏覽器自動(dòng)運(yùn)行,支持多語(yǔ)言目前主流就是python滞详,Java凛俱,支持多瀏覽器chrome、ie料饥、firefox等蒲犬。
Selenium工作原理
1.運(yùn)行自動(dòng)化測(cè)試腳本,向web service發(fā)送一個(gè)http請(qǐng)求
2.瀏覽器驅(qū)動(dòng)中的web service 會(huì)根據(jù)這個(gè)請(qǐng)求生成對(duì)應(yīng)的js腳本岸啡,因?yàn)椴煌臑g覽器原叮,不同的瀏覽器要有不同的驅(qū)動(dòng)
3.js腳本驅(qū)動(dòng)瀏覽器,產(chǎn)生各種操作巡蘸,并返回給web service
4.web service將結(jié)果通過(guò)http響應(yīng)的形式返回給客戶端
自動(dòng)化測(cè)試環(huán)境搭建
Python+selenium+chrome百度一下配置安裝奋隶,過(guò)程比較簡(jiǎn)單,注意chrome瀏覽器版本和對(duì)應(yīng)chromedriver.exe驅(qū)動(dòng)版本赡若,版本對(duì)應(yīng)情況可百度
打開(kāi)瀏覽器
導(dǎo)入selenium下的webdriver類达布,調(diào)用打開(kāi)瀏覽器方法,不同的瀏覽器需要不同的驅(qū)動(dòng)否則會(huì)報(bào)錯(cuò)打不開(kāi)
使用無(wú)界面模式打開(kāi)瀏覽器逾冬,add_argument方法中加入--headless參數(shù)黍聂,添加到Chrome方法的options參數(shù)中
打開(kāi)瀏覽器為手機(jī)模式
瀏覽器窗口最大化、設(shè)置窗口尺寸
maximize_window()方法當(dāng)前打開(kāi)窗口最大化
set_window_size(width,height)設(shè)置瀏覽器窗口尺寸
打開(kāi)網(wǎng)頁(yè)
1身腻、調(diào)用webdriver下的get方法傳入網(wǎng)頁(yè)鏈接參數(shù)
同一個(gè)瀏覽器中打開(kāi)兩個(gè)網(wǎng)頁(yè)需運(yùn)行js腳本打開(kāi)網(wǎng)頁(yè)产还,調(diào)用webdriver中execute_script(),傳入js腳本即可嘀趟,默認(rèn)在當(dāng)前第一個(gè)網(wǎng)址頁(yè)面脐区,需切換瀏覽器窗口
切換瀏覽器窗口
Window_handles: 獲取當(dāng)前打開(kāi)瀏覽器中所有窗口句柄,返回一個(gè)列表
Current_window_handle: 獲取當(dāng)前窗口句柄
Switch_to.window(): 切換到那個(gè)窗口句柄她按,傳入窗口句柄字段
查找頁(yè)面元素
1牛隅、webdriver類中包含多種方法去查找頁(yè)面元素,id酌泰、xpath媒佣、name、text陵刹、css默伍、class等,注意定位頁(yè)面元素是路徑必須是頁(yè)面唯一的一個(gè)否則定位不到頁(yè)面元素
頁(yè)面:
使用所有方法定位百度輸入框:一般常用的id、xpath也糊、css定位比較準(zhǔn)確炼蹦,xpath、css可以手動(dòng)書(shū)寫(xiě)路徑表達(dá)式狸剃,其他的name掐隐、class、text钞馁、tag_name只能在頁(yè)面是唯一的時(shí)候使用
關(guān)于find_element 和 find_elements的區(qū)別:前者是查找一個(gè)元素瑟枫,后者是查找一組元素,返回一個(gè)列表
輸入指攒、清除、點(diǎn)擊
找到頁(yè)面輸入框元素路徑僻焚,send_keys()方法傳字符串允悦,輸入字段
clear()方法清除輸入框字段
找到頁(yè)面按鈕元素路徑,掉用click()方法點(diǎn)擊
接受虑啤、取消頁(yè)面警告彈窗
switch_to.alert.accept()切換到彈窗使用accept()方法確認(rèn)隙弛、dismiss()方法取消警告
獲取頁(yè)面文本、網(wǎng)頁(yè)title狞山、元素屬性全闷、頁(yè)面url
查找頁(yè)面文本對(duì)應(yīng)路徑,使用text方法獲取
title方法直接獲取頁(yè)面title字段
獲取元素屬性萍启,get_attribute()方法傳入屬性對(duì)應(yīng)key
直接使用current_url方法獲取當(dāng)前頁(yè)面url返回字符串
切換frame
有時(shí)候頁(yè)面元素在frame框下总珠,需要先切換到iframe中才能執(zhí)行操作,否則直接定位頁(yè)面元素勘纯,會(huì)報(bào)錯(cuò)找不到元素位置
Webdriver中switch_to.frame()方法切換
切換出frame: switch_to.default_content()
截圖功能
get_screenshot_as_file(filename)傳入圖片保存位置
操作select下拉框選項(xiàng)
1局服、操作Select下拉選擇框webdriver中有專用的方法去選中,需導(dǎo)入Select方法
from selenium.webdriver.support.select import Select
定位到select選擇框位置驳遵,Select()傳入元素獲取的元素路徑位置調(diào)用下面的選擇方法去選中所要的值
select_by_index()?:通過(guò)索引定位淫奔,以0開(kāi)始
select_by_value()?:通過(guò)value值定位
select_by_visible_text() :通過(guò)文本值定位
deselect_all():取消所有選項(xiàng)
deselect_by_index()?:取消對(duì)應(yīng)index選項(xiàng)
deselect_by_value():取消對(duì)應(yīng)value選項(xiàng)
deselect_by_visible_text():取消對(duì)應(yīng)文本選項(xiàng)
first_selected_option():返回第一個(gè)選項(xiàng)
all_selected_options():返回所有的選項(xiàng)
如何操作非Select下拉框呢?思路:先點(diǎn)擊展開(kāi)下拉列表堤结,再獲取父元素路徑位置獲取獲取元素下所有標(biāo)簽唆迁,循環(huán)遍歷列表獲取文本進(jìn)行對(duì)比,判斷是否是要選擇項(xiàng)
頁(yè)面例子:
代碼例子選中“最近一周”:
顯示等待竞穷、隱式等待唐责、強(qiáng)制等待
time.sleep():傳入數(shù)值,強(qiáng)制等待幾秒執(zhí)行来庭,導(dǎo)入time文件
implicitly_wait(10):隱式等待妒蔚,是設(shè)置的全局等待,設(shè)置等待時(shí)間,是對(duì)頁(yè)面中的所有元素設(shè)置加載時(shí)間肴盏,如果超出了設(shè)置時(shí)間的則拋出異常
WebDriverWait():顯示等待科盛,是針對(duì)于某個(gè)特定的元素設(shè)置的等待時(shí)間,在設(shè)置時(shí)間內(nèi)菜皂,默認(rèn)每隔一段時(shí)間檢測(cè)一次當(dāng)前頁(yè)面某個(gè)元素是否存在贞绵,如果在規(guī)定的時(shí)間內(nèi)找到了元素,則直接執(zhí)行恍飘,即找到元素就執(zhí)行相關(guān)操作榨崩,如果超過(guò)設(shè)置時(shí)間檢測(cè)不到則拋出異常,默認(rèn)拋出異常為:NoSuchElementException
10s是等待時(shí)間章母,1s是步長(zhǎng)每隔幾秒檢測(cè)一次母蛛,默認(rèn)0.5s