欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PO模式在selenium自動化測試框架的優(yōu)勢

 更新時間:2022年03月20日 09:54:21   作者:和牛  
大家都知道po模式可以提高代碼的可讀性和減少了代碼的重復,但是相對的缺點還有,今天通過本文一起學習下PO模式在selenium自動化測試框架的優(yōu)勢,需要的朋友可以參考下

PO模式簡介

1.什么是PO模式

PO模型是:Page Object Model的簡寫 頁面對象模型

作用:就是把測試頁面和測試腳本進行分離,即把頁面封裝成類,供測試腳本進行調(diào)用;

分層機制,讓不同層去做不同類型的事情,讓代碼結(jié)構(gòu)清晰,增加復用性。

PO設計模式是Selenium自動化測試中最佳的設計模式之一,主要體現(xiàn)在對界面交互細節(jié)的封裝

2. 不使用PO設計會出現(xiàn)以下幾種情況:

復用性不太好,擴展性不好,易讀性差,不好維護,UI界面頻繁的項目維護起來比較麻煩。

3.PO模式的優(yōu)缺點

優(yōu)點:

  • 提高代碼的可讀性
  • 減少了代碼的重復
  • 提高代碼的可維護性,特別是針對UI界面頻繁的項目

缺點:

  • 造成項目結(jié)構(gòu)比較復雜,因為是根據(jù)流程進行了模塊化處理

下面重點看下PO模式在selenium自動化測試框架的優(yōu)勢。

PO模式是在UI自動化測試過程當中使用非常頻繁的一種設計模式,使用這種模式后,可以有效的提升代碼的復用能力,并且讓自動化測試代碼維護起來更加方便。

PO模式的全稱叫page object model(POM),有時候叫做 page object pattern。最開始由馬丁福勒提出,這個模式受到selenium自動化測試框架大力推廣,因而成為一種非常主流的自動化測試設計模式。

在PO模式當中,每一個UI頁面使用編程語言當中的類來表示。在這個類當中,通過函數(shù)形式定義頁面的行為和操作。這讓調(diào)用方不需要關(guān)注具體執(zhí)行的操作到底是點擊還是拖動,而是關(guān)注具體的業(yè)務,比如登錄、購物等等,甚至如果程序員直接把代碼給產(chǎn)品經(jīng)理看,他也是能看懂的。

沒有使用PO模式時

在測試用例中直接編寫瀏覽器操作API,對于代碼編寫者并沒有多高的難度,因為他自己已經(jīng)對這些API非常熟悉,但是這些瀏覽器操作并不能體現(xiàn)業(yè)務,至少沒有產(chǎn)品經(jīng)理那么熟悉,因此他很難和產(chǎn)品經(jīng)理進行溝通,也難和開發(fā)溝通,甚至在半個月之后,他已經(jīng)忘記了自己到底寫了什么東西。

def test_login_mail(self):
    driver = self.driver
    driver.get("http://www.xxx.xxx.com")
    driver.find_element_by_id("idInput").clear()
    driver.find_element_by_id("xxxxxxx").send_keys("xxxxx")
    driver.find_element_by_id("xxxxxxx").clear()
    driver.find_element_by_id("xxxxxxx").send_keys("xxxxxx")
    driver.find_element_by_id("loginBtn").click()

使用PO模式

使用PO模式有利于梳理業(yè)務,也有利于和其他人進行溝通。當你把下面這段代碼拿給產(chǎn)品經(jīng)理看的時候,他也大概能知道你測的是什么業(yè)務,能幫你糾正你的測試流程是否正確,或者提出一些更有建設性的意見,這對于大型項目需要頻繁溝通和梳理業(yè)務時非常有用。

def test_login_mail(self):
    LoginPage(driver).login()

而瀏覽器本身的操作,就會被分離到一個更底層的模塊,這些代碼你可以不對調(diào)用方暴露,產(chǎn)品經(jīng)理并不關(guān)心你這個頁面中什么元素定位,他也不懂。

class LoginPage:
	username_loc=(By.ID,"idInput")
    password_loc =(By.ID,"pwdInput")
    submit_loc =(By.ID,"loginBtn")
    span_loc=(By.CSS_SELECTOR,"div.error-tt>p")
    dynpw_loc =(By.ID,"lbDynPw")
    userid_loc =(By.ID,"spnUid")
    def __init__(self, driver):
        self.driver = driver
    def login(self):
        self.driver.find_element(*self.username_loc).clear()
        self.driver.find_element(*self.username_loc).send_keys("xxxxx")
        self.driver.find_element(*self.password_loc).clear()
        self.driver.find_element(*self.password_loc).send_keys("xxxxxx")
        self.driver.find_element(*self.submit_loc).click()

這種方式把元素定位方式也分離了。但是這種元素定位的表達式可讀性也不是很強,可以換用 property 方式來表示元素,所有的元素統(tǒng)一放在一起,修改起來也比較方便。

class LoginPage:
    def __init__(self, driver)
    	self.driver = driver
    @property
    def username_element(self):
        return self.driver.find_element('id', 'idInput')
    def password_element(self):
        return self.driver.find_element('id', 'pwdInput')
    def submit_element(self):
        return self.driver.find_element('id', 'loginBtn')
    def login(self, name, password):
        self.username_element.send_keys(name)
        self.password_element.send_keys(password)
        self.submit_element.click()

第三種方式可以充分利用Python的描述符特性,你會發(fā)現(xiàn)很多序列化庫或者ORM框架都有類似的用法。

class LoginPage:
    def __init__(self, driver)
    	self.driver = driver
    username = Element(css='#idInput', desc='用戶名輸入框')
    password = Element(css='#pwdInput', desc='密碼輸入框')
    confirm = Element(css='#loginBtn', desc='登錄確認按鈕')
   	def login(self, name, password):
        self.username.send_keys(name)
        self.password.send_keys(password)
        self.confirm.click()

而 Element 類可以通過 Python 描述符實現(xiàn),這里為了方便,只定義了xpath的元素定位方法:

class Element:
    def __init__(self,xpath=None,desc=''):
        self.xpath = xpath
        self.desc = desc
    def __get__(self, instance, owner):
        driver = instance.browser
        el = driver.find_element('xpath', self.xpath)
        return el

PO模式和DDD

PO模式是DDD(領(lǐng)域驅(qū)動設計)的一個簡單實現(xiàn),但是還不夠徹底。如果要在自動化測試中貫徹DDD,我覺得還有一些可以優(yōu)化的空間。

首先某一個業(yè)務不一定只是單個頁面的操作,比如登錄不一定只涉及到LoginPage這個頁面,因此直接在LoginPage中編寫login函數(shù)就不是很合理。對于調(diào)用方來說,應該明確說明的是誰在登錄,而不是指某個頁面。像這樣:

user.login()
# or
login(user)

我們編寫的代碼就像是自然語言,任何懂英語的人都知道代碼在做什么,在DDD中,叫做領(lǐng)域特定語言(DSL), 要實現(xiàn)這種邏輯,在Page類和調(diào)用中間應該還會有一個層級來封裝user。

其次,Page頁面會依賴更底層的資源,比如組件,元素類型。因此在 Page 類的下方應該會使用 InputElement, ButtonElement 、SelectElement 這樣的元素類和 HeaderComponent、FooterComponent 這樣的組件類。

class LoginPage:
	username_filed = InputElement('xxx')
	password_filed = PasswordElement('xxx')

領(lǐng)域驅(qū)動設計對于大型項目梳理業(yè)務、同步業(yè)務、溝通業(yè)務是非常有幫助的,是一種以業(yè)務為中心的設計范式。PO模式對于DDD的小范圍應用,以及具體了足夠多的好處:

  • 便于維護。每一個頁面的操作都被單獨的存放在一個類文件中,當前端頁面被修改之后,只需要找到對應類文件進行修改,其他的代碼并不需要進行修改,這符合單一職責原則。
  • 便于重復使用。在進行自動化測試的時候,一個測試由多個測試步驟組成,這些測試步驟可能涉及到多個頁面的操作。而用例與用例之間的操作可能重合。PO模式可以重復利用這些測試步驟,簡化代碼的編寫。
  • 提高了可讀性。頁面的操作都被以函數(shù)的形式封裝起來了。函數(shù)名就具備注釋的作用,其他人閱讀代碼時可以通過函數(shù)了解業(yè)務。

到此這篇關(guān)于PO模式在selenium自動化測試框架有什么好處的文章就介紹到這了,更多相關(guān)selenium自動化測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python和Excel的完美結(jié)合的常用操作案例匯總

    Python和Excel的完美結(jié)合的常用操作案例匯總

    這篇文章主要介紹了Python和Excel的完美結(jié)合的常用操作案例匯總,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 調(diào)試Django時打印SQL語句的日志代碼實例

    調(diào)試Django時打印SQL語句的日志代碼實例

    這篇文章主要介紹了調(diào)試Django時打印SQL語句的日志代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • python機器學習基礎K近鄰算法詳解KNN

    python機器學習基礎K近鄰算法詳解KNN

    這篇文章主要為大家介紹了python機器學習基礎K近鄰算法詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • NumPy進行統(tǒng)計分析

    NumPy進行統(tǒng)計分析

    本文主要介紹了NumPy進行統(tǒng)計分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • PyQt5+QtChart實現(xiàn)柱狀圖的繪制

    PyQt5+QtChart實現(xiàn)柱狀圖的繪制

    QChart是一個QGraphicScene中可以顯示的QGraphicsWidget。本文將利用QtChart實現(xiàn)柱狀圖的繪制,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-12-12
  • Python使用pyfinance包進行證券收益分析

    Python使用pyfinance包進行證券收益分析

    在查找如何使用Python實現(xiàn)滾動回歸時,發(fā)現(xiàn)一個很有用的量化金融包——pyfinance。顧名思義,pyfinance是為投資管理和證券收益分析而構(gòu)建的Python分析包,主要是對面向定量金融的現(xiàn)有包進行補充,如pyfolio和pandas等。pyfinance包含六個模塊,下面將一一介紹
    2021-11-11
  • 分享PyCharm最新激活碼(真永久激活方法)不用每月找安裝參數(shù)或最新激活碼了

    分享PyCharm最新激活碼(真永久激活方法)不用每月找安裝參數(shù)或最新激活碼了

    這篇文章主要介紹了分享PyCharm最新激活碼(真永久激活方法)不用每月找安裝參數(shù)或最新激活碼了一勞永逸,需要的朋友可以參考下
    2020-12-12
  • 基于Python實現(xiàn)股票收益率分析

    基于Python實現(xiàn)股票收益率分析

    這篇文章主要為大家詳細介紹如何通過Python分析股票的收益率,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-04-04
  • Python smtplib實現(xiàn)發(fā)送郵件功能

    Python smtplib實現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了Python smtplib實現(xiàn)發(fā)送郵件功能,包含文本、附件、圖片等,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python對Excel的讀取的示例代碼

    python對Excel的讀取的示例代碼

    這篇文章主要介紹了python對Excel的讀取的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02

最新評論