這篇文章主要是分享講解一下,如何封裝本身用到的方法和類。以便方便本身和別人的調用,這樣就能夠避免重複地再造輪子。python
封裝(Encapsulation)是面向對象的三大特徵之一(另外兩個是繼承和多態),它指的是將對象的狀態信息隱藏在對象內部,不容許外部程序直接訪問對象內部信息,而是經過該類所提供的方法來實現對內部信息的操做和訪問。web
就比如使用計算機,咱們只須要使用計算機提供的鍵盤,就能夠達到操做計算機的目的,至於在敲擊鍵盤時計算機內部是如何工做,咱們根本不須要知道。瀏覽器
封裝機制保證了類內部數據結構的完整性,由於使用類的用戶沒法直接看到類中的數據結構,只能使用類容許公開的數據,很好地避免了外部對內部數據的影響,提升了程序的可維護性。總的來講,對一個類或對象實現良好的封裝,能夠達到如下目的:安全
隱藏類的實現細節。數據結構
讓使用者只能經過事先預約的方法來訪問數據,從而能夠在該方法里加入控制邏輯,限制對屬性的不合理訪問。框架
可進行數據檢查,從而有利於保證對象信息的完整性。函數
便於修改,提升代碼的可維護性。學習
爲了實現良好的封裝,須要從如下兩個方面來考慮:測試
將對象的屬性和實現細節隱藏起來,不容許外部直接訪問。ui
把方法暴露出來,讓方法來控制對這些屬性進行安全的訪問和操做。
所以,實際上封裝有兩個方面的含義:把該隱藏的隱藏起來,把該暴露的暴露出來。
本文來介紹,如何把經常使用的幾個webdriver的方法封裝到本身寫的一個類中去,這個封裝過程叫二次封裝Selenium方法。咱們把打開站點,瀏覽器前進和後退,關閉和退出瀏覽器這這個方法封裝到一個新寫的類中去。
咱們按照以下層次結構在PyCharm中新建兩個包和兩個.py文件:
上圖,baidu_search.py是咱們編寫測試腳本的python文件,具體測試代碼寫在這個文件。包test1下的basepage.py文件是此次咱們介紹的二次封裝selenium方法而新建的。這裏提一下,python中默認規則,包名和文件名都是小寫,類名稱單詞首字母大寫,函數名稱小寫,多個字母下劃線隔開。咱們儘可能遵照下這個不成文的約定。
來看看basepage.py的內容:
# 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()
上面的''''''是文檔註釋,通常在類的開始和函數的開始,用兩個''''''括起來,簡單描述下這個類或者函數的功能。
接下來看看,咱們腳本文件中如何去調用咱們本身封裝過的方法。
baidu_search.py的內容以下:
# 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()
運行代碼後,控制檯打印以下圖的結果
上面self.basepage的幾行代碼就是調用咱們本身封裝的方法去執行相關webdriver操做。這個只是一個簡單的封裝介紹,等後面,咱們介紹了字符串切割,咱們會再次介紹二次封裝Selenium方法,例如將會把八大find_element方法封裝到一個方法裏去。
經過上邊的一小節咱們知道了,如何去封裝幾個簡單的Selenium方法到咱們自定義的類,因此咱們趁熱打鐵:此次咱們編寫一個類,叫瀏覽器引擎類,經過更改一個字符串的值,利用if語句去判斷和控制啓動那個瀏覽器。這裏咱們暫時,支持三大瀏覽器
(IE,Chrome,Firefox)。這裏有一個前提條件,在基礎篇中,啓動三大瀏覽器的driver文件,檢查下你的Python安裝路徑下有沒有這三個driver插件,若是沒有,請回到基礎篇的如何啓動火狐和IE瀏覽器文章去看看如何作。
咱們繼續在test1這個包下新建一個browser_engine.py文件,而後在另一個包下新建一個test.py文件去測試這個瀏覽器引擎類是否工做正常。這個瀏覽器引擎類,咱們一開始寫簡單一點,只寫啓動瀏覽器。
先看看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
再看看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()
再看看test.py代碼,進行測試,更改browser_engine.py中browser_type的值,去測試三大瀏覽器是否啓動正常。
運行代碼後,控制檯打印以下圖的結果
目前,自定義的瀏覽器引擎類到這裏就封裝好了,只支持打開不一樣瀏覽器,須要手動修改,引擎類中browser_type的值。看起來功能簡單,可是咱們只是須要學習這種作事的方式和思惟,在下一個部分,框架設計的時候,我會再告訴你們如何去增強這個引擎類
的功能,到時候去修改配置文件中的瀏覽器類型,而不是修改代碼中的字段。經過修改配置文件,從而去打開不一樣瀏覽器,並開始測試相關腳本。
好了,今天的分享就到這裏吧!!!謝謝各位的耐心閱讀。
您的確定就是我進步的動力。若是你感受還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!