Python webdriver API
1、瀏覽器操作
1)瀏覽器最大化
driver.maximize_window()
2)設(shè)置瀏覽器寬和高
driver.set_window_size(400,800)
3)控制瀏覽器前進(jìn)、后退
driver.forward()
driver.back()
2、簡(jiǎn)單對(duì)象的定位
find_element_by_id()----唯一
find_element_by_name()----唯一
find_element_by_linx_text()----操作對(duì)象是文字超鏈接
find_element_by_partial_link_text()----操作對(duì)象是文字超鏈接
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_xpath()
暫時(shí)可以通過firepath定位xpath路徑,以后再研究
find_element_by_css_selector()
這個(gè)真的不懂,firebug里面可以定位
3、操作測(cè)試對(duì)象
clear()---------------清除內(nèi)容,如默認(rèn)用戶名和密碼
click()---------------模擬鼠標(biāo)點(diǎn)擊操作
send_keys()------向輸入框輸入
submit()------------提交表單
4、WebElement接口常用方法
size--------------------返回元素尺寸
text----------------------獲取元素文本信息
get_attribute(name)-------------獲取元素某個(gè)屬性值
is_displayde-----------------------該元素用戶是否可見
5、鼠標(biāo)事件
ActionChains類操作鼠標(biāo)事件
ActionChains的使用
from selenium.webdriver.common.actionchains import ActionChains
ActionChains的執(zhí)行原理
調(diào)用ActionChains方法的時(shí)候,用戶行為不會(huì)立刻執(zhí)行,而是將所有操作放在一個(gè)隊(duì)列中,當(dāng)執(zhí)行perform()方法時(shí),按照放入隊(duì)列的順序先進(jìn)先出執(zhí)行
ActionChains方法的書寫格式
ActionChains(driver).context_click(操作對(duì)象).perform()
鼠標(biāo)點(diǎn)擊
context_click()------------------鼠標(biāo)右擊
double_click()------------------鼠標(biāo)雙擊(應(yīng)用場(chǎng)景:查看圖片,雙擊選定文字)
click()-----------------------------鼠標(biāo)點(diǎn)擊
click_and_hold()---------------按住鼠標(biāo)左鍵不懂
鼠標(biāo)移動(dòng)
move_to_element(目標(biāo)元素)------------------------移動(dòng)到某個(gè)元素
move_by_offset(xoffset,yoffset)--------------------移動(dòng)到某個(gè)坐標(biāo)
鼠標(biāo)拖曳
drag_and_drop(source,target)------將元素從起點(diǎn)source移動(dòng)到終點(diǎn)target
drag_and_drop_by_offset(source,xoffset,yoffset)-------按照坐標(biāo)移動(dòng)
6、鍵盤事件
Keys類操作鍵盤事件
Keys類的使用
from selenium.webdriver.common.keys import Keys
常用的組合鍵
send_keys(Keys.CONTROL,'a')----------------全選
send_keys(Keys.CONTROL,'c')----------------復(fù)制
send_keys(Keys.CONTROL,'v')----------------粘貼
send_keys(Keys.CONTROL,'x')----------------剪切
常用的非組合鍵
send_keys(Keys.ENTER)--------------------------------回車鍵
send_keys(Keys.BACK_SPACE)----------------------刪除鍵
send_keys(Keys.SPACE)--------------------------------空格鍵
send_keys(Keys.TAB)------------------------------------制表鍵
send_keys(Keys.ESCAPE)------------------------------回退鍵
send_keys(Keys.F5)---------------------------------------刷新鍵
7、獲得頁面URL和title
1)獲得當(dāng)前頁面title,判斷頁面跳轉(zhuǎn)是否符合預(yù)期
title = driver.title
2)獲得當(dāng)前URL,一般用來測(cè)試重定向
url = driver.current_url
8、設(shè)置等待時(shí)間
sleep():設(shè)置固定休眠時(shí)間。Python的time包提供sleep方法
implicitly_wait():webdriver提供的一個(gè)隱性等待的時(shí)間,在一個(gè)時(shí)間段內(nèi)只能的等待,超時(shí)則拋出異常
WebDriverWait():webdriver提供的另一個(gè)方法,在設(shè)置時(shí)間內(nèi),默認(rèn)每隔一段時(shí)間去檢測(cè)頁面元素是否存在,如果超出設(shè)置時(shí)間檢測(cè)不到則拋出異常。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver的驅(qū)動(dòng)程序(Ie, Firefox, Chrome或遠(yuǎn)程)
timeout -最長(zhǎng)超時(shí)時(shí)間,默認(rèn)以秒為單位
poll_frequency -休眠時(shí)間的間隔(步長(zhǎng))時(shí)間,默認(rèn)為0.5秒
ignored_exceptions -超時(shí)后的異常信息,默認(rèn)情況下拋NoSuchElementException異常。
9、定位一組對(duì)象
find_elements返回的是一個(gè)list
定位一組對(duì)象,一般應(yīng)用于下列場(chǎng)景:
批量操作對(duì)象,比如將頁面上的CheckBox都選上
1)find_elements_by_tag_name()
2)find_element_by_css_selector()
10、定位frame中的對(duì)象
針對(duì)frame嵌套的情況,使用switch_to.frame(id/name/xpath)切換到被嵌套的frame中
11、多窗口處理
要想在多個(gè)窗口之間切換,首先要獲得每一個(gè)窗口的唯一標(biāo)識(shí)符號(hào)(句柄)。通過獲得的句柄來區(qū)別分不同的窗口,從而對(duì)不同窗口上的元素進(jìn)行操作
driver.current_window_handle----------------------獲得當(dāng)前窗口的句柄
driver.window_handles--------------------------------獲得所有窗口的句柄
driver.switch_to_handle("句柄")---------------------切換回句柄所屬的窗口
driver.close()---------------------------------------------關(guān)閉當(dāng)前窗口
driver.quit()-----------------------------------------------關(guān)閉所有窗口
12、下拉菜單處理
1)傳統(tǒng)下拉菜單
先定位到下拉菜單,再點(diǎn)擊選項(xiàng)
2)下拉菜單需點(diǎn)擊才能顯示選項(xiàng)
有兩次點(diǎn)擊動(dòng)作,第一次點(diǎn)擊下拉菜單,第二次點(diǎn)擊選項(xiàng)
3)下拉菜單不需點(diǎn)擊,鼠標(biāo)放上去就會(huì)顯示選項(xiàng),則可以使用move_to_element()方法定位
4)針對(duì)下拉菜單標(biāo)簽是select的
導(dǎo)入Select類:from selenium.webdriver.support.select import Select
使用方法:Select(driver.find_element_by_name("xxx")).select_by_index()
選擇列表:
select_by_index(index)---------------------------根據(jù)index屬性定位選項(xiàng),index從0開始
select_by_value(value)---------------------------根據(jù)value屬性定位
select_by_visible_text(text)----------------------根據(jù)選項(xiàng)文本值來定位
first_selected_option()----------------------------選擇第一個(gè)選項(xiàng)
清除列表
deselect_by_index(index)---------------------------根據(jù)index屬性清除選定的選項(xiàng),index從0開始
deselect_by_value(value)---------------------------根據(jù)value屬性
deselect_by_visible_text(text)----------------------根據(jù)選項(xiàng)文本值
deselect_all()--------------------------------------------清除所有選項(xiàng)
13、上傳文件
上傳過程一般是打開一個(gè)系統(tǒng)的window窗口,從窗口選擇文件添加,一般會(huì)卡在如何操作Window窗口。其實(shí),沒那么復(fù)雜,只要定位上傳按鈕,通過send_keys()添加文件路徑就可以了。
上傳控件標(biāo)簽為input
上傳控件標(biāo)簽為非input
可以借助第三方工具:Autolt
14、下載文件
webdriver允許設(shè)置默認(rèn)下載路徑,從而可以跳過下載彈窗提示
1)chrome下載
思路:實(shí)例化一個(gè)option對(duì)象
設(shè)置配置,并加載到option中
啟動(dòng)瀏覽器,點(diǎn)擊下載鏈接
優(yōu)勢(shì):使用谷歌瀏覽器下載,不需要針對(duì)各種文件類型進(jìn)行配置
2)Firefox下載
對(duì)于Firefox,需要我們?cè)O(shè)置其Profile:
browser.download.dir:指定下載路徑
browser.download.folderList:設(shè)置成2表示使用自定義下載路徑;設(shè)置成0表示下載到桌面;設(shè)置成1表示下載到默認(rèn)路徑
browser.download.manager.showWhenStarting:在開始下載時(shí)是否顯示下載管理器
browser.helperApps.neverAsk.saveToDisk:對(duì)所給出文件類型不再彈出框進(jìn)行詢問
Firefox需要針對(duì)每種文件類型進(jìn)行設(shè)置,這里需要我們查詢對(duì)應(yīng)文件的MIME類型,可以用以下鏈接進(jìn)行查詢:MIME參考手冊(cè)
15、調(diào)用js和控制瀏覽器滾動(dòng)條
1)webdriver提供了execute_script(script,*args)方法調(diào)用js
2)控制瀏覽器滾動(dòng)條
應(yīng)用場(chǎng)景:判斷法律文件是否閱讀完,滾動(dòng)條拉倒最下面,表示用戶已看完
要操作的元素不在視覺范圍內(nèi),需要拖動(dòng)滾動(dòng)條
火狐瀏覽器
谷歌瀏覽器
16、處理cookie
driver.get_cookies()-------------------------------獲得所有cookie
driver.get_cookie(name)-------------------------獲得name屬性的cookie
driver.add_cookie(cookie_dic)-----------------添加cookie(cookie格式為字典,)
driver.delete_cookie(name)---------------------刪除特定cookie
driver.delete_all_cookies()----------------------刪除所有cookie
17、驗(yàn)證碼問題
跳過驗(yàn)證碼的方法:
1)去掉驗(yàn)證碼
2)設(shè)置萬能碼
3)通過cookie跳過驗(yàn)證碼登錄
18、webdriver原理
1)WebDriver啟動(dòng)目標(biāo)瀏覽器,并綁定到指定端口。該啟動(dòng)的瀏覽器實(shí)例,做為web driver的remote server。
2)Client端通過CommandExcuter發(fā)送HTTPRequest給remote server的偵聽端口(通信協(xié)議:the?webriver wire protocol)
3)Remote server需要依賴原生的瀏覽器組件(如:IEDriverServer.exe、chromedriver.exe),來轉(zhuǎn)化轉(zhuǎn)化瀏覽器的native調(diào)用。
?QJU???thR0