1. 程式人生 > >Java+Selenium3框架設計準備篇8-POM簡介

Java+Selenium3框架設計準備篇8-POM簡介

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

 

Selenium中使用POM的特點和優點?

1)  POM是一種設計模式,它能幫我們維護程式碼和減少程式碼的重複,這個在自動化測試領域是一個很重要的話題。

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

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

4)  在POM中,我們把測試指令碼和頁面物件分層,例如頁面物件統一放一個包下面,測試用例指令碼統一放另外一個包下,到達測試指令碼和頁面物件分離。

來看看之前我們一直使用非POM方式寫指令碼的例子。

package testSuites;

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;

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();
		driver.get("https://www.jd.com/");
		Thread.sleep(2000);
	}
	
	@Test
	public void testLogin() {
		
		// 點選登入
		driver.findElement(By.id("ttbar-login")).click();
		// 點選賬號登入
		driver.findElement(By.xpath("//*/div[@class='login-form']/div[2]/a")).click();
		// 輸入使用者名稱
		driver.findElement(By.id("loginname")).sendKeys("user1");
		// 輸入密碼
		driver.findElement(By.id("nloginpwd")).sendKeys("password");
		//點選登入
		driver.findElement(By.id("loginsubmit")).click();
		
	}
	
	@AfterClass
	public void tearDown(){
		
		driver.quit();
	}

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