一.selenium實(shí)現(xiàn)自動(dòng)化的原理
selenium的核心是webdriver
webdriver是按照client-------server設(shè)計(jì)原理設(shè)計(jì)
client簡(jiǎn)單來(lái)說(shuō)就是我們寫的代碼,以http請(qǐng)求的方式發(fā)給server端
server端接收請(qǐng)求,執(zhí)行相應(yīng)的操作,并返回給client端, 這里的server實(shí)際上就是我們下載的對(duì)應(yīng)版本瀏覽器的驅(qū)動(dòng) webdriver(我們常用的webdrivers 有chromedriver,IEdriver,firefoxdriver)
原理小結(jié):
客戶端(我們寫的代碼)通過(guò)調(diào)用selenium包中的一些方法(函數(shù))向javascript寫的webdriver服務(wù)端發(fā)送請(qǐng)求,webdriver來(lái)操作頁(yè)面元素,模擬人手工測(cè)試(點(diǎn)擊,輸入,滑動(dòng),切換窗口)的過(guò)程
所以我們使用時(shí)需要導(dǎo)包,然后需要了解selenium已經(jīng)封裝好的方法,調(diào)用這些方法,讓方法調(diào)用底層代碼寫的方法來(lái)向webdriver發(fā)送請(qǐng)求,讓webdriver去操作頁(yè)面元素,來(lái)代替我們手工操作,將重復(fù)性工作固化,然后我們?cè)偈褂胘enkins出發(fā)定時(shí)任務(wù)去執(zhí)行代碼,即可代替我們重復(fù)性工作
二.常用控件定位
1.定位文本框,密碼框
2.定位按鈕,鏈接

-
獲取元素的文本 (常用來(lái)斷言,用例執(zhí)行完后檢查是否通過(guò))
方法: 先使用web元素定位,再使用.text方法 ,注意 text方法后沒(méi)有()
image.png 獲取元素的屬性 (目前不知道有啥用)
-
切換窗口image.png
-
獲取窗口title (常用來(lái)斷言)image.png
7.窗口最大化image.png 窗口刷新 (基本不用,用的時(shí)候再看)
返回上一步(基本不用,無(wú)實(shí)用性,不用看)
獲取窗口的尺寸
關(guān)閉瀏覽器
(1)關(guān)閉當(dāng)前窗口
driver.close()
(2)關(guān)閉瀏覽器(所有窗口)
driver.quit()-
獲取下拉框中的選項(xiàng) (必用)image.png
鼠標(biāo)懸停 (重點(diǎn)) 【 RF中的mouse over. 鼠標(biāo)懸停后才有下拉框,鼠標(biāo)移走后,顯示的內(nèi)容消失】
引入類: ActionChains()
from selenium.webdriver.common.action_chains import ActionChains
實(shí)例方法: move_to_element()
鼠標(biāo)要移動(dòng)到懸停位置, 首先得定位到整個(gè)位置
mouse =driver.find_element_by_link_text("設(shè)置")
然后使用
ActionChains(driver).move_to_element(mouse).perform()
ActionChains是個(gè)類,ActionChains()構(gòu)造方法,將driver對(duì)象傳入
-
alert彈窗 (警告型彈框,只有確認(rèn)按鈕)
image.png
定位方法
driver.switch_to.alert 注意alert后沒(méi)有()
此時(shí)已經(jīng)切換到了alert彈窗上,此時(shí)整個(gè)alter彈窗是一個(gè)對(duì)象,使用t.text可以返回的彈窗上顯示的文本值并打印
將driver.switch_to.alert對(duì)象賦值給變量t=driver.switch_to.alert
最后調(diào)用彈窗對(duì)象的accept()方法 點(diǎn)擊alert彈窗的確定按鈕,如下

點(diǎn)擊取消按鈕,使用 t.dismiss()方法
確認(rèn)型彈框 (有確定,有取消)
點(diǎn)擊確定按鈕,使用t.accept()方法
點(diǎn)擊取消按鈕,使用 t.dismiss()方法

輸入型彈框
輸入型彈框如下

- frame框架處理 (重點(diǎn),曾經(jīng)面試問(wèn)過(guò))
定位的元素在frame/iframe框里面,定位時(shí)要先進(jìn)入frame框里面,再進(jìn)行元素定位
進(jìn)入frame框的方法 switch_to_frame()
原本在frame/iframe框里面,現(xiàn)在要定位frame框外的元素,需要先退出frame/iframe再進(jìn)行定位
退出frame框的方法switch_to_defalut_content()
注意: 定位的frame中包含frame時(shí),需要多次 switch_to_frame() , 從外一層層進(jìn)入,退出的時(shí)候從里使用switch_to_defalut_content(),退出到最外一層
常見(jiàn)的用id,xpath沒(méi)有定位到, 異常報(bào)元素沒(méi)有被找到, 就看一下上一層有沒(méi)有frame/iframe框
定位frame/iframe框的方法 【frame,iframe理解為一個(gè)東西,叫法不一樣】

-
滾動(dòng)條處理
driver.execute_script(js) #執(zhí)行腳本
滾動(dòng)條是由javascript寫的
方法:execute_script()
移動(dòng)滾動(dòng)條的javascript代碼
js = “window.scrollTo(0,2000)” #向下滾動(dòng)2000px , 0代表頂端
image.png






