通过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 ...
随机推荐
- 特征选择与稀疏学习(Feature Selection and Sparse Learning)
本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...
- pd库dataframe基本操作
一.查看数据(查看对象的方法对于Series来说同样适用) 1.查看DataFrame前xx行或后xx行 a=DataFrame(data); a.head(6)表示显示前6行数据,若head()中不 ...
- Redis 缓存更新一致性
当执行写操作后,需要保证从缓存读取到的数据与数据库中持久化的数据是一致的,因此需要对缓存进行更新. 因为涉及到数据库和缓存两步操作,难以保证更新的原子性. 在设计更新策略时,我们需要考虑多个方面的问题 ...
- 字节转换函数 htonl*的由来与函数定义...
字节转换字符由来: 在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端, intel处理器将32位的整数分4个连续的字节,并以字节序1-2- ...
- latex中文支持ubuntu
latex安装: sudo apt install texlive-full 中文字体安装: sudo apt-get install latex-cjk-all 字体包中包含bsmi,bk ...
- ASP.NET Core Authentication and Authorization
最近把一个Asp .net core 2.0的项目迁移到Asp .net core 3.1,项目启动的时候直接报错: InvalidOperationException: Endpoint CoreA ...
- 使用wrd2vec构建推荐系统
概览 完整的代码可以从这里下载: https://github.com/prateekjoshi565/recommendation_system/blob/master/recommender_2. ...
- 分库分表实践-Sharding-JDBC
最近一段时间在研究分库分表的一些问题,正好周末有点时间就简单做下总结,也方便自己以后查看. 关于为什么要做分库分表,什么是水平分表,垂直分表等概念,相信大家都知道,这里就不在赘述了. 本文只讲述使用S ...
- 《java编程思想》一切都是对象
1. 用引用操纵对象 在Java中一切皆对象,我们平常在对java中的类进行操作时,其实操作的不是对象本身而是对象的引用.我们可以将这想象成用遥控器(引用)操作电视机(对象),只要握住这个遥控器,就能 ...
- 1048 Find Coins (25分)
Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...