《手把手教你》系列進階篇之2-python+ selenium自動化測試 - python基礎掃盲(詳細教程)

1. 簡介

  這篇文章主要是分享講解一下,如何封裝本身用到的方法和類。以便方便本身和別人的調用,這樣就能夠避免重複地再造輪子。python

  封裝(Encapsulation)是面向對象的三大特徵之一(另外兩個是繼承和多態),它指的是將對象的狀態信息隱藏在對象內部,不容許外部程序直接訪問對象內部信息,而是經過該類所提供的方法來實現對內部信息的操做和訪問。web

就比如使用計算機,咱們只須要使用計算機提供的鍵盤,就能夠達到操做計算機的目的,至於在敲擊鍵盤時計算機內部是如何工做,咱們根本不須要知道。瀏覽器

封裝機制保證了類內部數據結構的完整性,由於使用類的用戶沒法直接看到類中的數據結構,只能使用類容許公開的數據,很好地避免了外部對內部數據的影響,提升了程序的可維護性。總的來講,對一個類或對象實現良好的封裝,能夠達到如下目的:安全

  • 隱藏類的實現細節。數據結構

  • 讓使用者只能經過事先預約的方法來訪問數據,從而能夠在該方法里加入控制邏輯,限制對屬性的不合理訪問。框架

  • 可進行數據檢查,從而有利於保證對象信息的完整性。函數

  • 便於修改,提升代碼的可維護性。學習

爲了實現良好的封裝,須要從如下兩個方面來考慮:測試

  1. 將對象的屬性和實現細節隱藏起來,不容許外部直接訪問。ui

  2. 把方法暴露出來,讓方法來控制對這些屬性進行安全的訪問和操做。

所以,實際上封裝有兩個方面的含義:把該隱藏的隱藏起來,把該暴露的暴露出來。 

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. 小結

  好了,今天的分享就到這裏吧!!!謝謝各位的耐心閱讀。

 

您的確定就是我進步的動力。若是你感受還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!

 

相關文章
相關標籤/搜索