selenium中PO模式(Page Object Model)小结

1. PO模式的概念  

  Page Object是selenium目前比较流行的一种设计模式。它将页面做为一个对象,为每个页面设计一个类class,这个类中封装了测试中须要用到的元素的获取方法和对这些元素的操做方法。写测试用例时,只要调用页面对象中的属性和方法,就能够操做元素以执行用例。java

  Page Object Model很好地利用了java面向对象和封装的思想,对页面细节交互的操做进行封装,那么咱们在写测试用例的时候,能够更加专一于页面而不是界面细节。设计模式

2. PO模式的优势

  1)提升了测试代码的可读性;浏览器

  2)下降测试代码的维护成本,当页面中的测试方法须要调整,咱们只要去对应的页面类下进行调整便可;而传统的测试代码模式,全部页面的元素获取、元素操做和测试用例都是在一块儿的,维护起来相对不方便;函数

  3)减小了代码的重复;测试

3. PO模型代码示例

  以搜索功能的测试用例为例,如下举例中,我将该页面分红了三个类:this

    page类:封装获取执行搜索测试时,须要用到的元素的定位方法;spa

    pageHandle类:封装对元素的操做方法,例如,点击元素、在元素上悬停、在元素中输入内容等一系列常规操做;设计

    pageBusiness类:经过调用pageHandle类中的方法,对测试时具体须要执行的业务操做进行封装;code

 

    page类:对象

package com.hizuche.page;

import com.hizuche.base.BaseDriver;
import com.hizuche.util.LocateWay;
import org.openqa.selenium.WebElement;

/**
 * @Author mac
 * @Description: 获取页面中各元素的定位方法,并返回出去
 * @date: Create in 2018/10/18 16:39
 */

/*构造函数传入建立对象时所指定的浏览器驱动driver*/
public class Page extends BasePage {
    public Page(BaseDriver driver) {
        super(driver);
    }

    /**
     * 获取【公司车辆】-搜索条件-车牌号搜索框的元素定位方法
     * @return 返回车牌号搜索框的定位方法
     */
    public WebElement getCarNo() {
        //为了减小代码冗余,定义了findElement方法为元素定位方法
        return findElement(LocateWay.getLocateWay("car_no"));
    }

    /**
     * 获取【公司车辆】-搜索条件-车架号搜索框的元素定位方法
     * @return 返回车架号搜索框的定位方法
     */
    public WebElement getVin() {
        return findElement(LocateWay.getLocateWay("vin"));
    }

    /**
     * 获取【公司车辆】-搜索按钮的元素定位方法
     * @return 返回搜索按钮的元素定位方式
     */
    public WebElement getSearchBtn() {
        return findElement(LocateWay.getLocateWay("searchCarBtn"));
    }
}

 

 pageHandle类:

package com.hizuche.handle;

import com.hizuche.base.BaseDriver;
import com.hizuche.page.Page;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;

/**
 * @Author hp
// * @Description: CompanyCarPageHandle类,定义了对【公司车辆】页面中元素的操做,如点击、输入等
 * @date: Create in 2018/10/18 17:51
 */
public class PageHandle {

    public BaseDriver driver;
    public Page page;
    public WebDriver driver1;
    public Actions action;
  
    public PageHandle(BaseDriver driver) {
        this.driver = driver;
        page = new Page(driver);
    }

    /**
     * 在【公司车辆】-车牌号搜索框中,输入搜索内容
     * @param car_no 传入搜索车牌号的关键字参数
     */
    public void inputCarNo(String car_no) {
        page.sendKeys(page.getCarNo(),car_no);
    }

    /**
     * 在【公司车辆】-车架号搜索框中,输入搜索内容
     * @param vin 传入搜索车架号的关键字参数
     */
    public void inputVin(String vin) {
        page.sendKeys(page.getVin(),vin);
    }

    
    /**
     * 在【公司车辆】中点击搜索按钮
     */
    public void clickSearchBtn() {
        page.click(page.getSearchBtn());
    }
}

 

  pageBusiness类:

package com.hizuche.business;

import com.hizuche.base.BaseDriver;
import com.hizuche.handle.PageHandle;

public class PageBH {
    public BaseDriver driver;
    public PageHandle pageHandle;
    public PageBH(BaseDriver driver) {
        this.driver = driver;
        pageHandle= new PageHandle(driver);
    }

    /**
     * 封装【公司车辆】的搜索操做
     */
    public void searchCompanyCar() throws Exception {
        /*调用PageHandle类中的方法,在车牌号搜索框中输入浙A59关键字*/
        pageHandle.inputCarNo("浙a59");
        pageHandle.inputVin("LDp");
        
        /*在页面中点击搜索按钮*/
        pageHandle.clickSearchBtn();
        Thread.sleep(500);
    }
  } 

  这样在实际测试的时候,只要直接调用PageHandleBH类,就能够执行测试用例,对于搜索框、搜索按钮的元素定位方法,以及业务上的操做,所有封装在了对应的类中。若是其中一个方法发生变化,只要找到对应页面的操做层进行改动便可。做为selenium的初学者来说,PO设计模式是一种分层合理、逻辑清晰的设计方式,推荐在初学时就造成这种良好的用例设计习惯。

相关文章
相关标签/搜索