Page-object思想介绍
PageObject 就是页面对象,是一种程序设计模式,将面向过程转变为面向对象,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。
为什么要使用page-object?
可以使代码复用,集中管理元素对象,降低维护成本,提高程序可读性和编写效率。
使用page-object使脚本分层及实战
PageObject应该怎么使用呢?基于测试实践,我们一般这样应用:
把页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),把UI自动化分为了对象库层,操作层和业务层。PO思想对界面交互细节进行了封装,这样可以使测试案例更关注业务,而非界面细节,提高了测试用例的可读性 把每个要测试的对象封装在一个page内, 这个page里包含这个对象可能的所有操作。
通过FindBy每一个页面元素都被定义为一个类中的私有变量
对页面元素的初始化
PageFactory.initElements(driver,this);
如下是以测试邦网址为例实现page-object分层
直接看代码
1、page基类
package com.testerbang.pages;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import com.testerbang.utils.TestNGListener;
public class Page {
public WebDriver driver;
public Page(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);//
}
}
2、页面page类
package com.testerbang.pages;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Mys extends Page{
public Mys(WebDriver driver) {
super(driver);
// TODO Auto-generated constructor stub
}
//发布博文
@FindBy(linkText="发布博文")
private WebElement release;
public void openReleaseLink() {
release.click();
}
}
3、test类
package com.testerbang.testng;
import org.testng.annotations.Test;
import com.testerbang.pages.Mys;
import com.testerbang.pages.Page;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.AfterTest;
public class ArticleAction {
public WebDriver driver;
public static String currentPath = System.getProperty("user.dir");
@Test
@Parameters({"session_user","JSESSIONID"})
public void login(String session_user,String JSESSIONID) {
driver.manage().deleteAllCookies();
Cookie ck1 = new Cookie("JSESSIONID",
JSESSIONID);
Cookie ck2 = new Cookie("session_user", session_user);
driver.manage().addCookie(ck1);
driver.manage().addCookie(ck2);
driver.get("http://www.testerbang.com:8001/testerbang_blog/");
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
Reporter.log("登录pass!");
}
@Test
public void article() throws InterruptedException {
Mys mys = new Mys(driver);
mys.openReleaseLink();
System.out.println("点击发布博文按钮");
}
@BeforeTest
public void beforeTest() {
System.setProperty("webdriver.chrome.driver", currentPath + "/tools/chromedriver.exe");
this.driver = new ChromeDriver();
this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
this.driver.get("http://www.testerbang.com:8001/testerbang_blog/front/login.html");
this.driver.manage().window().maximize();
}
@AfterTest
public void afterTest() {
this.driver.close();
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有