1. 程式人生 > >python3+selenium框架設計04-封裝測試基類

python3+selenium框架設計04-封裝測試基類

在完成了日誌類封裝之後,那我們就要對測試基類進行實現,在其中對一些請求再次封裝,在專案下新建一個framework資料夾,在資料夾下新建Base_Page.py檔案,這是用來寫測試基類的檔案。在專案下新建screenshots檔案件,用來存放截圖。專案結構如下。

具體怎麼封裝還是要看被測試需要什麼,只能提供一個大致思路,我專案能用的封裝,你專案並不一定能用

測試基類的思路就是把所有能公用的方法全部封裝,並加上日誌輸出。報錯截圖等。

看下Base_Page.py下具體程式碼

from Logs.log import log1
from selenium.common.exceptions import NoSuchElementException
import getcwd
import os
import time
class BasePage():
    '''測試基類'''
    def __init__(self,driver):
        self.driver = driver


    def get_img(self):
        '''截圖'''
        path = os.path.join(getcwd.get_cwd(),'screenshots/')#拼接截圖儲存路徑
        rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))#按格式獲取當前時間
        screen_name = path + rq + '.png'#拼接截圖檔名
        try:
            self.driver.get_screenshot_as_file(screen_name)
            log1.info("截圖儲存成功")
        except BaseException:
            log1.error("截圖失敗",exc_info = 1)

    def find_element(self,selector):
        '''定位元素'''
        by = selector[0]
        value = selector[1]
        element = None
        if by =='id' or by =='name' or by == 'class' or by == 'tag' or by =='link' or by =='plink' or by =='css' or by == 'xpath':
            try:
                if by == 'id':
                    element = self.driver.find_element_by_id(value)
                elif by == 'name':
                    element = self.driver.find_element_by_name(value)
                elif by == 'class':
                    element = self.driver.find_element_by_class_name(value)
                elif by == 'tag':
                    element = self.driver.find_element_by_tag_name(value)
                elif by == 'link':
                    element = self.driver.find_element_by_link_text(value)
                elif by == 'plink':
                    element = self.driver.find_element_by_partial_link_text(value)
                elif by == 'css':
                    element = self.driver.find_element_by_css_selector(value)
                elif by == 'xpath':
                    element = self.driver.find_element_by_xpath(value)
                else:
                    log1.error('沒有找到元素')
                log1.info('元素定位成功。定位方式:%s,使用的值%s:' % (by,value))
                return element
            except NoSuchElementException:
                log1.error("報錯資訊:",exc_info = 1)
                self.get_img()#呼叫截圖
        else:
            log1.error('輸入的元素定位方式錯誤')


    def type(self,selector,value):
        '''輸入內容'''
        element=self.find_element(selector)
        element.clear()
        log1.info('清空輸入內容')
        try:
            element.send_keys(value)
            log1.info('輸入的內容:%s' % value)
        except BaseException:
            log1.error('內容輸入報錯',exc_info = 1)
            self.get_img()


    def click(self,selector):
        '''點選元素'''
        element = self.find_element(selector)
        try:
            element.click()
            log1.info('點選元素成功')
        except BaseException:
            log1.error('點選元素報錯',exc_info = 1)
            self.get_img()


    def sleep(self,secondes):
        '''強制暫停'''
        time.sleep(secondes)
        log1.info('暫停%d秒' % secondes)


    def get_title(self):
        '''獲取title'''
        title = self.driver.title
        log1.info('當前視窗的title是:%s' % title)
        return  title

    def quit(self):
        self.driver.quit()
        log1.info('關閉瀏覽器')

只寫了一部分,提供一個思路,還有很多方法可以繼續封裝來完善框架,比如多選單的切換,視窗切換等。

接下來測試一下封裝的程式碼

在test_base.py寫如下程式碼並執行

from selenium import webdriver
from framework.Base_Page import BasePage
dr = webdriver.Firefox()
dr.get('https:www.baidu.com')
s = dr.window_handles
driver = BasePage(dr)
kw = ['id','kw']
driver.type(kw,'selenium+python')
driver.sleep(3)
driver.type(kw,'selenium')
su = ['id','su']
driver.click(su)
driver.get_img()
driver.sleep(2)
driver.get_title()

相關推薦

python3+selenium框架設計04-封裝測試

在完成了日誌類封裝之後,那我們就要對測試基類進行實現,在其中對一些請求再次封裝,在專案下新建一個framework資料夾,在資料夾下新建Base_Page.py檔案,這是用來寫測試基類的檔案。在專案下新建screenshots檔案件,用來存放截圖。專案結構如下。 具

Python+Selenium框架設計篇之6-一個檔案多個測試方法情況下測試韌體的寫法

      其實,到前面這一篇文章,簡單的Python+Selenium自動化測試框架就已經算實現了。接下來的主要是介紹,unittest管理指令碼,如何如何載入執行指令碼,再就是採用第三方外掛,實現輸出html的測試報告。本文來介紹下,在同一個類中,多個測試函式時候,測試

Python+Selenium框架設計篇之5-框架封裝和實現POM

      前面文章,我們實現了框架的一部分功能,包括日誌類和瀏覽器引擎類的封裝,今天我們繼續封裝一個基類和介紹如何實現POM。關於基類,是這樣定義的:把一些常見的頁面操作的selenium封裝到base_page.py這個類檔案,以後每個POM中的頁面類,都繼承這個基類,

Python+Selenium框架設計篇之11-自動化測試報告的生成

本文來介紹如何生成自動化測試報告,前面文章尾部提到了利用HTMLTestRunner.py來生成自動化測試報告。關於HTMLTestRunner不過多介紹,只需要知道是一個能生成一個HTML格式的網頁

Python+Selenium框架設計篇之2-簡單介紹unittest單元測試框架

       前面文章已經簡單介紹了一些關於自動化測試框架的介紹,知道了什麼是自動化測試框架,主要有哪些特點,基本組成部分等。在繼續介紹框架設計之前,我們先來學習一個工具,叫unittest。    

python3+requests庫框架設計04-配置檔案

python3配置檔案的增刪改查等操作可以使用內建的ConfigParser模組,可以自行百度學習,也可以看 Python3學習筆記27-ConfigParser模組 配置檔案一般存放著環境資訊,比如url和一些測試過程中後續需要用到的欄位。還有測試中需要匯入,匯出的一些檔

Python接口測試實戰4(下) - 框架完善:用例,用例標簽,重新運行上次失敗用例

接口測試框架 baidu __main__ *** www. ttr 技能 expec reg 如有任何學習問題,可以添加作者微信:lockingfree 課程目錄 Python接口測試實戰1(上)- 接口測試理論 Python接口測試實戰1(下)- 接口測試工具的使用

Android設計模式之Activity封裝

設計模式之Activity基類封裝 概述 為什麼要使用設計模式 模板設計模式的介紹 Activity的與模板設計模式之間的關係 總結 概述 說到設計模式,反正只要做過開發的就能說出一大堆設計模式,像最常用的單例設計模式、工廠設計模式、MV

Python+Selenium框架設計篇之10-unittest執行指令碼方法之discover()方法

       繼續接著介紹,如何利用unittest管理和執行測試用例的問題,這裡我們還是利用之前已經有的三條測試用例,如果你跳過了前面文章,請回到框架設計篇的第八篇和第七篇,裡面有相關測試類的檔案。

Python+Selenium框架設計篇之7-進一步實現POM和可能遇到問題解決辦法

       本文進一步演示POM的具體實現,前面POM只是一個頁面,一個測試指令碼,現在我們要實現三個頁面,兩個測試指令碼。在pageobjects包下,我新建了2個頁面物件:百度新聞首頁,百度體育新聞首頁,具體檔案結構如下圖,其他和之前專案層級結構保持不變。 百度首頁

《一頭扎進》系列之Python+Selenium框架設計篇1- 價值好幾K的框架,不看別後悔,過時不候

1. 什麼是自動化測試框架   在瞭解什麼是自動化測試框架之前,先了解一下什麼叫框架?框架是整個或部分系統的可重用設計,表現為一組抽象構件及構件例項間互動的方法;另一種定義認為,框架是可被應用開發者定製的應用骨架。前者是從應用方面,而後者是從目的方面給出的定 義。 從框架的定義可以瞭解,框架可以是被重用的

《一頭扎進》系列之Python+Selenium框架設計篇2- 價值好幾K的框架,不看白不看,看了還想看

1. 簡介    上一篇介紹了自動化框架的架構,今天巨集哥就帶領小夥伴或者童鞋們開始開工往這個框架裡開始添磚加瓦。主要是介紹一個框架unittest單元測試框架和一種設計思想POM。 2. unittest單元測試框架 前面文章已經簡單介紹了一些關於自動化測試框架的介紹,知道了什麼是自動化測試框架,

《一頭扎進》系列之Python+Selenium框架設計篇3- 價值好幾K的框架,狼來了,狼來了....,狼沒來,框架真的來了

1. 簡介   前邊巨集哥一邊一邊的喊框架,就如同一邊一邊的喊狼來了!狼來了!.....這回是狼沒有來,框架真的來了。從本文開始巨集哥將會一步一步介紹,如何從無到有地建立自己的第一個自動化測試框架。這一篇,我們介紹,如何封裝自己的日誌類和瀏覽器引擎類。 2. 建立專案層級結構   如何建立,怎麼建立。這個就需

《一頭扎進》系列之Python+Selenium框架設計篇5 - 價值好幾K的框架,哎呦!這個框架還真有點料啊!!!

1. 簡介   其實,到前面這一篇文章,簡單的Python+Selenium自動化測試框架就已經算實現了。接下來的主要是介紹,unittest管理指令碼,如何如何載入執行指令碼,再就是採用第三方外掛,實現輸出html的測試報告。本文來介紹下,在同一個類中,多個測試函式時候,測試韌體如何寫和進一步實現POM和可

C# Winform下一個熱插拔的MIS/MRP/ERP框架12(資料處理

/// <summary> /// 資料庫連線基類 /// </summary> public class DBContext { /// <summary> /// 預設的加密方法Key,用於使用者

Junit4小技巧-測試

在Junit4使用的時候,直接執行,通過控制檯輸出來進行問題判斷,,這比啟用debug模式更加迅速,但有時需要知道哪個方法開始輸出,如果每次都在方法開始時,列印方法名稱,那是較麻煩的事情。 通過測試基類,通過rule,可以帶來一個方便,測試基類程式碼如下

面向對象程序設計——概述,定義和派生,虛函數

折扣 mem 關系 sed 它的 作用域 pre 負責 虛析構函數 一、OOP:概述   面向對象程序設計的核心思想是數據抽象、繼承和動態綁定。通過使用數據抽象,我們可以將類的接口和實現分離;使用繼承,可以定義相似的類型並對其相似關系建模;使用動態綁定,可以在一定程度上忽略

封裝BaseActivity加沉浸式標題欄 隱藏狀態列 加DialogUtils進度條工具

//基類BaseActivity public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{ private boolean issta

封裝篇——Activity

說說為什麼要做基類Activity: 1. 統一風格,易調整(吐司、系統欄顏色、進入退出動畫…) 2. 細化基礎生命週期方法,減少程式碼量。 總而言之,封裝就是為了更優雅的寫程式碼。。。 本文將從以下思路展開: 先要理清楚下Android中 Act

Spring 的 JUnit 單元測試:AbstractTransactionalJUnit4SpringContextTests

Spring 對 JUNIT的單元測試基類有: AbstractJUnit4SpringContextTests AbstractTransactionalJUnit4SpringContextTests 其 都 可以配合 標籤 @ContextConf