在开发一个 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) 八的更多相关文章

  1. selenium 的页面对象模型Page Object

    页面对象模型page object model是selenium中的一种脚本设计模式,它能将页面元素封装起来,与业务操作分隔开, 在页面变化改变时,无需去修改业务逻辑代码,提高脚本维护的效率. 1.p ...

  2. selenium2 页面对象模型Page Object

    开发Selenium WebDriver测试时,可以使用页面对象模型,这样可使得测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.同时页面对象模型也提供了一个注释,帮助缓存远程,避免出现元素 ...

  3. Selenium3+python自动化014-自动化常用设计模式页面对象模型 (Page Object)

    一.概 念: PO(Page Object)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 二.优点可以使代码复用,降低维 ...

  4. 页面对象(Page Object)模式

    内容转载自 https://www.cnblogs.com/yytesting/p/6973474.html 页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可 ...

  5. java+Selenium+TestNg搭建自动化测试架构(3)实现POM(page+Object+modal)

    1.Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例 ...

  6. 5.8 页面对象(Page Object)模式

    页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率,是中级自动化测试工程师的必备技能之一. 1.页面 ...

  7. Selenium+java - Page Object设计模式

    前言 Page Object(页面对象)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一 ...

  8. 通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化

    Page Objects 设计模式 简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位.业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试 ...

  9. Python+Selenium使用Page Object实现页面自动化测试

    Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...

随机推荐

  1. C#中Form窗体中读取EXCEL的数据

    使用OLEDB可以对excel文件进行读取,我们只要把该excel文件作为数据源即可 首先引用Microsoft.EXEL 代码如下: using System; using System.Colle ...

  2. 看unix高级编程时遇到apue.h找不到的问题

    最近学习 Unix 环境高级编程这本书,第一个例子就碰到了问题,下面是解决办法. 一开始看到这本书,刚翻了几页,就觉得对味.按照书中的代码做练习时,编译代码文件提示fatal error: apue. ...

  3. Quartz总结(四):动态修改定时器二

    前文:http://www.cnblogs.com/LiuChunfu/p/5598806.html 提到了一种动态修改定时器的方法, 其本质就是在job方法中注入Schedular的对象,从Sche ...

  4. JS和CSS加载(渲染)机制不同

    一.结论 CSS可以在页面加载完成后随时渲染.举个例子:通过js给某个元素加一个id或者css,只要这个id或者css有对应的样式,此元素的样式就会自动生效. JS不可以在页面加载完成后生效.最明显的 ...

  5. 【转】简单模拟angular的依赖注入

    原文:http://www.oschina.net/code/snippet_1181081_35136 代码片段 var angular = function(){}; Object.defineP ...

  6. ural1521 War Games 2

    War Games 2 Time limit: 1.0 secondMemory limit: 64 MB Background During the latest war games (this s ...

  7. ubuntux下apk反编译工具安装

    1,下载dex2jar工具.(http://download.csdn.net/detail/u013647453/8286693) 2,下载jd-gui工具(http://jd.benow.ca/) ...

  8. 转载:ionic+nodejs开发遇到的跨域和post请求数据问题

    转载自:http://www.cnblogs.com/ytu2010dt/p/5471366.html 最近学习ionic+nodejs开发混合app中遇到了一些问题,在此总结一下. 项目地址 htt ...

  9. shell之crontab

    一  crontab高级用法 Crontab 主要是在做排程, 通常一般寫法大概都是如下: 0 0 * * * /usr/local/www/awstats/cgi-bin/awstats.sh 這種 ...

  10. OPENCV形态学操作1

    形态学操作是指基于形状的一系列图像处理操作,包括膨胀,腐蚀,二值化,开运算,闭运算,顶帽算法,黑帽算法,形态学梯度等,最基本的形态学操作就是膨胀和腐蚀. 一.膨胀 首先需要明确一个概念,膨胀和腐蚀都是 ...