Selenium自动化框架理论总结
一、自動化原理
1、結構圖:
自動化程序(selenium客戶端庫) <-->? 瀏覽器驅動器? ?<-->? 瀏覽器
其中自動化程序通過http協議與瀏覽器驅動器進行交互
2、安裝:
(1)selenium客戶端庫:pip install selenium
(2)瀏覽器驅動器:需要額外下載,實際上就是一個exe文件,不需要其他操作
3、基本代碼
from selenium import webdriver #根據驅動器創建一個webdriver對象,并啟動瀏覽器 wd=webdriver.Chorme('瀏覽器的路徑/驅動器文件')# Chorme Firefox Ie Safari Edge #利用wd對元素進行定位操作、對窗口等進行操作 wd.get('url') #請求訪問對應網頁 wd.quit() #關閉瀏覽器窗口二、元素定位的幾種常用方法
下面代碼中的wd可以替換為WebElement實例,查找范圍由原來的整個頁面更改為對應元素的內部;比較特殊的xpath,當使用webelement時,參數前一定要加上.開頭
1、id
elements=wd.find_elements_by_id('id值') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_id('值') #返回第一個符合條件的元素;如無,拋出異常2、class
elements=wd.find_elements_by_class_name('class值') #以列表的形式返回所有符合元素;若無,空列表 elements=wd.find_element_by_class_name('class值') #返回第一個符合條件的元素;如無,拋出異常3、name
elements=wd.find_elements_by_name('值') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_name('值') #返回第一個符合條件的元素;如無,拋出異常4、tag
elements=wd.find_elements_by_tag_name('值') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_tag_name('值') #返回第一個符合條件的元素;如無,拋出異常5、css選擇器
elements=wd.find_elements_by_css_selector('參數') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_css_selector('參數') #返回第一個符合條件的元素;如無,拋出異常(1)按照tag? ? 參數:標簽名
(2)按照屬性
- id? ?參數:#id值
- class? ?參數:.class值
- 其他屬性? 參數: [屬性名=’屬性值‘] ,其中屬性值的引號可省略
補充:屬性值部分可以進行三總模糊查詢,分別如下所示:
? ? ? ? ? *= (包含)? ^= (以...開頭)? $=? (以...結尾)
(3)按照次序選擇子節點?? ? ? ?參數為? ? :nth-child(m) ,?本身父元素的第m個子節點
參數為? ? ?:nth-last-child(m),?本身父節點的倒數第m個子節點?? ? ? ??
(4)按照類型選擇子節點? ? ? ? 參數為? ? :nth-of-type(m),本身父元素的第m個類型的子節點
參數為? ? ?:nth-last-of-type(m),?本身父節點的倒數第m個子節點?? ??
補充:(3)(4)中的函數可以使用兩個特別的值:odd(奇數)和even(偶數)
(5)兄弟節點的選擇? ? ?
- 相鄰兄弟? ? 類型 + 類型
- 后續所以兄弟,包括表兄弟? ? ?類型~類型
(6)子代和后代的選擇
- 子代? ?>
- 后代? ? 空格
注意:css選擇器還可以組選擇,只需要用 逗號 隔開就好;也可以聯合使用,只需要沒有空格的連著寫即可
6、Xpath選擇器
elements=wd.find_elements_by_xpath('參數') #以列表的形式返回所有符合元素;若無,空列表 element=wd.find_element_by_xpath('參數') #返回第一個符合條件的元素;如無,拋出異常? ? 絕對路徑:以 / 開頭,將每層依次寫下,用 / 隔開,類似子代
? ? 相對路徑:以? // 間隔 ,類似后代
? ? 不管是絕對還是相對路徑,每一層都要有標簽或者通配符*
(1)根據屬性選擇(id class與其他屬性一視同仁)
格式?:? [@屬性名="屬性值"],其中屬性值的引號不可省,但是可單可雙,要在標簽或*后使用
也可以進行模糊查詢,具體有三種形式:
- [contain(@屬性名,'值')]? 包含
- [starts-with(@屬性名,'值')]? 以...開頭
- [ends-with(@屬性名,'值')]? 以...結尾,但是這屬于xpath2.0語法,目前瀏覽器不支持
(2)根據次序選擇
- 標簽名[n]或者*[n]? ? 分別表示選擇標簽名的第n個或者第n個
- 標簽名[last()-n]或者*[last()-n]? ?分別表示標簽名的倒數第n+1個或者倒數第n+1個
- 標簽名[position()<n]或者*[position()<n]? ?其中<可以換成其他的比較符號,last()也可應用于n
(3)父節點? ? ?/..
? ? ? ? 后續親兄弟節點? ?/following-sibling::*或tag名
? ? ? ? 前面親兄弟節點? ?/preceding-sibling::*或tag名
注:也可以進行組選擇,使用 | 連接
7、專門用于定位超鏈接的,也就是對應html頁面中的<a>標簽,括號里傳的值就是a標簽中的超鏈接文字,兩者的區別在于一個是完整的超鏈接文字,一個是可以只寫部分超鏈接文字。
link復數定位find_element(s)_by_link_text()
partial_link復數定位find_element(s)_by_partial_link_text()
三、元素操作(點擊、輸入、獲取以及鼠標和鍵盤操作等)
定位元素的函數 find_elements_by_xxx()返回一個WebElement對象element,然后就可以進行元素操作,常見的如下:
click(),send_keys(' ') ,text, get_attribute('屬性名') [innerHTML? outerHTML 是特殊的參數]
補充 : text屬性如果不顯示或只顯示部分內容,可用get_attribute('innerHTML')或者('textContent')
輸入框輸入的內容不可以通過text屬性獲得,要用get_attribute('value')
四、實戰技巧
1、radio? checkbox? select三種選擇框元素
(1)radio和checkbox都對應input標簽,type類型不同,分別對象單選和多選,一組的采用同一個name值
? ? ? ? select對應的select標簽,選項放在option標簽內,默認為單選,在select中添加屬性multiple改為多選
(2)radio? ?click() 選中 ;checkbox? ?click() 選中和未選中狀態切換
(3)select有專門的類進行處理Select(select元素)實例化
(de)select_by_value()? ? (de)select_by_index()? (de)select_by_visible_text()? ? ?deselect_all()
2、alert? confirm? prompt三種彈出框 alert=wd.switch_to.alert
(1)alert:? ?alert.text? ? ;? ?alert.accept()
(2)confirm:? alert.text? ?;? ?alert.accept();? ?alert.dismiss()
(3)prompt :? ?alert.send_keys()? ;?? alert.text? ?;? ?alert.accept();? ?alert.dismiss()
3、frame切換
(1)frame或iframe標簽利用src屬性指定一個html文件,使其嵌入到當前HTML文件中;但是由于wd的訪問范圍不包括嵌入頁面的,所以如果需要訪問嵌入文件的元素,需要切換frame
(2)wd.switch_to.frame(' ')? 參數為frame的特征或者對應的webelement元素
? ? ? ? ?wd.switch_to.default_content()? 返回到原來的frame
4、窗口切換
wd.title
wd.switch_to.window(handle), 其中handle要通過wd.window_handles結合一些條件查找到的
mainWindow=wd.current_window_handle
5、界面等待管理
某些元素內容不會立即出現,wd捕捉不到。selenium提供了一個方案:周期性(0.5s)重新尋找元素,直到元素找到或者超出最大等待時間拋出異常;
wd.implicitly(n):最大等待時間為n毫秒
要注意的是,周期性尋找的前提是找不到,如果找到了雖然是不正確的,那這個是不會處理這個情況的(一般只能sleep下)
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Selenium自动化框架理论总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZEMAX | 在OpticStudio
- 下一篇: 杨氏双缝干涉