Java+Selenium3框架设计准备篇9-用PageFactory实现POM
2017-07-19 15:51
567 查看
前面介绍了POM的优点和非POM方式写脚本,这篇介绍利用页面工厂类(page factory)去实现POM,通过查看PageFactory类,我们可以知道它是一个初始化一个页面实例的功能,在实例化该页面对象时候,也会一起实例化该页面的元素定位。直接来看看京东登录的例子,如果用POM实现,在测试脚本中实际代码就2行。
1.在pageObjects包新建一个京东主页类,代码如下
package pageObects;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class JdHomePage {
// 元素定位
//登录链接
@FindBy (id="ttbar-login")
WebElement login_link;
//账户登录
@FindBy (xpath="//*/div[@class='login-form']/div[2]/a")
WebElement login_withAccount;
//输入用户名框
@FindBy (id="loginname")
WebElement inputBox_username;
//输入密码
@FindBy (id="nloginpwd")
WebElement inputBox_password;
//登录按钮
@FindBy (id="loginsubmit")
WebElement login_submitBtn;
// 业务逻辑和操作方法
//登录方法
public void login(String username, String password){
login_link.click();
login_withAccount.click();
inputBox_username.sendKeys(username);
inputBox_password.sendKeys(password);
login_submitBtn.click();
}
}
2.在testSuites包下新建一个测试类
package testSuites;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import pageObects.JdHomePage;
public class TestWithPOM {
WebDriver driver;
@BeforeClass
public void setUp() throws Exception{
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.jd.com/");
Thread.sleep(2000);
}
@Test
public void testLogin(){
JdHomePage hp = PageFactory.initElements(driver, JdHomePage.class);
hp.login("user1", "123456");
}
}
处理打开浏览器和打开京东主页操作,实际测试登录的代码就2行对不对。这里我们借助了PageFactory类的方法,在初始化一个页面类的时候,也会一起把该页面定义的元素定位也会初始化,然后通过页面对象调用页面类的页面操作方法。这种方式,我们把元素定位和业务逻辑操作都写在了页面对象类中,测试脚本类,直接调用页面类的方法,这样的测试脚本看起来很简洁,方便阅读和维护,如果登录相关文案发生变更,我们只需要去改登录对应页面的元素定位和业务逻辑,不需要修改这个登录测试类。
1.在pageObjects包新建一个京东主页类,代码如下
package pageObects;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class JdHomePage {
// 元素定位
//登录链接
@FindBy (id="ttbar-login")
WebElement login_link;
//账户登录
@FindBy (xpath="//*/div[@class='login-form']/div[2]/a")
WebElement login_withAccount;
//输入用户名框
@FindBy (id="loginname")
WebElement inputBox_username;
//输入密码
@FindBy (id="nloginpwd")
WebElement inputBox_password;
//登录按钮
@FindBy (id="loginsubmit")
WebElement login_submitBtn;
// 业务逻辑和操作方法
//登录方法
public void login(String username, String password){
login_link.click();
login_withAccount.click();
inputBox_username.sendKeys(username);
inputBox_password.sendKeys(password);
login_submitBtn.click();
}
}
2.在testSuites包下新建一个测试类
package testSuites;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import pageObects.JdHomePage;
public class TestWithPOM {
WebDriver driver;
@BeforeClass
public void setUp() throws Exception{
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.jd.com/");
Thread.sleep(2000);
}
@Test
public void testLogin(){
JdHomePage hp = PageFactory.initElements(driver, JdHomePage.class);
hp.login("user1", "123456");
}
}
处理打开浏览器和打开京东主页操作,实际测试登录的代码就2行对不对。这里我们借助了PageFactory类的方法,在初始化一个页面类的时候,也会一起把该页面定义的元素定位也会初始化,然后通过页面对象调用页面类的页面操作方法。这种方式,我们把元素定位和业务逻辑操作都写在了页面对象类中,测试脚本类,直接调用页面类的方法,这样的测试脚本看起来很简洁,方便阅读和维护,如果登录相关文案发生变更,我们只需要去改登录对应页面的元素定位和业务逻辑,不需要修改这个登录测试类。
相关文章推荐
- Java+Selenium3框架设计准备篇8-POM简介
- Java+Selenium3框架设计准备篇5-TestNG实现日志输出
- Java+Selenium3框架设计准备篇2-TestNG通过变量实现启动不同浏览器测试
- Java+Selenium3框架设计篇5-如何实现邮件发送测试报告
- Java+Selenium3框架设计准备篇7-TestNG如何disable一些case
- Java+Selenium3框架设计准备篇6-TestNG执行测试方法依赖关系
- Java+Selenium3框架设计准备篇12-纯JAVA方法实现日志输出
- Java+Selenium3框架设计准备篇11-用Log4j实现日志输出
- Python+Selenium框架设计篇之7-进一步实现POM和可能遇到问题解决办法
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层
- 设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层
- Selenium框架所有用例打开一次浏览器方法实现(Java)
- 【Getty】Java NIO框架设计与实现
- Java+Selenium3框架设计准备篇10-用非PageFactory实现POM
- 一种Java日志系统框架的设计与实现(转)
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层
- 基于IOC的Java事件框架的设计与实现 Ⅱ