1、在實現自動化過程當中,會有不少重複的代碼,咱們在維護代碼時會很困難,若是想解決這個問題,咱們就須要使用PageObjectModel(頁面對象模型)的方式來進行自動化代碼的書寫。前端
2、案例演示java
以該網站的機票預訂操做爲例:https://www.expedia.com/?siteid=100001&langid=2052¤cy=CNYchrome
一、首先咱們在eclipse中建立2個包,pageclasses和pomtestcase,而後在pageclasses中建立一個用於存放單個元素的類SearchPage,在pomtestcase中建立一個類用於調用建立好的元素,這樣就可以把頁面元素和測試的用例代碼分開存放,便於維護和調用。api
二、在SearchPage類中將查找元素直接封裝到方法中eclipse
package pageclasses; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class SearchPage { // 首先聲明一個WebElement類型的變量 public static WebElement element = null ; // 加元素封裝到方法中 /** * 返回"機票按鈕"元素 * @param driver * @return */ public static WebElement ticketButton(WebDriver driver) { element = driver.findElement(By.id("tab-flight-tab-hp")); return element; } /** * 返回"出發文本框"元素 * @param driver * @return */ public static WebElement startText(WebDriver driver) { element = driver.findElement(By.xpath("//input[@id='flight-origin-hp-flight']")); return element; } /** * 返回"飛往文本框"元素 * @param driver * @return */ public static WebElement endText(WebDriver driver) { element = driver.findElement(By.xpath("//input[@id='flight-destination-hp-flight']")); return element; } /** * 返回"出發日期框"元素 * @param driver * @return */ public static WebElement startData(WebDriver driver) { element = driver.findElement(By.xpath("//input[@id='flight-departing-hp-flight']")); return element; } /** * 返回"返回日期框"元素 * @param driver * @return */ public static WebElement returnData(WebDriver driver) { element = driver.findElement(By.xpath("//input[@id='flight-returning-hp-flight']")); return element; } /** * 返回"點擊登陸"元素 * @param driver * @return */ public static WebElement searchButton(WebDriver driver) { element = driver.findElement(By.xpath("//div[@class='cols-nested ab25184-submit']//button[@class='btn-primary btn-action gcw-submit']")); return element; } }
元素封裝好之後,在測試類中能夠直接被多出重複調用,但前端代碼路徑發生變化,那麼就只須要修改該類中相對應的元素路徑便可,測試類中調用到該元素的路徑也一併進行了修改,提升了咱們對自動化代碼維護時的工做效率。學習
三、在PageObjectModel類中直接調用,這樣就簡化了測試類中的代碼量測試
1 package pomtestcase; 2 3 import static org.junit.jupiter.api.Assertions.*; 4 5 import java.util.concurrent.TimeUnit; 6 7 import org.junit.jupiter.api.AfterEach; 8 import org.junit.jupiter.api.BeforeEach; 9 import org.junit.jupiter.api.Test; 10 import org.openqa.selenium.By; 11 import org.openqa.selenium.WebDriver; 12 import org.openqa.selenium.chrome.ChromeDriver; 13 14 import pageclasses.SearchPage; 15 16 class PageObjectModel { 17 18 WebDriver driver; 19 String url; 20 21 @BeforeEach 22 void setUp() throws Exception { 23 driver = new ChromeDriver(); 24 url = "https://www.expedia.com/?siteid=100001&langid=2052¤cy=CNY"; 25 driver.manage().window().maximize(); 26 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 27 driver.get(url); 28 } 29 30 @Test 31 void test() throws InterruptedException { 32 // 調用封裝了元素的SearchPage類中的「機票」按鈕元素 33 SearchPage.ticketButton(driver).click(); 34 Thread.sleep(1000); 35 // 調用封裝了元素的SearchPage類中的「出發」輸入框元素 36 SearchPage.startText(driver).sendKeys("長沙, 中國 (CSX-黃花國際機場)"); 37 Thread.sleep(1000); 38 // 調用封裝了元素的SearchPage類中的「返回」輸入框元素 39 SearchPage.endText(driver).sendKeys("上海, 中國 (PVG-浦東國際機場)"); 40 // 調用封裝了元素的SearchPage類中的「出發」日期輸入框元素 41 SearchPage.startData(driver).sendKeys("2019/07/06"); 42 // 調用封裝了元素的SearchPage類中的「返回」日期輸入框元素 43 SearchPage.returnData(driver).sendKeys("2019/07/07"); 44 // 調用封裝了元素的SearchPage類中的「搜索」按鈕元素 45 SearchPage.searchButton(driver).click(); 46 } 47 48 @AfterEach 49 void tearDown() throws Exception { 50 Thread.sleep(2000); 51 driver.quit(); 52 } 54 }
3、在「案例演示」中咱們只封裝了查找元素的方法,但爲了調用方便,咱們能夠將輸入動做或者點擊動做一併進行封裝,進一步簡化測試類中的代碼量網站
將「出發地」文本框元素輸入進行封裝:ui
封裝後調用:url
若是有不明白的小夥伴能夠加羣「555191854」問我,羣裏都是軟件行業的小夥伴相互一塊兒學習。
內容具備連慣性,未標註的地方能夠看前面的博客,這是一整套關於ava+selenium自動化的內容,從java基礎開始。
歡迎關注,轉載請註明來源。