PageObject在UI自动化测试中的应用--Junit版
Posted mimihuhudeliwu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PageObject在UI自动化测试中的应用--Junit版相关的知识,希望对你有一定的参考价值。
pageObject以产品页面为单元,对每个页面page的元素进行封装,再进一步对每个页面的元素进行参数化,完成这些封装后,在执行测试用例时,用例中的业务场景包含的元素分布在各个页面,通过调用相关页面封装的类方法,并对相关元素输入测试参数,就可以方便快速执行用例,并且便于管理维护测试用例。
第一步:先把场景代码写完(例如:QQ邮箱登陆)
public class AUTOLogin { public static void main(String[] args) { // TODO Auto-generated method stub WebDriver driver = new ChromeDriver(); driver.get("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=qq%E9%82%AE%E7%AE%B1&rsv_pq=bcd7be330003bd22&rsv_t=f827%2F3ByNpHSATJDaN3zp54wpdUCgMQsbGSM%2FPh3PkJRJUTnkTLQK4Bq7Cc&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2"); driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS); driver.findElement(By.xpath(".//*[@id=‘content_left‘]/div[1]/h3/a")).click(); driver.findElement(By.id("ud")).sendKeys("XXXXXX"); driver.findElement(By.id("p")).sendKeys("XXXX"); driver.findElement(By.id("login_button")).click(); } }
第二步:PageObject设计模式的应用
PageObject模式,以页面为单元,将业务逻辑和测试分别封装
例子中QQ邮箱登陆的业务场景包含两个页面:1.百度搜索QQ邮箱页面;2.QQ邮箱登陆页面(只用登陆页面)
①元素封装
import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class LoginPage { //将页面元素封装成LoginPage类的属性 @FindBy(id = "ud") WebElement username_input; @FindBy(id = "p") WebElement password_input; @FindBy(id = "login_button") WebElement login_button; String url = "https://mail.qq.com/cgi-bin/loginpage"; public WebDriver driver; public LoginPage(WebDriver driver){ this.driver = driver; //PageFactory是页面工厂,用来初始化页面中的元素 PageFactory.initElements(driver, this); } public void open(){ driver.get(url); } public void inputUsername(String username){ username_input.sendKeys(username); } public void inputPassword(String password){ password_input.sendKeys(password); } public void clickLoginbutton(){ login_button.click(); } }
②测试封装
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import LoginPageDefine.LoginPage; public class LoginTest { static WebDriver driver; @BeforeClass public static void setUpBeforeClass() throws Exception { driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); } @AfterClass public static void tearDownAfterClass() throws Exception { Thread.sleep(10000); driver.quit(); } @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void test() { //实例化封装好的LoginPage类 LoginPage loginPage = new LoginPage(driver); //调用LoginPage类中open方法 loginPage.open(); //输入用户名、密码,提交,也可以进一步对用户名密码做参数化 loginPage.inputUsername("XXX"); loginPage.inputPassword("123456"); loginPage.clickLoginbutton(); //fail("Not yet implemented"); } }
以上是关于PageObject在UI自动化测试中的应用--Junit版的主要内容,如果未能解决你的问题,请参考以下文章
技术分享 | web自动化测试-PageObject 设计模式
微信小程序UI自动化测试实践:Minium+PageObject
python+selenium+unittest+pageobject学习记录
PageObject设计模式 在selenium 自动化测试里面的应用