一:什么是selenium夕玩?
selenium是一個應(yīng)用在web端的應(yīng)用程序的測試还栓,selenium測試是直接應(yīng)用在瀏覽器上,可支持的瀏覽器(chrome,Firefox,IE…)
selenium包含了:
selenium IDE(測試的錄制司蔬;)
selenium Gird(測試的并行處理)
selenium webdriver(基于內(nèi)核API完成對象的識別)
selenium的特點(diǎn):
1耿战、由程序控制瀏覽器進(jìn)行操作,而不是手動操作瀏覽器
2落包、程序控制瀏覽器進(jìn)行操作的時候部蛇,速度非常慢,所以要謹(jǐn)慎使用selenium
3咐蝇、使用selenium控制瀏覽器的時候涯鲁,需要下載瀏覽器驅(qū)動
4、selenium為開源 免費(fèi)? 但是更新速度沒有瀏覽器快??
二:selenium的安裝
下載第三方庫
打開dos窗口進(jìn)行第三方庫的下載pip install selenium
配置不同瀏覽器的驅(qū)動程序
首先將下載好的驅(qū)動程序?qū)?yīng)相同的瀏覽器的版本
接著將瀏覽器的驅(qū)動放在python中script的目錄下
最后重啟一下
在此下載驅(qū)動:
chrome瀏覽器的驅(qū)動 :?http://chromedriver.storage.googleapis.com/index.html.
firefox的驅(qū)動:?https://github.com/mozilla/geckodriver/releases.
IE瀏覽器的驅(qū)動:?http://selenium-release.storage.googleapis.com/index.html.
三:selenium的工作原理
selenium 的原理可以理解為 出租車 乘客 與司機(jī)之間的關(guān)系有序,一般來說抹腿,乘客上車之后要告訴司機(jī)他的目的地,司機(jī)知道后旭寿,再由車為載體將乘客拉到目的地幢踏。
在這里,我們將自動化測試腳本------>乘客
瀏覽器的驅(qū)動----->司機(jī)
瀏覽器------>出租車
二:GUI自動化的原理:
1.基于位置的模擬鼠標(biāo)鍵盤的操作
2.基于圖像識別的元素定位
3.基于元素本身的定位和操作
三:webdriver常見的定位方式
id? ?find_element_by_id()
name? ?find_element_by_name()?
class_name? ?find_element_by_class_name()
xpath? ?find_element_by_xpath()
tag_name? ?find_element_by_tag_name()
link_text? ?find_element_by_link_text()
css_selector? ?find_element_by_css_selector()
parital_link_text? ??find_element_by_partial_link_text()
(定位方式的優(yōu)先級:ID许师,具有唯一性的name ,class_name,link_text
xpath;圖像識別或者坐標(biāo))
四:webdirver的基本使用方法
#1.先進(jìn)行導(dǎo)包fromseleniumimportwebdriver#強(qiáng)制等待importtime#2.定義一個driver的變量driver=webdriver.Chrome()#3.打開瀏覽器,拿百度示例driver.get('https://www.baidu.com/')time.sleep(2)#4.進(jìn)行測試print('test success')
以上就是webdriver的簡單使用房蝉,那么我們要是想在搜索框內(nèi)輸入文字讓他進(jìn)行搜索該怎么操作呢?
#1.先進(jìn)行導(dǎo)包fromseleniumimportwebdriver#強(qiáng)制等待importtime#2.定義一個driver的變量driver=webdriver.Chrome()#3.打開瀏覽器,拿百度示例driver.get('https://www.baidu.com/')time.sleep(2)#4.進(jìn)行測試print('test success')#5.找到搜索框所對應(yīng)的idvalue=driver.find_element_by_id('kw')#點(diǎn)擊操作value.click()#填值value.send_keys('python')time.sleep(2)#6.點(diǎn)擊搜索driver.find_element_by_id('su').click()#7.進(jìn)行測試print('ok')
五:面試常問的問題
☆ selenium中如何保證操作元素的成功率微渠?也就是說如何保證我點(diǎn)擊的元素一定是可以點(diǎn)擊的搭幻?
1.使用異常處理的方法:try…except
2.在對元素進(jìn)行操作之前,進(jìn)行點(diǎn)擊逞盆,等待操作
3.給開發(fā)人員建議檀蹋,給頁面元素加上唯一的name/Id
☆ 在做自動化測試的時候,元素定位不上應(yīng)該怎么處理云芦?
安裝驅(qū)動有問題俯逾,導(dǎo)致無法運(yùn)行
不在同一個iframe里面。經(jīng)常會遇到alert舅逸、frame和新的window桌肴,對于這種情況就需要切換frame窗口
(driver.switch_to_default_content())
點(diǎn)擊速度過快,頁面還沒加載出來琉历,這個時候再去找元素肯定是定位失敗坠七,在這個過程中我們需要設(shè)置強(qiáng)制等待水醋。Time.sleep(3)
可以根據(jù)元素的其他屬性來進(jìn)行定位,例如嘗試xpath彪置,CSS這些拄踪;實(shí)在不行也可嘗試根據(jù)相對關(guān)系定位,依據(jù)其附近的父節(jié)點(diǎn)拳魁,子節(jié)點(diǎn)惶桐、兄弟節(jié)點(diǎn)定位
☆ 啟動瀏覽器的時候用的的是webdriver的那個協(xié)議?
http協(xié)議:超文本傳輸協(xié)議
☆ Webdriver的協(xié)議是什么潘懊?
The WebDriver Wire Protocol
☆ 用例在運(yùn)行過程中經(jīng)常會出現(xiàn)不穩(wěn)定的情況姚糊,也就是這次可以通過,下次無法通過了卦尊,如何提高用例的穩(wěn)定性叛拷?
time.sleep( )
driver.implicitly_wait(30)
多用 try 捕捉舌厨,處理異常
☆ Selenium中用什么函數(shù)判斷元素是否存在岂却?
isElementPresent
☆ 你覺得自動化測試最大的缺陷是什么?
不穩(wěn)定
可靠性
不易維護(hù)
成本與收益
轉(zhuǎn)載自https://blog.csdn.net/weixin_46164132/article/details/105037932