Selenium2(java)页面对象模型(Page Object) 八

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium2(java)页面对象模型(Page Object) 八相关的知识,希望对你有一定的参考价值。

在开发一个 Selenium WebDriver 测试,我们可以使用页面对象模型。这个模型可以使测

试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来。对象模型也提供了一个注释,帮助缓存远程,避免出现元素过期的问题。

分类页面元素

  1. 新建java项目selenium_po,导入testng和selenium类库
  2. 新建一个page包和一个test包用于存放测试用例
  3. 在page包中新建一个BDPage.java用于存取元素

具体代码:

package page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class BDPage {

    //定义元素变量
    /**定义百度搜索的输入框*/
    @FindBy(id="kw")
    @CacheLookup    
    public WebElement keyword_input;
    
    /**定义百度搜索的搜索按钮*/
    @FindBy(id="su")
    @CacheLookup
    public WebElement search_button;
    
    //创建一个构造函数,并且调用PageFactory.initElements()方法来初始化元素。换句话说,将元素映射到我们定义好的变量上。
    public BDPage(WebDriver driver) {
        
        PageFactory.initElements(driver, this);
    }

}

 

分离页面操作

新建页面类:HaoSouPage.java

具体代码:

package page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class HaoSouPage {

    /**输入框*/
    @FindBy(name="q")
    @CacheLookup
    private WebElement HSP_INPUT_KEYWORD;
    
    /**搜索按钮*/
    @FindBy(id="search-button")
    @CacheLookup
    private WebElement HSP_BUTTON_SEARCH;
    
    //定义测试地址
    private final String url = "http://www.haosou.com/";
    private static WebDriver driver;
    
    //提供一个外部获得driver的方法
    public WebDriver getDriver(){
        
        return driver;
    }
    
    public void HaoSoupage() {
        
        driver = new FirefoxDriver();
        PageFactory.initElements(driver, this);
    }
    
    public void close() {
        
        driver.quit();
    }
    
    public void openUrl() {
        driver.get(url);
    }
    
    //输入关键字selenium并点击查询
    public void searchByKeyword() {
        HSP_INPUT_KEYWORD.sendKeys("test");
        HSP_BUTTON_SEARCH.click();
    }
}

 

新建测试类:HaoSouPageTest.java

具体代码:

package test;

import org.testng.annotations.Test;
import page.HaoSouPage;

public class HouSouPageTest {
  @Test
  public void searchTest() {
   
   //实例化haosou页面对象模型
   HaoSouPage hsp = new HaoSouPage();
   
   //使用页面封装的打开链接方法
   hsp.openUrl();
   
   //使用页面封装的输入操作
   hsp.searchByKeyword();
   
   //使用页面封装的退出操作哦
   hsp.close();
  }
}

 

页面嵌套对象:

HaoSouPage.java :存储页面元素,相关操作以及嵌套ResultPage对象

ResultPage.java : 存储页面元素以及相关操作

HaoSouPageTest: 执行测试,检查结果

 

HaoSouPage.java

具体代码:

package com.po.page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class HaoSouPage {

    /**@描述:好搜输入框*/
    @FindBy(name="q")
    @CacheLookup
    private WebElement HSP_INPUT_KEYWORD;
    /**@描述:好搜搜索按钮*/
    @FindBy(id="search-button")
    @CacheLookup
    private WebElement HSP_BUTTON_SEARCH;
    //定义测试地址
    private final String url = "http://www.haosou.com/";
    private static WebDriver driver ;
    //提供一个外部获得driver的方法
    public static  WebDriver getDriver(){
        return driver;
        }

    //构造方法初始化元素
    public void HaoSouPage(){
        driver = new FirefoxDriver();
        PageFactory.initElements(driver, this);
        }

    //包装退出方法
    public void close(){
        driver.quit();
        }

    //打开网址
    public void openUrl(){
        driver.get(url);
        }

    //输入关键字selenium并点击查询,并且返回到搜索界面
    public ResultPage searchByKeyword(String keyword){
        HSP_INPUT_KEYWORD.sendKeys(keyword);
        HSP_BUTTON_SEARCH.click();
        return new ResultPage();
        }
    }

 

ResultPage.java

具体代码:

package com.po.page;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.Assert;

public class ResultPage {
    /**搜索结果界面的搜索框*/
    @FindBy(id="keyword")
    @CacheLookup
    private WebElement RP_INPT_KEYWORD;

    //构造方法初始化元素
    public ResultPage(){
        PageFactory.initElements(HaoSouPage.getDriver(), this);
        }

    /**验证输入框的字是不是Selenium*/
    public void checkKeyword(){
        //Assert是TestNG提供的一个断言操作,assertEquals(实际值,期望值),判断两个值是不是相等的。
        Assert.assertEquals(RP_INPT_KEYWORD.getAttribute("value"), "selenium");
        }
    }

 

HaoSouPageTest.java

具体代码:

package com.po.testcase;
import org.testng.annotations.Test;
import com.po.page.HaoSouPage;

public class HaoSouPageTest {
    @Test
    public void searchTest(){
    //实例化haosou页面对象模型
    HaoSouPage hsp =new HaoSouPage();
    //使用页面封装的打开链接方法
    hsp.openUrl();
    //使用页面封装的输入操作,验证搜索结果输入框页面的值是不是selenium
    hsp.searchByKeyword("selenium").checkKeyword();
    //使用页面封装的退出操作
    hsp.close();
    }
}

以上是关于Selenium2(java)页面对象模型(Page Object) 八的主要内容,如果未能解决你的问题,请参考以下文章

使用参数动态创建视图模型而不使用autofac

页面模型导入

selenium2学习:Page object

使用java在Selenium WebDriver(Selenium 2)中向上或向下滚动页面

Selenium2(java)selenium常用API 四

selenium2调用iedriver打开ie为啥点页面超链接没有反应呢