1. 簡介
這篇文章主要是分享講解一下,如何封裝自己用到的方法和類。以便方便自己和別人的調用,這樣就可以避免重復地再造輪子。
封裝(Encapsulation)是面向對象的三大特征之一(另外兩個是繼承和多態),它指的是將對象的狀態信息隱藏在對象內部,不允許外部程序直接訪問對象內部信息,而是通過該類所提供的方法來實現對內部信息的操作和訪問。
就好比使用計算機,我們只需要使用計算機提供的鍵盤,就可以達到操作計算機的目的,至於在敲擊鍵盤時計算機內部是如何工作,我們根本不需要知道。
封裝機制保證了類內部數據結構的完整性,因為使用類的用戶無法直接看到類中的數據結構,只能使用類允許公開的數據,很好地避免了外部對內部數據的影響,提高了程序的可維護性。總的來說,對一個類或對象實現良好的封裝,可以達到以下目的:
-
隱藏類的實現細節。
-
讓使用者只能通過事先預定的方法來訪問數據,從而可以在該方法里加入控制邏輯,限制對屬性的不合理訪問。
-
可進行數據檢查,從而有利於保證對象信息的完整性。
-
便於修改,提高代碼的可維護性。
為了實現良好的封裝,需要從以下兩個方面來考慮:
-
將對象的屬性和實現細節隱藏起來,不允許外部直接訪問。
-
把方法暴露出來,讓方法來控制對這些屬性進行安全的訪問和操作。
因此,實際上封裝有兩個方面的含義:把該隱藏的隱藏起來,把該暴露的暴露出來。
2. 二次封裝Selenium中幾個方法
本文來介紹,如何把常用的幾個webdriver的方法封裝到自己寫的一個類中去,這個封裝過程叫二次封裝Selenium方法。我們把打開站點,瀏覽器前進和后退,關閉和退出瀏覽器這這個方法封裝到一個新寫的類中去。
我們按照如下層次結構在PyCharm中新建兩個包和兩個.py文件:

上圖,baidu_search.py是我們編寫測試腳本的python文件,具體測試代碼寫在這個文件。包test1下的basepage.py文件是這次我們介紹的二次封裝selenium方法而新建的。這里提一下,python中默認規則,包名和文件名都是小寫,類名稱單詞首字母大寫,函數名稱小寫,多個字母下划線隔開。我們盡量遵守下這個不成文的約定。
來看看basepage.py的內容:
2.1 代碼實現:

2.2 參考代碼:
# coding=utf-8🔥 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 # 2.注釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2019-12-12 @author: 北京-宏哥 QQ交流群:705269076 Project: 《手把手教你》系列進階篇之2-python+ selenium自動化測試 - python基礎掃盲 ''' # 3.導入模塊 class BasePage(object): """ 主要是把常用的幾個Selenium方法封裝到BasePage這個類,我們這里演示以下幾個方法 back() forward() get() quit() """ def __init__(self, driver): """ 寫一個構造函數,有一個參數driver :param driver: """ self.driver = driver def back(self): """ 瀏覽器后退按鈕 :param none: """ self.driver.back() def forward(self): """ 瀏覽器前進按鈕 :param none: """ self.driver.forward() def open_url(self, url): """ 打開url站點 :param url: """ self.driver.get(url) def quit_browser(self): """ 關閉並停止瀏覽器服務 :param none: """ self.driver.quit()
上面的''''''是文檔注釋,一般在類的開始和函數的開始,用兩個''''''括起來,簡單描述下這個類或者函數的功能。
3. 調用自己封裝過的方法
接下來看看,我們腳本文件中如何去調用我們自己封裝過的方法。
baidu_search.py的內容如下:
3.1 代碼實現:

3.2 參考代碼:
# coding=utf-8🔥 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 # 2.注釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2019-12-12 @author: 北京-宏哥 QQ交流群:705269076 Project: 《手把手教你》系列進階篇之2-python+ selenium自動化測試 - python基礎掃盲 ''' # 3.導入模塊 import time from selenium import webdriver from blog.basepage import BasePage class BaiduSearch(object): driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(10) basepage = BasePage(driver) def open_baidu(self): self.basepage.open_url("https://www.baidu.com") time.sleep(1) def test_search(self): self.driver.find_element_by_id('kw').send_keys("Selenium") time.sleep(1) self.basepage.back() self.basepage.forward() self.basepage.quit_browser() baidu = BaiduSearch() baidu.open_baidu() baidu.test_search()
3.3 運行結果:
運行代碼后,控制台打印如下圖的結果

上面self.basepage的幾行代碼就是調用我們自己封裝的方法去執行相關webdriver操作。這個只是一個簡單的封裝介紹,等后面,我們介紹了字符串切割,我們會再次介紹二次封裝Selenium方法,例如將會把八大find_element方法封裝到一個方法里去。
4. 封裝一個自己的類-瀏覽器引擎類
通過上邊的一小節我們知道了,如何去封裝幾個簡單的Selenium方法到我們自定義的類,所以我們趁熱打鐵:這次我們編寫一個類,叫瀏覽器引擎類,通過更改一個字符串的值,利用if語句去判斷和控制啟動那個瀏覽器。這里我們暫時,支持三大瀏覽器
(IE,Chrome,Firefox)。這里有一個前提條件,在基礎篇中,啟動三大瀏覽器的driver文件,檢查下你的Python安裝路徑下有沒有這三個driver插件,如果沒有,請回到基礎篇的如何啟動火狐和IE瀏覽器文章去看看如何做。
我們繼續在test1這個包下新建一個browser_engine.py文件,然后在另外一個包下新建一個test.py文件去測試這個瀏覽器引擎類是否工作正常。這個瀏覽器引擎類,我們一開始寫簡單一點,只寫啟動瀏覽器。
先看看browser_engine.py中的代碼:
4.1 代碼實現:
4.1.1 browser_engine.py

4.1.2 test.py

4.2 參考代碼:
4.2.1 browser_engine.py
# coding=utf-8🔥 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 # 2.注釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2019-12-12 @author: 北京-宏哥 QQ交流群:705269076 Project: 《手把手教你》系列進階篇之2-python+ selenium自動化測試 - python基礎掃盲 ''' # 3.導入模塊 from selenium import webdriver class BrowserEngine(object): """ 定義一個瀏覽器引擎類,根據browser_type的值去,控制啟動不同的瀏覽器,這里主要是IE,Firefox, Chrome """ def __init__(self, driver): self.driver = driver browser_type = "IE" # maybe Firefox, Chrome, IE def get_browser(self): """ 通過if語句,來控制初始化不同瀏覽器的啟動,默認是啟動Chrome :return: driver """ if self.browser_type == 'Firefox': driver = webdriver.Firefox() elif self.browser_type == 'Chrome': driver = webdriver.Chrome() elif self.browser_type == 'IE': driver = webdriver.Ie() else: driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(10) return driver
4.2.2 test.py
再看看test.py代碼,進行測試,更改browser_engine.py中browser_type的值,去測試三大瀏覽器是否啟動正常。
# coding=utf-8🔥 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 # 2.注釋:包括記錄創建時間,創建人,項目名稱。 ''' Created on 2019-12-12 @author: 北京-宏哥 QQ交流群:705269076 Project: 《手把手教你》系列進階篇之2-python+ selenium自動化測試 - python基礎掃盲 ''' # 3.導入模塊 from test1.browser_engine import BrowserEngine class TestBrowserEngine(object): def open_browser(self): browserengine = BrowserEngine(self) driver = browserengine.get_browser() tbe = TestBrowserEngine() tbe.open_browser()
4.3 運行結果:
再看看test.py代碼,進行測試,更改browser_engine.py中browser_type的值,去測試三大瀏覽器是否啟動正常。
運行代碼后,控制台打印如下圖的結果

目前,自定義的瀏覽器引擎類到這里就封裝好了,只支持打開不同瀏覽器,需要手動修改,引擎類中browser_type的值。看起來功能簡單,但是我們只是需要學習這種做事的方式和思維,在下一個部分,框架設計的時候,我會再告訴大家如何去加強這個引擎類
的功能,到時候去修改配置文件中的瀏覽器類型,而不是修改代碼中的字段。通過修改配置文件,從而去打開不同瀏覽器,並開始測試相關腳本。
5. 小結
好了,今天的分享就到這里吧!!!謝謝各位的耐心閱讀。
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!

