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();
    }
}
时间: 2024-08-10 02:09:59

Selenium2(java)页面对象模型(Page Object) 八的相关文章

Page Object实例(一) - Java + Selenium 登录163邮箱

Page Object 是什么: Page Object是Selenium2开始提供的一种代码设计模式. 其核心思想是把web页面的元素查找及操作和页面测试分离开. 这样之后的更新和维护中如果有页面元素变动, 不需要修改测试类, 只要修改其对应的页面元素的查找代码即可. 登录163邮箱的实例包括: 其中: 1. LoginPage.java 是主要测试页面, 包括查找元素, 操作元素实现登录 2. HomePage.java 是登录成功后会跳转到的页面, 在此用来作为登录操作方法的返回值及拿个元

Python+Selenium使用Page Object实现页面自动测试 -未完待续

Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况. 当页面元素id变化时,只需要更改测试页Class中页面的属性即可. Page Object模式是一种自动化测试设计模式,将页面定位和业务操作分开,提高用例的可维护性. unittest是一种单元测试

Page Object页面设计模式核心要点

  Page Object,页面对象.一种设计模式,实施selenium的最佳实践,体现了web应用与页面显示之间的关系.为什么需要Page Object?测试代码维护的需要:减少代码的编码量,减少代码的维护量,清晰而明确的业务测试流程. Page Obje实现了测试代码的分层:页面元素.元素操作 和 页面业务的分离. 1.基础类 全局公共配置方法2.页面类 页面业务+元素集合3.用例层 关注数据和业务流程4.增加测试用例1(增加商品). 测试用例2(删除商品) 5.代码解耦 用例1和用例2公共

python+selenium自动化软件测试(第7章):Page Object模式

什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页面中的元素对象,比如输入用户名的输入框,输入登陆密码的输入框,登陆按钮,这个页面的url等,而方法,主要是指这个页面可以提供的具体功能.为什么选择POM?我们先看一段简单的代码如下: from selenium import webdriver import time driver = webdri

转:WebDriver(Selenium2) 判断页面是否刷新的方法

Java代码   public static boolean waitPageRefresh(WebElement trigger) { int refreshTime = 0; boolean isRefresh = false; try { for (int i = 1; i < 60; i++) { refreshTime = i; trigger.getTagName(); Thread.sleep(1000); } } catch (StaleElementReferenceExcep

浅析selenium的page object模式

selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的提现java的面向对象和封装特性,首先看一下官网的解释: Page Object Design Pattern Page Object is a Design Pattern which has become popular in test automation for enhancing tes

Page Object封装思想

文章来源:http://blog.csdn.net/zhenyu5211314/article/details/13632083 Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况.当页面元素id变化时,只需要更改测试页Class中页面的属性即可. 获取

页面对象模型

简介 Page Object Model:页面对象模型,是Selenium中的一种测试设计模式,一个页面对象代表用户界面交互测试的一个区域. 使用page object来实现:测试.逻辑.数据.驱动相互分离. 使用页面对象模式的好处: 创建可重用的代码,可以跨多个测试用例共享 减少重复代码的数量 如果用户界面更改,只需要修改一个地方 定位器 定位器将定位的字符串和使用它们的地方分隔开来,将来开发修改了定位的方式和字符串只用来改该文件 locators.py如下: from selenium.we

安卓自动化测试:Robotium(二)page object 模式完善测试框架

1.目前比较流行的设计模式就是page object,page object就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的提现java的面向对象和封装特性2.具体思想:测试框架分为四大类1)编写抽象父类:建立Utils包,存放工具类,用于自动完成唤醒手机.解锁.登录等前置操作,之后的用例只需继承抽象父类即可2)提取控件ID类:在工程中建立从com.pacagename.test.elements包用例存放控件ID类.命名一般以Element开头,后面接Ac