88
11.6 自動化測試用例的來源
手工編寫測試用例
把原來手工的測試用例,當成自動化測試用例
11.7 自動化測試的優點與缺點
優點:
1、對程序的回歸測試更方便
2、可以運行更多更繁瑣的測試
3、提高測試效率和準確性,節約時間成本
4、可以執行一些手工測試困難或不可能進行的測試(例如,對于大量用戶的測試,可以通過自動化測
試模擬同時有許多用戶,從而達到測試的目的)
5、自動化測試不存在執行過程中的疏忽和錯誤,從而增加軟件信任度
缺點:
1、不能取代手工測試
2、手工測試比自動測試發現的缺陷更多
3、對測試質量的依賴性極大
4、由于自動測試比手動測試更胞弱,所以維護會受到制,從而會制約軟件的開發
5、工具本身無想像力
11.8 你們自動化覆蓋率有多少?
2 年以內,把原來手工做的事情 30%用自動化腳本去替代
2 年以上,實現 40-70%
當時覆蓋的確實也不是很多,差不多 30-40%的樣式吧
11.9 自動化測試環境的搭建是怎樣的?
1、首先要安裝 Python
2、然后安裝編寫代碼工具 pycharm
3、導入 selenium 庫(pip install seleniun 在 pycharm 安裝 selenium3 下載源碼包
4、下載瀏覽器驅動(谷歌.火狐等),把驅動程序發到 Python 根目錄下
11.10 seleniun 的原理是什么?
我們用的 selenium3x 以上的版本,對于 selenium2x 以上的版本原理是這樣的:
Selenium2.0 則是把 selenium1.0 中 selenium RC 替換為了 WebDriver
WebDriver 利用瀏覽器原生的 API,封裝成一套更加面向對象的 SeleniumWeb Driver API
89
直接操作瀏覽器頁面里的元素,甚至操作瀏器本身(截屏,回口大小,啟動,關閉,安裝插件,配置
證書之類的),由于使用的是瀏覽器原生的 API 速度大大提高,而且調用的穩定性交給了瀏覽器廠商
本身,顯然是更加科學,然而帶來的一些副作用就是,不同的瀏器廠商,對 Web 元素的操作和呈現多
少會有一些差異,這就直接導致了 SeleniumWebDriver 要分瀏覽器廠商不同,而提供不同的實現,例
如 Firefox 就有專門的 FirefoxDriver,
Chrome 就有專門的 ChromeDriver 等等
11.11 Selenium2 與 Selenium1 的區別是什么?
Selenium1.0 使用的是 Javascript 注入技術與瀏覽器打交道,需要 Selenium 啟動一個 Server,將
操作 Web 元素的 AP 調用轉化為一段段 Javascript,在 Selenium 內核啟動瀏覽器之后注入這段
Javascript,開發過 Web 應用的人都知道, Javascript 可以獲取并調用頁面的任何元素,自如的進
行操作,由此才實現了 Selenium 的目的:自動化 Web 操作,這種 Javascript 注入技術的缺點是速度
不理想,而且穩定性大大依賴于 Selenium 內核,對 API 翻譯成的 Javascript 質量高低
Selenium2.0 則是把 selenium1.0 中 selenium RC 替換為了 Web Driver
WebDriver 利用瀏覽器原生的 API,封裝成一套更加面向對象的 SeleniumWebDriverAPI
直接操作瀏覽器頁面里的元素,甚至操作瀏覽器本身(截屏,窗口大小,啟動,關閉,安裝播件,配
置證書之類的),由于使用的是瀏覽器原生的 AP,速度大大提高,而且調用的穩定性交給了瀏覽器廠
商本身,顯然是更加科學,然而帶來的一些副作用就是,不同的瀏覽器廠商,對 Web 元素的操作和呈
現多少會有一些差異,這就直接導致了 SeleniumWebDriver 要分瀏覽器廠商不同,而提供不同的實現
例 Firefox 就有專門的 Firefox Driver,
Chrome 就有專門的 ChromeDriver 等等
11.12 seleniun 庫中用過哪些函數?
driver = Web Driver ChromeO
driver.quit() #退出瀏覽器
driver.closed() #關閉窗口
driver.implicitly_wait() #設置隱性等待延遲
driver.current_url #獲取當前的 URL
driver.page_source #獲取當前頁面的源代碼
driver.title #獲取當前頁面的標題
driver.maximize_window() #窗口最大化
driver.get() #加載一個網頁
元素定位的:
90
driver.find_element_by_id()
driver.find_element(By.xxx,’’)
frame 跳轉的:
driver.switch_to.frame()
driver.switch_to.parents_frame()
driver.switch_to.default_content()
窗口跳轉:
driver.switch_to.window()
對話框的處理:
Driver_switch_to.alert
.accepto
.dismiss
.text
.send_keys()
執行 js 腳本的:
driver.execute_script(js)
Element 類:
element.click()
element.submit()
element.send_keys()
element.clear()
element.text
element.get_attribute()
element.is_displayed()
element.find_element_by_xpath()
11.13 定位元素的 8 個方法是什么?
1、通過 id 定位
find_element_by_id()
2、通過 name 定位
find_element_by_name()
3、通過 class name 定位
91
find_element_by_class_name()
4、通過 css 定位
find_element_by_css_selector()
5、通過 link 定位
find_element_by_link_text(‘文本’)沒有空格一般 a 鏈接
6、通過 partial_link 定位
find_element_by_partial_link_text(部分文本)--般有空格 a 鏈接
7、通過 xpath 定位
find_element_by_xpath()
8、通過 tag_name 定位
find_element_by_tag_name()
11.14 js 定位的 5 個方法
js 用到 css 定位
1. driver.execute_script("document.getElenmentByld().value='';")
2. driver.execute_script("document.getElenmentByName().value='';")
3. driver.execute_script("document.getElenmentsByClassName()[0].value='';")
4. driver.execute_script("document.getElenmentsByTagName()[0].value='';")
11.15 jQuery 定位的方法
1. driver.execute_script("$(#id 定位值)vaC")")-輸入值 a()處也可以用 cick()表示點擊
2. driver.execute_script("$(name=name 定位值 va(")輸入值
3. driver.execute_script("$(cas 定位值)va()")輸入值
4. driver.execute_script("$((class=]").val().)
5. driver. execute script ("SCIvalue= ]").val()")
11.16 css 定位的方法?
#通過樣式 #id 樣式, .cass 樣式為多
1. find_element_by_css_selector("#id")
2. find_element_by_css_selector(".classname 定位值")
#通過元素屬性
3. find_element_by_css_selector("[name=name 定位值]")
Find_element_by_css_selector("[class=定位值]")
92
#樣式,屬性結合
find
_element_by_css_selector(div#fanwe_msg_box>table>tbody>tr>td:nth-child(2)>div(@class='d
ialog-content'))
5.父子元素定位
Find_element_by_css_selector(div#fanwe msg box> table>tbody>tr> td:nth-child(2)
>div:nth-child(2))
11.17 xpath 定位的方法? xpath 怎么寫?
Xpath 寫法://*div[@id=’u1’]/a[7] #相對路徑
Xpath 寫法:/html/boy/div[1l/div/div/divl3/a[7 #絕對路徑
#先找父元素,結合屬性
Find_element_by_xpath(//div(@id=u1"/a[@name=tj_login])
11.18 如何去定位下拉框
1、首先要導入一個包: from selenium.webdriver.support.select import Select
2、先給下拉框元素定位定義一個變量:a= diver.find_element_by_css_selector()
3、再通過根據下拉框的 value\visible_text\index 去選擇值
Select(a).select_by_value('')--根據下拉框的 vaue 值去選取值
Select(a).select_by_visible_text('')--根據下拉框的內容去選值
Select(a).select_by_index('')--根據下拉框的下標去選。從 0 開始
11.19 如何去定位內嵌界面
1、定位元素的時候看到 fame 的需要進入內嵌
2、如果有內嵌有 id 或 name 值時直接進入內嵌 driver.switch_to.frame(id 值或 name 值)
3、如果內嵌沒有 id 或 name 值,先定義一個內嵌再進入:
a=driver.find_element_by_class_name(‘’)
driver.switch_to.frame(a)
4、如果有多層內嵌,要一層一層進入
5、記得退出內嵌: driver.switch_to_default_content()
6、driver.switch_to.parent_frame()---進入父級內嵌,調至上一級內嵌
11.20 如何在不同的網頁之間切換
1.首先要獲取多個界面的句柄
93
先通過定位元素幾個界面: driver.find_element_by_id().click 或者其他,獲取一個界面打印一個:
print (diver.window_handles)
然后獲取幾個界面的句柄,定義成一個變量:window_list= diver.window_handles()---以列表形式
存在
2.通過界面句柄的下標進入不同的界面: driver.switch_to_window(window_list[O])
通過界面句柄的下標進入不同的界面,0 表示第一個,下標-1 代表最新的界面
注意:如果進入一個界面里面是內嵌,記得退出內嵌再進入另一個界面
11.21 如何去定位滾動條?滾動條怎么處理?
一般當我們西面上的元素超過一屏后,想操作屏幕下方的元素,是不能直接操作的,會報元素不可見
異常的。這時候需要借助滾動條來拖動屏幕,使被操作的元素顯示在當前的屏幕上,selenium 提供
了一個操作 js 的方法: execute.script(),可以直接執行 js 的腳本,
滾動到底部:
Js='var q=document.getElementByld('id')scrollTop=10000'
Driver.execute_script(js)
滾動到頂部:
js='var q=document.documentElementscrollTop=0'
driver.execute_script(js)
#把滾動條拉到指定位置
雖然用上面的方法可以解決拖動滾動條的位置問題,但是有時候無法確定我需要操作的元素在什么位
置,有可能每次打開的頁面不一樣,元素所在的位置也不一樣,這個時候我們可以先讓頁面直接跳到
元素出現的位置,然后就可以操作了。
Target_element = driver.find_element_by_xpath(‘//*[@id="4"]/h3/a’)
Driver.execute_script("arguments[O].scrollIntoView();",target_element)
11.22 如何去模擬鍵盤與鼠標的操作?
模擬鍵盤:
1、要導入一個包 rom selenium. wedriver common keys import Keys
2、快捷鍵輸入,通過 send_keys()方法可以來模擬鍵盤輸入操作。
Send_keys(Keys.CONTROL,'a’) 全選(Ctrl+A)
Send_keys(Keys.CONTROL,'C') 復制(Ctrl+C)
Send_keys(Keys.CONTROL,’X’) 剪切(Ct+X)
Sen_ keys(Keys.CONTROL,’V’) 粘貼(Ctr+V)
94
Send_keys(Keys.ENTER) 回車鍵
Send_keys(Keys.BACK_SPACE) 刪除鍵
Send_keys(Keys.SPACE) 空格鍵
Send_keys(Keys.TAB) 制表鍵
Send_keys(Keys.ESCAPE) 回退鍵
模擬鼠標:
語法: ActionChains(diver).鼠標操作動作操作的元素. Perform()
鼠標操作動作有:click()單擊、 context_click()右擊、 double_click()雙擊、
Move_to_element()鼠標懸停
1.先導入一個鼠標的包:from selenium.webdriver.common.action_chains import Action Chains
2.然后定位元素: driver.find_element_by_xpath()可以定義為一個變量 aa
3.然后通過語法執行:Action Chains(driver).move_to_element(aa).perform()
11.23、如何去處理上傳 Windows 文件?
1.可直接賦值 send_keys 輸入圖片的地址
其實上傳文件的按鈕就是一個 input 元素,只是它的 type 類型是 file 類型,
我們在處理這種上傳文件的按鈕的時候,可以直接通過普通定位方式去定位它,
再利用 send_keys 方法去輸入圖片的地址就可以了。
Load_file_element=driver.find_element_by_xpath(‘/html/body/div(8l/div(1)/div(2/div/div
[3]/form/div/div/div/inpu’)
2.需要用到一個工具,Autolt 工具
幫助我們識 Windows 控件信息利用 Autolt 生成一個操作 Windows 對話框的 exe 執行文件
然后在 python 代碼中去調用這個可執行文件
這里需要用到 os 模塊,利用 os.system 去執行 windows 的 exe 文件,
把 exe 文件的路徑傳入,并傳入需要上傳的圖片的路徑即可
Drver.fnd_ement_by_xpath(‘html/body/divoiv1/dw2]/div/div3form/dvd/di)cick()#點擊瀏覽
time.sleep(1)
ossystem(C:\Users\\Administrator\\ Desktop\\AA.exe D:\\QQ.png)
11.24 如何去定位時間控件
1、首先 js 去定位元素,去除元素中的屬性:js="$(‘’).removeAttr(要刪除的屬性)
2、然后執行 js 腳本: driver.execute.script(js)
3、然后輸入時間日期
95
driver.find_element_by_xpath(//[@id=start time]").send keys("2018-12-29 10:55:55)#輸入日
期
11.25 彈出框的操作?
彈出框一般有三種:警告消息框,確認對話框,提示消息框
在 selenium 中提供了一個方法 switch_to.alert,跳轉到對話框上面去對 alert 對話框進行操作的函
數/法
Accept() #點擊確定按鈕
Dismiss() #點擊取消按鈕
Text #獲取對話框上的文本信息
Send_keys() #輸入內容
11.26 等待時間有哪三種,區別是什么?
1、sleep 強制等待,要導入 from time import sleep,必須等待那么多秒定位才執行
2、driver.implicitly_wait 隱式等待多秒內只要找到元素就開始執行,超多設定時間就超時
3、Web DriverWaite(driver,20.1).until(lambdax.x.find_element_by_name()).send_keys()-首先
需要導入一個包:fom selenium.webdriver.support.wait import WebDriverWait, driver 1s 鐘找一
次元素,最多找 20 秒,一直發送請求,直到找到元素位置以后,進行下一步操作。
11.27 有沒有修改過頁面元素的屬性,具體怎么修改?
有的,有時候我們會碰到一些元素不可見,這個時候 selenium 就無法對這些元素進行操作了。例如,
下面的情況:頁面主要通過“display.none”來控制整個下拉框不可見。這個時候如果直接操作這個
下拉框,就會提示:我們需要通過 javaScript 修改 display 的值
具體修改方式如下:
js='document.queryselectorAll(‘select’)[1].style.display="block";’
driver.execute_script(js)
11.28 定位不到元素,你碰到過哪些?怎么解決的?
1、像頁面加載延遲的問題,這個需要通過等待延遲的方式來處理。
2、不過有時候,頁面加載完成,但是元素暫時還不可見,導致定位不成功
這個可以選擇使用顯示等待來處理,這里需要用到 WebDriverWait 類來實現
3、還有就是像內嵌網頁的問題,需要使用 driver.switch_to.frame(name/index)這個函數來跳轉到
處理。
4、還有要注意多窗口問題,動態 id 問題等的問題,對于多窗口處理,可以使用
96
driver.switch_to.window()的方式來進行處理,而對于動態 id 的問題,需要注意的是有些 id 跟數
字有關,可能會動態變化,可以使用 xpath 也可以使用 css_select 屬性定位或者樣
式定位,或者可以通過父元素來找元素,或者通過兄弟節點來找對應的元素。等等
5、還有要特別注意滾動條的問題,這里通過調用 js 代碼來實現的,driver.execute_script(js)
6、再這就是有時候會碰到某些元素的是不可見的,比如 display 屬性為 none 這就需要通過 java
Script 修改 display 的值。
js ='document. querySelectorAll("select")[1]. style. display="block";
driver.execute_script(js)
11.29 元素定位,有時候定位得到,有時候定位不到,可能是什么原因,你會怎么處理?
1、可能是網絡問題,導致頁面加載延遲,這個可以做延遲等待,一般選擇隱式等待,在腳本前面加
上 driver.implicitly_wait(20)。
2、也有可能是頁面結構發生變化導致的,這個時候最好選擇通過 xpath 或 css 結合屬性進行或者樣
式定位可能會好點,或者采用 JQuery 定位的方式來進行定位元素
11.30 對于不可見/隱藏的元素,你如何定位,如何處理?
我們可以通過 javaScript 修改 display 的值,來實現
#修改元素的屬性
#我們需要通過 javaScript 修改 display 的值。
js='document.querySelectorAll('select')[1].style.display="block";’
driver.execute_script(js)
11.31 如果元素經常變動你怎么做?
1,少用絕對路徑,多用 css 或者 jQuery 定位
2,單個元素屬性進行封裝
??自動化測試相關教程推薦:
2023最新自動化測試自學教程新手小白26天入門最詳細教程,目前已有300多人通過學習這套教程入職大廠!!_嗶哩嗶哩_bilibili
2023最新合集Python自動化測試開發框架【全棧/實戰/教程】合集精華,學完年薪40W+_嗶哩嗶哩_bilibili
測試開發相關教程推薦
2023全網最牛,字節測試開發大佬現場教學,從零開始教你成為年薪百萬的測試開發工程師_嗶哩嗶哩_bilibili
postman/jmeter/fiddler測試工具類教程推薦
講的最詳細JMeter接口測試/接口自動化測試項目實戰合集教程,學jmeter接口測試一套教程就夠了!!_嗶哩嗶哩_bilibili
2023自學fiddler抓包,請一定要看完【如何1天學會fiddler抓包】的全網最詳細視頻教程!!_嗶哩嗶哩_bilibili
2023全網封神,B站講的最詳細的Postman接口測試實戰教學,小白都能學會_嗶哩嗶哩_bilibili
??總結:
?光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。
如果對你有幫助的話,點個贊收個藏,給作者一個鼓勵。也方便你下次能夠快速查找。
如有不懂還要咨詢下方小卡片,博主也希望和志同道合的測試人員一起學習進步
在適當的年齡,選擇適當的崗位,盡量去發揮好自己的優勢。
我的自動化測試開發之路,一路走來都離不每個階段的計劃,因為自己喜歡規劃和總結,
測試開發視頻教程、學習筆記領取傳送門!!