通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化
Page Objects 设计模式
简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位、业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试
Page Objects实现的方法
1、@FindBy()注解
@FindBy(id=" "),id也可以换位xpath、name、textlink等
通过此注解实现元素定位
2、功能实现
通过自定义的方法,来实现具体的业务逻辑
pageFactory
page object 类主要实现页面对象的初始化,负责把页面对象加单化。
PageFactory类提供的方法都是静态的,可以直接调用,
PageFactory.initElements(WebDriver driver, java.lang.Class<T> pageClassToProxy)
我的实际设计思想是:
三层:
1、编写BasePage.java
该类主要作用是把所有测试的页面公共的方法抽出来单独包装
2、编写具体的某个页面对象类,例如:Login.java
该类主要是对某个测试页面元素的定位、和业务逻辑实现;该类需要继承BasePage类
3、使用testNG编写具体测是类,例如:TestLogin.java
最后通过testNG 的xml文件实现测试用例(即方法)的执行
下面是通过登录操作实现page Objects的设计思想:
BasePage.java
public class BasePage {
WebDriver driver;
String pageTitle;
Actions action;
public BasePage(WebDriver driver) {
this.driver = driver;
action = new Actions(this.driver);
this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
//打开一个指定的url
public void my_open(String url) {
// 浏览器最大化
this.driver.manage().window().maximize();
this.driver.get(url);
Reporter.log("打开网址:" + url);
}
// 点击操作
public void my_click(WebElement element) {
try {
element.click();
Reporter.log("点击:" + my_getResult(element));
} catch (Exception e) {
System.out.println(e);
}
}
//文本款输入指定的值
public void my_input_text(WebElement element, String text) {
try {
element.sendKeys(text);
Reporter.log("文本框输入的值为:" + text);
} catch (Exception e) {
e.printStackTrace();
}
}
}
LoginSpEnterprise .java
public class LoginSpEnterprise extends BasePage {
public LoginSpEnterprise(WebDriver driver) {
super(driver);
}
// 定位页面元素
@FindBy(id = "assistid")
WebElement useName;
@FindBy(id = "userid")
WebElement useId;
@FindBy(id = "passWord")
WebElement passWord;
@FindBy(xpath="//input[@value='登录']")
WebElement login_button;
//业务操作
public void login(String username,String userid,String password) {
//输入用户名
my_input_text(useName, username);
//输入用户id
my_input_text(useId, userid);
//输入密码
my_input_text(passWord, password);
//点击登录
my_click_button(login_button);
}
}
testNG测试类:TestLoginSpEnterprise.java
有2点需要注意:
1.driver对象需要指定为静态变量,这样就能保证,在整个测试过程中,driver的传递是唯一的
2.LoginSpEnterprise ls = PageFactory.initElements(driver, LoginSpEnterprise.class);
此处就是实现 LoginSpEnterprise登录页面对象的初始化,如果有多个页面对象需要执行,则下一个测试类里面页面对象的初始化则变为:OpenMerchat om =PageFactory.initElements(TestLoginSpEnterprise.driver,OpenMerchat.class);
public class TestLoginSpEnterprise {
public static WebDriver driver;
@DataProvider
public Object[][] lg(){
return new Object[][] {
// {"","admin","a111111"},
// {"fan1","","a111111"},
{"fan1","admin","a111111"},
};
}
@Test(dataProvider="lg",description="测试登录自服务平台")
public void testLogin(String username,String userid,String password) {
LoginSpEnterprise ls = PageFactory.initElements(driver, LoginSpEnterprise.class);
ls.my_open("http://10.10.178.152:8080/spEnterprise/authenticationPos!login.action");
ls.login(username, userid, password);
}
@BeforeClass
public void beforeClass() {
System.setProperty("webdriver.chrome.driver", "E:\\workspace\\seleniumSource\\lib\\chromedriver.exe");
driver = new ChromeDriver();
}
}
通过testNG.xml实现测试方法的执行
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="线下代理商自服务UI自动化">
<listeners>
<listener class-name="dong.test.Untils.TestngListener" />
</listeners>
<test name="登录页面测试">
<classes> <class name="dong.test.PO.TestLoginSpEnterprise"> <methods>
<include name="testLogin"></include>
</methods> </class>
</classes>
</test>
</suite>
通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化的更多相关文章
- [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects - 设计模式
写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...
- Java+Selenium+Testng自动化测试学习(二)
Java+Selenium+TestNG自动化测试框架整合 1.简化代码 封装一个定位元素的类,类型为ElementLocation package com.test; import org.open ...
- selenium+Python(Page Object 设计模式实例)
以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...
- Selenium - WebDriver: Page Objects
This chapter is a tutorial introduction to page objects design pattern. A page object represents an ...
- Python+selenium之Page Object设计模式
Page Object是selenium自动化测试项目开发实践的最佳设计模式之一,他主要提现在对界面交互细节的封装,这样可以使测试案例隔你给加关注于业务而非界面细节,从而提高测试案例的可读性. Pag ...
- java+Selenium+TestNg搭建自动化测试架构(1)实现代码和数据的分离
1.主要介绍介绍Java+Selenium+POM的自动化测试框架的搭建,第一个首先实现代码和账号URL等信息的分离.第二点支持跨浏览器,通过读取配置文件的方式实现. 1)将账号URL等信息添加在pr ...
- java+Selenium+TestNg搭建自动化测试架构(3)实现POM(page+Object+modal)
1.Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例 ...
- Selenium关于Page Objects
介绍页面对象设计模式.一个页面对象表示在你测试的web页面用户交互的界面. 使用页面对象模式的有点: 创建可重用的代码可以在多个测试用例中使用 减少重复的代码量 如果用户界面改变,只需要修改一个地方 ...
- java+Selenium+TestNg搭建自动化测试架构(2)实现跨浏览器功能
1.切换浏览器类:其中包含了切换浏览器的方法,以及关闭浏览器,设置等待时间,以及重写的断言方法 package com.rrx.framework; import java.io.IOExceptio ...
随机推荐
- Qt 的信号与槽(纯干货)
接触Qt断断续续有些时间了,总看了一堆的文章说信号槽的概念,心里就想骂人,做为一个初学者,最重要的就是怎么写代码,写代码写多了,再去看理论,有时水到渠成的就明白那些理论了.但所有讲信号槽的都把一堆信号 ...
- Python-标准模块与第三方模块
标准模块 python官方自己的模块 os os与os.path os.chdir('desktop') 跳转至指定目录 os.listdir() ...
- TensorFlow系列专题(八):七步带你实现RNN循环神经网络小示例
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! [前言]:在前面的内容里,我们已经学习了循环神经网络的基本结构和运算过程,这一小节 ...
- 重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!
近日,知名开源社区Github上有个名为DSFD(Dual Shot Face Detector)的算法引起了业内关注,它正是来自于腾讯优图.目前,该算法已经被计算机视觉顶级会议CVPR 2019接收 ...
- 非常诡异的IIS下由配置文件加上svg的mime头导致整个网站的静态文件访问报错误
调试了两天遇到一个非常诡异的问题 一个系统稳定运行了很多年,是用mvc5+WIN2008R2 + .NET 4.5 +IIS环境下运行,非常稳定,最近想迁移到一台新的服务器,为了少麻烦在阿里云上买了 ...
- spring boot 装载自定义yml文件
yml格式的配置文件感觉很人性化,所以想把项目中的.properties都替换成.yml文件,蛋疼的是springboot自1.5以后就把@configurationProperties中的locat ...
- 深入理解NIO(四)—— epoll的实现原理
深入理解NIO(四)—— epoll的实现原理 本文链接:https://www.cnblogs.com/fatmanhappycode/p/12362423.html 终于来到最后了,万里长征只差最 ...
- [bzoj4977]跳伞求生<贪心>
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4977 这是八月月赛的一道题,月赛的时候和同学讨论了一下,最后由一位叫二哥的大佬率先AC,用 ...
- Python库的安装方式
Python库的安装方式 1.Python库的自定义安装——找到相应网站,下载安装 示例:pywin32库安装 .exe,直接双击,自动识别安装目录 安装就可以了. 载入成功 2.Python库的工具 ...
- vi文本编辑器的学习
vi文本编辑器的启动与退出 启动:快捷键Ctrl+Alt+t进入终端, 在系统提示符($或#)的提示下,输入vi <文件名称>,可以自动载入你要编辑的文件或者新建一个文件. 退出:在指令模 ...