自动化测试从零到一
第二章 什么是POM设计模式
一、POM是什么?为什么要有POM
页面对象模式
PO核心理念:将操作的测试用例以页面为单位来进行类的划分。目的也是在维护管理过程中,将各个页面的操作分类进行管理。
使用面向对象的设计模式,页面对象模型将测试代码和被测试的页面的页面元素及其操作方法进行分离,以此降低页面元素变化对测试代码的影响。
每一个被测试页面都会被单独定义为一个类,类中会定位所有需要进行测试操作的页面元素对象,并且定义操作页面元素对象的方法。
PO 模式使用
创建PageObject类封装一个页面元素和操作方法。
使用@FindBy注解定义页面元素
使用pageFactory类的intelements方法初始化页面元素。
封装操作元素的方法。
PO模式更多体现的是将某个页面中操作的对象和动作封装起来的思想,并不一定非要使用seleium提供的方式实现,通过关键字实现也能达到同样的效果,出发点都是减少代码的维护工作量。
选择合理的自动化框架
采用java语言+采用testNG测试框架+allure测试报告+logger日志ci/cd持续集成
一个成熟的设计模式,肯定是有一些原则性的东西,在编写代码的时候根据原则直接写出代码
二、POM编写原则
– 用公共方法代表页面提供的功能–封装一个basepage
– 不要暴露页面元素到外部
– 一般不要在方法内断言
– 方法应该返回其他PO对象(可以是其他页面,或者是断言数据等)
– 不需要封装页面所有的元素
– 同样的行为不同的结果可以封装成不同的方法,方便后续调用,不然不便于统计。
三、代码实战。
// 面向对象
public class frontLogin {
public static void main(String[] args) {
WebKeyword web =new WebKeyword();
web.openBrowser("chrome");
web.visitURL("https://ecshop.test2.shopex123.com/");
//1、登录
web.click("//a[text()='登录']");
web.input("//input[@id='username']","13111111111");
web.input("//input[@id='password']","123456");
web.click("//a[@name='submit']");
web.click("//a[text()='地址管理']");
web.click("//span[text()='增加新地址']");
web.click("//select[@id='province']");
web.halt("1");
web.runJsWithElement("scrollIntoView()","//option[text()='山东省']");
web.runJsWithElement("click()","//option[text()='山东省']");
}
// PageObject
public class AdminPageTest {
public static void main(String[] args) {
AdminPage admin=new frontLogin ();
admin.openBrowser("chrome");
admin.visitURL(https://ecshop.test2.shopex123.com/");
admin.LoginAdmin("admin","123456");
admin.toAddMenu();
admin.addRandomGoods();
UserPage user=new UserPage();
user.setDriver(admin);
user.visitURL("https://ecshop.test2.shopex123.com/");
user.loginUser();
user.closeBrowser();
}
}