Python+selenium自動化公共邏輯步驟封裝

    開篇


    個人博客“Python+selenium的GUI自動化實現”提到的chrome與IE瀏覽器調用插件已上傳至51CTO下載,對應鏈接分別爲:chrome,http://down.51cto.com/data/2171584;IE,http://down.51cto.com/data/2171585有需要的直接下載即可;

    

    正文


    關於自動化,其實質就是用機器操作代替手工執行,從而減少人力投入、節約項目運營成功。優秀的自動化框架,可能的一個發展過程,前期自動化用例寫作實現過程,可能需要有一定的人力投入,在用例成型之後,投入的維護人員,就需要相應的精簡,如果投入與維護人員依舊高居不下,這樣的自動化基本可以廢棄掉,由此引申出優秀的自動化框架這個概念。

    再談優秀的自動化框架概念之前,囉嗦一下關於自動化的實現思想:

    1.對於所要實現的業務,有一定的熟悉與瞭解,或者可以根據文本用例,做自動化用例輕鬆實現,也就是說,做自動化,需要基於一定的業務基礎,也就是熟悉業務;

    2.第二點就是,腳本與數據分離,這一點涉及到自動化用例維護人員投入這一塊,好的自動化用例,一旦實現腳本與數據分離之後,維護人員只需基於不同的場景要求維護自動化數據部分即可,相應的自動化腳本部分無需過多維護,其最終目的就是減少人員投入;

    3.自動化用例是針對GUI的用例設計,需要用例實現人員與維護人員有一定的元素定位技能,也就是xpath,正如生活中如何區分張三和李四一樣,元素定位就是去區分輸入框與按鈕等元素空間,從而確定針對哪個控件做何種操作;

    4.優秀的自動化礦建,要求簡單易用,減少用例實現人員與維護人員學習週期,能夠很快投入項目自動化中來,其實質就是減少人力投入,自動化框架做的越傻瓜越好;


    Python+selenium自動化優化-公共邏輯步驟封裝


    此處只對Python+selenium中的點擊與輸入實現做代碼封裝實現,具體如下:

#encoding=utf-8
#針對Python中用到的selenium公共方法做封裝
class Webdriver:
    def click(self,webdriver='driver',method='Id',path=''):
        'method value have name/id/xpath/class;webdriver is the driver you use'
        if path=='':
            print 'you must input the xpath'
        else:
            if method=='Id' or method=='id':#根據控件元素的ID屬性定位元素,速度最快
                print 'the method you useing is Id'
                elem=webdriver.find_element_by_id(path)
                elem.click()
            elif method=='name' or method=='Name':#根據控件元素的name屬性定位元素,速度次之
                elem=webdriver.find_element_by_name(path)
                elem.click()
            elif method=='class' or method=='Class':#根據控件元素的class屬性定位元素,速度稍慢
                elem=webdriver.find_element_by_class_name(path)
                elem.click()
            elif method=='xpath' or method=='Xpath':#通過xpath方式定位元素,速度最慢
                elem=webdriver.find_element_by_xpath(path)
                elem.click()
    def text_input(self,webdriver='driver',method='Id',path='',key=''):
        'method value have name/id/xpath/class;webdriver is the driver you use'
        if path=='':
            print 'you must input the xpath'
        else:
            if method=='Id' or method=='id':#根據控件元素的ID屬性定位元素,速度最快
                print 'the method you useing is Id'
                elem=webdriver.find_element_by_id(path)
                elem.clear()
                elem.send_keys(key)
            elif method=='name' or method=='Name':#根據控件元素的name屬性定位元素,速度次之
                elem=webdriver.find_element_by_name(path)
                elem.clear()
                elem.send_keys(key)
            elif method=='class' or method=='Class':#根據控件元素的class屬性定位元素,速度稍慢
                elem=webdriver.find_element_by_class_name(path)
                elem.clear()
                elem.send_keys(key)
            elif method=='xpath' or method=='Xpath':#通過xpath方式定位元素,速度最慢
                elem=webdriver.find_element_by_xpath(path)
                elem.clear()
                elem.send_keys(key)

    調用


>>> import sys
>>> sys.path.append('E:\Develop\Python')        #筆者封裝文件存放路徑
>>> import HelloWebdriver        #筆者封裝文件名
>>> explore=HelloWebdriver.Webdriver()    #公共邏輯步驟實現類實例化
>>> explore.text_input(webdriver=driver,method='class',path='js_uname',key='123456') #封裝類方法調用

    通過上面的代碼,可以發現,針對公共邏輯步驟做封裝之後,可以減少代碼的冗餘,自動化用例中只需調用公共方法,減少了代碼維護成本,且易於維護;


    優化:

    1.針對公共邏輯步驟做封裝,可以針對元素控件做存在性與否的斷言操作,通過斷言實現正宗的自動化,如果控件不存在,直接斷言失敗,用例停止運行,如果控件存在,不做斷言失敗,用例正常運行,從而完美實現自動化;

    2.封裝做完美優化,封裝的公共邏輯方法能夠滿足不同場景業務要求,例如英文輸入或者漢語輸入等不同編碼方式,做到封裝方法的健壯性;

    3.圖形化,針對自動化公共方法可以做圖形化實現,成爲一種控件,用例寫作人員只需拖動控件存放於自動化用例集中即可;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章