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到底能有多少个字段

    今天技术讨论群里 “一切随遇而安”同学看书时出现一个疑问,一个MySQL的表中到底可以有多少个字段?带着这个疑问,我们展开了探讨,也接着讨论了一个单字段长度的问题. 1.  官方文档说明 官方文档的内 ...

  2. Java 添加、删除Excel表单控件

    通过表单控件,用户可以快速地将数据填写到模板文档中,轻松引用单元格数据并与其进行交互.本文通过Java代码示例介绍如何在Excel表格中添加表单控件,包括文本框.单选按钮.复选框.组合框.微调按钮等: ...

  3. 【SQL SERVER重新认识】数据内部存储结构简单探索

    数据库经常需要打交道,但是从来没想过数据库内部是如何存储数据. 今天探索一下数据库内部如何存储数据,从下面几个方面探索 数据库内部如何存储数据 索引数据如何存储 操作数据对存储影响 总结 数据库内部如 ...

  4. 什么是CPU load

    最近经常收到告警,CPU load大于阈值告警.查看系统的CPU是12核,告警阈值设置的是8.对于CPU load一直有个模糊的概念,具体是什么意思还真搞不明白,趁这个机会好好搞搞究竟. 1.查看CP ...

  5. 解决使用requests_html模块,html.render()下载chromium报错、速度慢问题

    来源:https://www.cnblogs.com/xiaoaiyiwan/p/10776493.html 稍作修改 1.第一步,代码如下: from requests_html import HT ...

  6. JavaScript 异步、栈、事件循环、任务队列

    概览 我们经常会听到引擎和runtime,它们的区别是什么呢? 引擎:解释并编译代码,让它变成能交给机器运行的代码(runnable commands). runtime:就是运行环境,它提供一些对外 ...

  7. 快速创建Flask Restful API项目

    前言 Python必学的两大web框架之一Flask,俗称微框架.它只需要一个文件,几行代码就可以完成一个简单的http请求服务. 但是我们需要用flask来提供中型甚至大型web restful a ...

  8. [leetcode] 树(Ⅱ)

    All questions are simple level. Construct String from Binary Tree Question[606]:You need to construc ...

  9. NKOJ3775 数列操作

    问题描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式 第一行包含三个整数n ...

  10. Codeforces Round #565 (Div. 3)--D. Recover it!--思维+欧拉筛

    D. Recover it! Authors guessed an array aa consisting of nn integers; each integer is not less than ...