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


1. 簡介

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

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

就好比使用計算機,我們只需要使用計算機提供的鍵盤,就可以達到操作計算機的目的,至於在敲擊鍵盤時計算機內部是如何工作,我們根本不需要知道。

封裝機制保證了類內部數據結構的完整性,因為使用類的用戶無法直接看到類中的數據結構,只能使用類允許公開的數據,很好地避免了外部對內部數據的影響,提高了程序的可維護性。總的來說,對一個類或對象實現良好的封裝,可以達到以下目的:

  • 隱藏類的實現細節。

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

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

  • 便於修改,提高代碼的可維護性。

為了實現良好的封裝,需要從以下兩個方面來考慮:

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

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

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

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM