Selenium2(java)页面对象模型(Page Object) 八
2016-01-27 22:09
531 查看
在开发一个 Selenium WebDriver 测试,我们可以使用页面对象模型。这个模型可以使测
试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来。对象模型也提供了一个注释,帮助缓存远程,避免出现元素过期的问题。
新建一个page包和一个test包用于存放测试用例
在page包中新建一个BDPage.java用于存取元素
具体代码:
具体代码:
新建测试类:HaoSouPageTest.java
具体代码:
package test;
ResultPage.java : 存储页面元素以及相关操作
HaoSouPageTest: 执行测试,检查结果
HaoSouPage.java
具体代码:
ResultPage.java
具体代码:
HaoSouPageTest.java
具体代码:
试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来。对象模型也提供了一个注释,帮助缓存远程,避免出现元素过期的问题。
分类页面元素
新建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(); } }
相关文章推荐
- Objective-C与JavaScript交互的那些事
- RemObjects SDK 9.0 Beta_CodeFirst
- Objective-C 通知
- Error: while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file
- Objective-C 单例
- JSON对象中的JSONObject和JSONArray以及与Map、String、数组的转化
- Objective-C特性:Runtime
- org.hibernate.NonUniqueObjectException: a different object with the same identifier value was ...
- python object类
- 对 removeObject 的理解
- node之object-assign
- Android小问题:String转换Json,以及org.json.JSONObject与org.json.JSONArray相互添加
- JSONObject 类
- Could not find MessageBodyWriter for response object of type: application/json
- 理解 Objective-C Runtime
- iOS开发系列—Objective-C之Foundation框架
- MockObject
- JavaScript values and Objective-C objects
- Objective-C中的instancetype和id关键字
- object_id()说明