《手把手教你》系列基礎篇(九十二)-java+ selenium自動化測試-框架設計基礎-POM設計模式簡介(詳解教程)
- 2022 年 4 月 21 日
- 筆記
- java+selenium自動化測試
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("//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的實現。 好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!