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的自动化的更多相关文章

  1. [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects - 设计模式

    写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...

  2. Java+Selenium+Testng自动化测试学习(二)

    Java+Selenium+TestNG自动化测试框架整合 1.简化代码 封装一个定位元素的类,类型为ElementLocation package com.test; import org.open ...

  3. selenium+Python(Page Object 设计模式实例)

    以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...

  4. Selenium - WebDriver: Page Objects

    This chapter is a tutorial introduction to page objects design pattern. A page object represents an ...

  5. Python+selenium之Page Object设计模式

    Page Object是selenium自动化测试项目开发实践的最佳设计模式之一,他主要提现在对界面交互细节的封装,这样可以使测试案例隔你给加关注于业务而非界面细节,从而提高测试案例的可读性. Pag ...

  6. java+Selenium+TestNg搭建自动化测试架构(1)实现代码和数据的分离

    1.主要介绍介绍Java+Selenium+POM的自动化测试框架的搭建,第一个首先实现代码和账号URL等信息的分离.第二点支持跨浏览器,通过读取配置文件的方式实现. 1)将账号URL等信息添加在pr ...

  7. java+Selenium+TestNg搭建自动化测试架构(3)实现POM(page+Object+modal)

    1.Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例 ...

  8. Selenium关于Page Objects

    介绍页面对象设计模式.一个页面对象表示在你测试的web页面用户交互的界面. 使用页面对象模式的有点: 创建可重用的代码可以在多个测试用例中使用 减少重复的代码量 如果用户界面改变,只需要修改一个地方 ...

  9. java+Selenium+TestNg搭建自动化测试架构(2)实现跨浏览器功能

    1.切换浏览器类:其中包含了切换浏览器的方法,以及关闭浏览器,设置等待时间,以及重写的断言方法 package com.rrx.framework; import java.io.IOExceptio ...

随机推荐

  1. MySQL MyISAM和Innodb表生成序列

    目录 背景 分析 测试 结论 背景 应用端需要生成依次递增的序列来做流水序号等,方案有1.redis /MySQL SEQUENCE引擎生成序列:2.MySQL中myisam表 replace int ...

  2. Building Applications with Force.com and VisualForce(Dev401)( 九):Designing Applications for Multiple Users: Putting It All Together

    Module Objectives1.Apply profiles, organization wide defaults, role hierarchy and sharing to given a ...

  3. TensorFlow v2.0的基本张量操作

    使用TensorFlow v2.0的基本张量操作 from __future__ import print_function import tensorflow as tf # 定义张量常量 a = ...

  4. arcgis server10.7修改打印模板后前台调用不生效

    在10.5.1及之前的版本中,如果更改打印地图模板,如字体设置,那么直接修改[ArcGIS for Server 安装目录]/Templates/ExportWebMapTemplates下的mxd的 ...

  5. iOS 重构AppDelegate

    一.Massive AppDelegate AppDelegate 是应用程序的根对象,它连接应用程序和系统,确保应用程序与系统以及其他应用程序正确的交互,通常被认为是每个 iOS 项目的核心. 随着 ...

  6. Java中性能优化的45个细节

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时 ...

  7. TensorFlow报错module 'tensorflow' has no attribute 'xxx'解决办法

    原因:TensorFlow2.0版本修改了许多函数名字 tf.sub()更改为tf.subtract() tf.mul()更改为tf.multiply() tf.types.float32更改为tf. ...

  8. [noip模拟]种花<快速幂+结论>

    描述: OI太可怕了,我决定回家种田.我在后院里开辟了一块圆形的花圃,准备种花.种花是一种艺术,通过一定技术手法,花材的排列组合会让花变得更加的赏心悦目,这就是花艺.当然你知道,我在种田之前是OIer ...

  9. [noip模拟]计蒜姬<BFS>

    Description 兔纸们有一个计蒜姬,奇怪的是,这个计蒜姬只有一个寄存器X.兔纸们每次可以把寄存器中的数字取出,进行如下四种运算的一种后,将结果放回寄存器中.1.X=X+X2.X=X-X3.X= ...

  10. HTML特殊转义字符——特殊符号

    干货,见下图: 后期我会陆续更一些JavaScript的文章,大家可以一起学习交流.