Time will tell(時間會證明一切).
前言
最近博主一直扎根于把碎片化的知識熔煉為整套知識體系的程序中,Python語言、selenium、unittest框架、HTMLTestRunner框架這些都有所了解,也寫了很多腳本去做專案的功能測驗,但還是感覺到有些零零散散,串不起來,
這幾天在各大博客論壇一直逛該,并且在嘗試著自己搭一個自動化測驗框架,到了今天,終于初見成效,
程序中不斷地修修改改,這篇文章主要撿點核心的部分來說,談談自己的搭建思路,個人淺見,歡迎提議,

正題
大概地講下每個模塊下的類實作的一些方法:
1、config
||-config.yml 組態檔,主要存放一些全域配置變數,如:
(1)截圖、報告、驅動存放路徑;
(2)發送郵件使用到的發件人郵箱及登錄密碼(因為發送郵件一般用于自動發送測驗報告,所以發件人比較固定);
(3)繞過登錄驗證碼要寫入的cookies資訊
||-config.py 包含讀取組態檔方法和一些全域引數
2、data
||-存放一些資料檔案
!!-generator 一個生成各型別隨機資料的類,里面包含生成隨機漢字、指定位數的數字、字串的方法,可以減少造測驗資料的作業量
3、driver
||-存放瀏覽器驅動
4、log
||-logger.py 封裝的日志類,輸出不同級別的日志資訊到指定的日志檔案里
5、report
||-HTMLTestRunner.py 生成一個HTML格式的網頁報告
6、test
||-pageObject 存放各個頁面的元素、操作
||-test_suit 存放用例
7、utils
||-common 封裝常用方法
||——base_page 頁面基本操作(如前進、后退、關閉、切換視窗、彈窗處理、元素定位、點擊、輸入、截圖等)
||-file_reader 封裝各種資料檔案讀取方法,實作腳本引數化
||——csv_reader.py 讀取csv檔案,支持逐行或逐列讀取資料
||——excel_reader.py 讀取excel檔案
||——yaml_reader.py 讀取yml檔案,組態檔讀取就是呼叫這個類中的get_data()方法
接下來主要講常用方法的封裝,
其實封裝這些方法主要是為了完善各種日常操作的日志資訊寫入及例外處理,前進、后退、關閉、點擊、輸入這些都沒什么特別的,主要就是呼叫driver的方法實作,再加上日志資訊寫入和一些例外處理即可,
著重講一下切換視窗、日志資訊寫入、彈窗處理及元素定位三個方法,
1、切換視窗
分三種情況——當前有1/2/>2個視窗
①只有一個視窗,無法切換
②有兩個視窗,直接切換到當前視窗外的另一視窗
③有兩個以上視窗,遍歷每個視窗,直到切換到的視窗是目標視窗(需要靠傳入引數判斷)為止
If len(driver.window_handles)==1: #不做任何操作,輸入警告日志資訊 elif len(driver.window_handles)==2: driver.switch_to_window(‘另一視窗句柄’) else: For window in driver.window_handles: driver.switch_to_window(window) If 當前視窗是目標視窗: Break
2、日志資訊寫入
在每一個封裝好的操作類里面,針對各種操作,寫入對應日志資訊,例如用常用方法類來說明
logger = Logger('BasePage').get_logger() If len(driver.window_handles)==1: Logger.warning(“當前只打開了一個視窗,無法切換!”) elif len(driver.window_handles)==2: driver.switch_to_window(‘另一視窗句柄’) Logger.info(‘切換到另一視窗’) else: For window in driver.window_handles: driver.switch_to_window(window) If 當前視窗是目標視窗: Break
3、彈窗處理(主要針對alert和confirm彈窗)
首先需要判斷彈窗是否出現?(使用EC.alert_is_present())
-Y 獲取彈窗提示資訊,與傳入的預期提示資訊比較,判斷資訊是否正確?
-Y 點擊確認按鈕,關閉彈窗
-N 寫入錯誤日志,提示資訊有誤,并截圖,點擊確認按鈕,關閉彈窗
-N 不需處理,寫入日志,無彈窗
4、元素定位
這里主要是使用find_element()的方法,傳入引數格式為(By.方法,’運算式’)
使用find_element()方法需要匯入By模塊(from selenium.webdriver.common.by import By)
方法可選值:id、xpath、link text、partial link text、name、tag name、class name、css selector
5、最后
稍微提一下這個框架里的PageObject思想,
PageObject(頁面物件),簡單點說就是把界面定位和業務操作分開,這個框架主要是把UI自動化分為三層:物件庫層、操作層和業務層,
在pageObject檔案夾下的各個page類,相當于是物件庫層,主要存放各個頁面的元素
Base_Page類相當于是操作層,再由各個page類繼承Base_Object類來實作頁面的一些基本操作,最后testcase中的各個用例類,類似業務層,并使用unittest框架組裝并批量執行測驗用例,
絮叨
對介面、自動化、軟體測驗零基礎入門、python全堆疊、面試題感興趣可以加入我們175317069一起學習,群內會有不定期測驗資料鏈接發放喔,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/66521.html
標籤:其他
