章節十5、2-PageObjectModel

1、在實現自動化過程當中,會有不少重複的代碼,咱們在維護代碼時會很困難,若是想解決這個問題,咱們就須要使用PageObjectModel(頁面對象模型)的方式來進行自動化代碼的書寫。前端

 

2、案例演示java

以該網站的機票預訂操做爲例:https://www.expedia.com/?siteid=100001&langid=2052&currency=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&currency=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基礎開始。

歡迎關注,轉載請註明來源。

相關文章
相關標籤/搜索