python webdriver api(selenium)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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