1. 程式人生 > 其它 >《手把手教你》系列基礎篇(九十二)-java+ selenium自動化測試-框架設計基礎-POM設計模式簡介(詳解教程)

《手把手教你》系列基礎篇(九十二)-java+ selenium自動化測試-框架設計基礎-POM設計模式簡介(詳解教程)

1.簡介

頁面物件模型(Page Object Model)在Selenium Webdriver自動化測試中使用非常流行和受歡迎,作為自動化測試工程師應該至少聽說過POM這個概念。本篇介紹POM的簡介,接下來巨集哥一步一步告訴你如何在你Java+Selenium3自動化測試框架中實現POM。

2.POM簡介

Page Object Model (POM) 直譯為“頁面物件模型”,這種設計模式旨在為每個待測試的頁面建立一個頁面物件(class),將那些繁瑣的定位操作封裝到這個頁面物件中,只對外提供必要的操作介面,是一種封裝思想。

Page Object Model:頁面物件模型,是Selenium中的一種測試設計模式,一個頁面物件代表使用者介面互動測試的一個區域。

使用page object來實現:測試、邏輯、資料、驅動相互分離。

頁面物件模型(PO)是一種設計模式,用來管理維護一組web元素的物件庫。

3.POM是什麼?

頁面根據系統或者模組來管理

例如:xx系統或模組,涉及到哪幾個頁面

元素根據頁面來進行管理

例如:測試xx頁面,需要用到哪些元素

4.為什麼要使用POM?

少數的自動化測試用例維護起來看起來是很容易的。但隨著時間的遷移,測試套件將持續的增長。指令碼也將變得越來越臃腫龐大。如果變成我們需要維護10個頁面,100個頁面,甚至1000個呢?而且頁面元素很多是公用的。那頁面元素的任何改變都會讓我們的指令碼維護變得繁瑣複雜,而且變得耗時易出錯。

5.POM好處有哪些?

(1)讓UI自動化更早介入專案中,可專案開發完再進行元素定位的適配與除錯。

(2)POM 將頁面元素定位和業務操作流程分開,分離了測試物件和測試指令碼.在POM中,我們把測試指令碼和頁面物件分層,例如頁面物件統一放一個包下面,測試用例指令碼統一放另外一個包下,到達測試指令碼和頁面物件分離。

(3)如果UI頁面元素更改,測試指令碼不需要更改,只需要更改頁面物件中的某些程式碼就可以,換句話說:你可以把一個頁面的元素的全部定位方式和該頁面的業務操作方法寫在一個類檔案,然後在測試指令碼類檔案去呼叫頁面類的元素和方法。這樣就有一個好處,你的軟體產某一個介面出現了變化,你只需要修改對應頁面的元素定位和相關方法,而不需要去修改你的測試指令碼,當然除非你這個頁面由於需求問題,之後被砍了,你才要去修改你的測試指令碼類。

(4)POM能讓我們的測試程式碼變得可讀性更好,高可維護性,高複用性,POM是一種設計模式,它能幫我們維護程式碼和減少程式碼的重複,這個在自動化測試領域是一個很重要的話題。

(5)可多人共同維護開發指令碼,利於團隊協作。

(6)在具體實施中,一個頁面看做一個頁面物件,每個頁面寫一個類。

6.如何設計POM?

頁面物件模型(POM)是一種設計模式,用來管理維護一組web元素集的物件庫

在POM下,被測專案的每一個頁面都有一個對應的page class

每一個page class維護著該web頁的元素定位集合

每一個page class維護著該web頁的操作這些元素的方法

7.實際示例

7.1不使用POM

1.例如,我們訪問百度,在百度的搜尋框裡搜尋selenium,在不使用pom時,程式碼如下圖所示:

2.參考程式碼:

package library;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/**
 * @author 北京-巨集哥
 * 
 * @公眾號:北京巨集哥
 * 
 *《手把手教你》系列基礎篇(八十五)-java+ selenium自動化測試-框架設計基礎-TestNG日誌(詳解教程)
 *
 * 2022年3月19日
 */

public class TestWithoutPOM {
    
    WebDriver driver;
    
    @BeforeClass
    public void setUp() throws Exception{
        
        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        
    }
    
    @Test
    public void testBaidu() throws InterruptedException {
        
        driver.get("https://www.baidu.com/");
        Thread.sleep(2000);
        //輸入要搜尋的內容
        driver.findElement(By.id("kw")).sendKeys("selenium");
        //點選搜尋按鈕
        driver.findElement(By.id("su")).click();

    }
    
    @AfterClass
    public void tearDown(){
        
        driver.quit();
    }
 
}

上面指令碼中,包含了元素定位和業務邏輯操作方法,兩者混合在一起,如果指令碼註釋寫得不好,其他人很難看得懂,特別是寫了很多指令碼的時候,根本沒有層次和邏輯可言。讓維護指令碼的新人會很頭疼,下一篇介紹POM的實現,可以看看兩者對比,優點和缺點一下子就看出來。

8.小結

 今天主要是講解和分享一下POM的基礎的理論知識,下一篇巨集哥講解和分享一下POM的實現。 好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!