Selenium2(java)页面对象模型(Page Object) 八
在开发一个 Selenium WebDriver 测试,我们可以使用页面对象模型。这个模型可以使测
试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来。对象模型也提供了一个注释,帮助缓存远程,避免出现元素过期的问题。
分类页面元素
- 新建java项目selenium_po,导入testng和selenium类库
- 新建一个page包和一个test包用于存放测试用例
- 在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) 八的更多相关文章
- selenium 的页面对象模型Page Object
页面对象模型page object model是selenium中的一种脚本设计模式,它能将页面元素封装起来,与业务操作分隔开, 在页面变化改变时,无需去修改业务逻辑代码,提高脚本维护的效率. 1.p ...
- selenium2 页面对象模型Page Object
开发Selenium WebDriver测试时,可以使用页面对象模型,这样可使得测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.同时页面对象模型也提供了一个注释,帮助缓存远程,避免出现元素 ...
- Selenium3+python自动化014-自动化常用设计模式页面对象模型 (Page Object)
一.概 念: PO(Page Object)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 二.优点可以使代码复用,降低维 ...
- 页面对象(Page Object)模式
内容转载自 https://www.cnblogs.com/yytesting/p/6973474.html 页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可 ...
- java+Selenium+TestNg搭建自动化测试架构(3)实现POM(page+Object+modal)
1.Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例 ...
- 5.8 页面对象(Page Object)模式
页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率,是中级自动化测试工程师的必备技能之一. 1.页面 ...
- Selenium+java - Page Object设计模式
前言 Page Object(页面对象)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一 ...
- 通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化
Page Objects 设计模式 简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位.业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试 ...
- Python+Selenium使用Page Object实现页面自动化测试
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...
随机推荐
- UVa 816 Abbott的复仇(BFS)
寒假的第一道题目,在放假回家颓废了两天后,今天终于开始刷题了.希望以后每天也能多刷几道题. 题意:这道BFS题还是有点复杂的,给一个最多9*9的迷宫,但是每个点都有不同的方向,每次进入该点的方向不同, ...
- 引入bootstrap
下载bootstrap的min.css文件,下载地址为:http://www.bootcss.com/ 你也可以去bootstrap中文站上去下载和学习: http://v3.bootcss.com/ ...
- 用Date.ToString()输出中英文月份
DateTime.Now.ToString("dddd,dd MMMM,yyyy")//输出 星期三,30 一月,2008DateTime.Now.ToString(" ...
- Android音频系统之AudioFlinger(二)
1.1.1 音频设备的管理 虽然AudioFlinger实体已经成功创建并初始化,但到目前为止它还是一块静态的内存空间,没有涉及到具体的工作. 从职能分布上来讲,AudioPolicyService是 ...
- Bootstrap环境及屏幕适配-(一)
一.环境搭建 1.目录结构 需要引用的文件有, jquery.js.bootstrap.min.js 和 bootstrap.min.css 文件,下面看下在线的文档Hello Word <!D ...
- sql语句优化之not in
多表关联想查a表中除去b表的可用not exists 效率比not in 更高 优化后的语句用时0.421秒 select john.*, (case when round((case john.su ...
- jQuery.Autocomplete实现自动完成功能-搜索提示功能
$(function(){ var availableTags=["ads","abc","acc"]; $("#tags&quo ...
- Jquery 源码学习
https://www.youtube.com/watch?v=qeMFEz_ufZc http://stackoverflow.com/questions/7194784/analysing-the ...
- Selinux是什么?
在新的基于RHEL一般都自带了selinux,多数情况下我们把selinux禁用了,事实上既然RHEL要集成它,必然有他的优点和长处,我们通过下文来了解selinux,也许你会喜欢用上它. 英文原文来 ...
- 基于Keepalvied的Mysql主主漂移(切换)
Keepalived实现原理:Keepalived详细介绍简介 实验环境 Master1.Amoeba--IP:192.168.1.5 Master2---IP:192.168.1.10 同时安装ke ...