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测试页面中可以通 ...
随机推荐
- 关于Stringbulider类
在使用String类构造一个字符串时,要给它分配足够的内存来保存字符串,但StringBuilder通常分配的内存会比需要的更多.开发人员可以选择显式指定StringBuilder要分配多少内存,但如 ...
- zf-启动项目报错Server 127.0.0.1 has no instance named dlx 解决办法
由于百度出来的看不明白,于是我就在群里问,吴善如经理说:你这个问题我上次给李宽看过,用端口连,把instance去掉 然后我去掉之后 项目过程能够成功运行了,原来是这样
- VI中的批量替换 (转载)
1) 文件内全部替换: :%s#abc#123#g (如文件内有#,可用/替换,:%s/abc/123/g) --注:把abc替换成123 (或者: %s/str1/str2/g 用s ...
- JS读RSS
<html> <head> <title>javascript读取RSS数据</title> <META content="t ...
- 在 WinCe 平台读写 ini 文件
在上篇文章开发 windows mobile 上的今日插件时,我发现 wince 平台上不支持例如 GetPrivateProfileString 等相关 API 函数.在网络上我并没有找到令我满意的 ...
- 【2013 ICCV】Abnormal Event Detection at 150 FPS in MATLAB
2. method 把每一帧变成不同尺度,并且把每一层分成互不覆盖的patch.连续的5帧堆叠在一起形成时空立方体.对时空立方体计算3D梯度特征[11].这些视屏序列中的特征,根据空间位置的相关性,进 ...
- 转:Visual Studio进行Web性能测试- Part III
原文作者:Ambily.raj 对于一个多用户的应用程序,性能是非常重要的.性能不仅是执行的速度,它包括负载和并发方面.Visual Studio是可以用于性能测试的工具之一.Visual Studi ...
- fragment 数据传递,通信
Fragment之间的通信 在本节中,你会学到 1.定义接口 2.实现接口 3.将消息传递给fragment 为了重用Fragment UI 组件,在设计中你应该通过定义每一个fragemnt自己 ...
- 项目发布到Tomcat8中报错 “Resource is out of sync..."
在eclipse中搜索时,搜索完之后有时候会弹出错误对话框,错误摘录如下:Resource is out of sync with the file system...... 分析:有时候因为时间紧迫 ...
- AIM Tech Round 3 (Div. 2)D. Recover the String(贪心+字符串)
D. Recover the String time limit per test 1 second memory limit per test 256 megabytes input standar ...