其實百度UI自動化測試框架,會出來不少相關的信息,不過就沒有找到純項目的,沒法拿來使用的;因此我最近就寫了一個簡單,不過能夠拿來在真正項目中可使用的測試框架。css
項目的地址:https://github.com/xiaoshitoutester/UItestframeworkhtml
這裏徹底是乾貨,中間涉及到不少知識點,能夠下載到本地而後,修改下項目地址,編寫測試用例就能夠執行了,日誌,報告什麼的都有:git
這裏日誌打印是我新加的,在自動化測試中,常常出現各類奇怪的問題,致使很差定位問題,如今我將webdriver的各類操做都加了日誌,對於我ui測試問題定位頗有幫助,下面的是報告中、log文件中日誌記錄截圖:github
接下來就是關於這個項目的介紹:web
UItestframework項目目前具備如下功能:
一、對webdriver進行了第二次的簡單封裝,使用更加方便 public/common/pyselenium.py
(ps:這個是在蟲師的pyse基礎加了打印日誌功能,參考:https://github.com/defnngj/pyse)
二、能夠對excel表進行數據讀取,完成數據驅動:public/common/datainfo.py
三、具備打印日誌的功能,打印在控制檯和文件中:public/common/log.py,日誌保存在report/log/目錄下
四、讀取配置文件(.ini文件):public/common/readconfig.py
五、具備發郵件的功能:public/common/sendmail.py
六、生成測試報告:html測試報告的路徑:report/testreport/目錄下
七、使用了PageObject模式來編寫測試腳本瀏覽器
整個項目的目錄結構:
├─config 配置文件的目錄
│ │ config.ini 存放配置文件
│ │ globalparam.py 重要的全局參數,如log、report的路徑配置等
│ │ __init__.py
│ │
│
├─data 測試數據
│ ├─formaldata # 正式環境測試數據
│ └─testdata # 測試環境的數據
│ searKey.xlsx
│
├─public 公共的文件庫
│ │ __init__.py
│ │
│ ├─common 封裝的公共方法
│ │ │ basepage.py
│ │ │ datainfo.py
│ │ │ log.py
│ │ │ mytest.py
│ │ │ publicfunction.py
│ │ │ pyselenium.py
│ │ │ pyselenium20161107.py
│ │ │ readconfig.py
│ │ │ sendmail.py
│ │ │ __init__.py
│ │ │
│ │
│ ├─pages 使用pageobject模式編寫測試腳本,存放page的目錄
│ │ │ baiduIndexPage.py
│ │ │ __init__.py
│
├─report 測試報告
│ ├─image 截圖目錄
│ ├─log 日誌目錄
│ │ 2016-11-07.log
│ │
│ └─testreport html測試報告目錄
│ TestResult2016-11-07_16_15_51.html
│
└─testcase 存放測試用例
│ test_baidu.py框架
使用說明:
安裝響應的庫: pip install xlrd,selenium,configparser
一、在config.ini中配置項目路徑:project_path
二、測試數據放在data目錄下面
三、使用pageobject,寫page頁面,在測試用例裏面調用放在public/pages目錄下
四、在testcase目錄下面,編寫測試用例,能夠分模塊編寫,建相應的目錄
五、執行run.py,就能夠執行全部的測試用例
六、在report/log裏面查看日誌
七、在report/testreport裏面查看html測試報告分佈式
關於pyselenium的使用:
該py文件是根據蟲師的pyse改的,加了一個日誌,根據本身的須要加了幾個函數
能夠參考蟲師的pyse,github地址:https://github.com/defnngj/pyse
蟲師的博客園地址:https://github.com/defnngj/pyse函數
導入PySlenium文件
import PySelenium
一、啓動瀏覽器:
啓動谷歌瀏覽器
dr = PySelenium.PySelenium('chrom')
啓動遠程瀏覽器好比使用grid施行分佈式執行
dr = PySelenium.PySelenium(RChrome','127.0.0.1:8080')
二、在地址欄輸入網址:
dr.open('http://www.baidu.com')
三、窗口最大化
dr.max_window()
四、設置瀏覽器的窗口的大小
dr.set_window(800,500)
五、不清除文本框的內容直接輸入值(好比說:進行文件上傳時,上傳文件的路徑,若是清除就會報錯):
dr.type('id->su','小石頭tester')
六、先清除文本框的內容,而後再輸入值(用得不少):
dr.clear_type('name->su','蟲師')
七、直接點擊元素
dr.click('css->#kw')
八、右鍵點擊元素:
dr.right_click('id->kw')
九、將鼠標移動到一個元素上
dr.move_to_element('clas->btn1.btn-green.btn-search')
十、雙擊元素
dr.double_click("id->kw")
十一、將一個元素拖拽到另一個元素上
dr.drag_and_drop('id->kw1','id->kw2')
十二、根據鏈接的text來點擊(<a href="http://www.baidu.com">百度</a>)
dr.click_text('百度')
1三、關閉窗口,driver
dr.quit()
1四、執行js腳本
dr.js('script')
1五、獲取元素的屬性
dr.get_attribute("id->su","href")
1六、獲取元素的文本信息text
dr.get_text('id->su')
1七、返回當前頁面的title
dr.get_title()
1八、返回當前頁面的url
dr.get_url()
20、進入frame
dr.switch_to_frame('id->kw')
2一、退出frame
dr.switch_to_frame_out()
2二、判斷元素是否存在
dr.element_exist('id->kw')
2三、截圖
dr.take_screenshot('file_path')
2四、進入最新的table
dr.into_new_window()
2五、輸入內容而且回車
dr.type_and_enter('id->kw')
2六、使用js來點擊某個元素
dr.js_click('id->kw')
2七、返回原生的webdriver,進行個性化需求
dr.origin_driver測試
接到就到這裏吧,其餘功能之後會逐步添加,但願對項目的測試能帶來更高的效率;也但願給各位看官帶來幫助,也但願能獲得大神指點,讓框架更加完善,健壯。。。