0.1---selenium+java自动化测试进阶01---PageObject设计模式
一、PageObject设计模式
1、简介
PageObject设计模式,又称页面对象模式,是使用Selenium的广大同行最为公认的一种设计模式。在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。我们通常为每个页面定义一个类,并为每个页面的属性和操作构建模型。采用分层的设计,这样UI界面定位元素属性值的更改不会影响各个层次的代码,减少代码重复,提高测试代码的可读性和可维护性。
2、分层设计
PageObject设计模式,主要分为三层,元素层、操作层、业务层。元素层主要对各个页面的元素进行封装,调用findELement()方法,返回WebElement类型的元素。操作层主要封装每个界面元素对应的操作,常见的操作有点击、输入等。业务层是对每个功能对应的业务流程进行实现,主要是将操作层的各个测试操作串接起来,形成一个功能流程。
除此之外,还需要使用case层封装测试用例,调用业务层的流程方法。base层主要用于封装driver,工具包用于读取元素的定位信息文件。
二、PageObject实现步骤
1、编写自动化测试用例
在编写用例的过程中应该遵循以下几点原则:
(1)一个脚本是一个完整的场景,从用户登录操作到用户退出系统关闭浏览器。
(2)一个脚本只验证一个功能点,不要试图用户登录系统后把所有的功能都进行验证再退出系统。
(3)尽量只做功能中正向逻辑的验证,不要考虑太多逆向逻辑的验证,逆向逻辑的情况很多(例如:手机号输错有很多种情况),验证一方面比较复杂,需要编写大量的脚本,另一方面自动化脚本本身比较脆弱,很多非正常的逻辑的验证能力不强(我们尽量遵循用户正常使用原则编写脚本即可)。
(4)脚本之间不要产生关联性,也就是说编写的每一个脚本都是独立的,不能依赖或影响其他脚本。
(5)如果对数据进行了修改,需要对数据进行还原。
(6)在整个脚本中只对验证点进行验证,不要对整个脚本每一步都做验证。
关于用例的存放与维护大概分为两类,一类通过word、excel等文档工具实行编写与维护,如:QC、禅道项目管理等自带的有用例编写与维护工具。因为自动化测试用例对执行的步骤有着更苛刻的要求,所以使用excel描述是一个不错的选择。
此处利用126邮箱的登录、发邮件、搜索邮件进行用例设计,测试用例分为:动作、数据和验证点几个部分,动作用于描述要如何操作;数据是这一步操作所用到的数据,验证点是这一步操作完成需要验证的信息。
用例001:
|
用例id |
testLogin.java |
用户登录与退出 |
|
|
步骤 |
动作 |
数据 |
验证点 |
|
1 |
打开登录页 |
http://www.126.com |
|
|
2 |
用户登录 |
Username 123456 |
匹配用户昵称 |
|
3 |
用户退出 |
用例002:
|
用例id |
testSend.java |
发送邮件 |
|
|
步骤 |
动作 |
数据 |
验证点 |
|
1 |
打开邮箱 |
http://www.126.com |
|
|
2 |
用户登录 |
Username 123456 |
|
|
3 |
写信 |
只输入收信人、主题和正文发送 |
发送成功 |
|
4 |
退出 |
用例003:
|
用例id |
testSearch.java |
搜索邮件 |
|
|
步骤 |
动作 |
数据 |
验证点 |
|
1 |
打开邮箱 |
http://www.126.com |
|
|
2 |
用户登录 |
Username 123456 |
|
|
3 |
搜索邮件 |
输入搜索关键字 |
显示“搜索结果” |
|
4 |
退出 |
2、编写自动化测试脚本
在编写脚本的过程中主要涉及的步骤如下:
(1)编写测试用例
(2)进行模块化设计:针对部分脚本都需要用到的操作进行模块化设计,公共操作单独写一个方法,在需要的测试脚本中进行调用。
(3)参数化:将用例脚本中要用到的数据提出来放到文件中或者testNG提供的@DataProvider()定义的对象数组中,保证测试用例与数据脱离,不受测试数据更改的影响。
(4)编写脚本并运行,输出测试结果。testNG提供测试报告,查看地址在工作空间的text-output文件夹下,我的参考目录如下;
file:///E:/eclipse/workspace/mypro/test-output/emailable-report.html
file:///E:/eclipse/workspace/mypro/test-output/Suite1/Test1.html
三、分层结构实现
1、实现步骤
(1)搭建maven项目,配置项目需要的包,selenium、log4j、TestNG等
(2)分层设计,创建不同层次对应的包。base层、元素层、操作层、业务层、用例层、工具包
(3)封装driver
(4)封装常用的操作方法。findElement、by、click、sendKeys等
(5)封装读取文件的方法。
(6)顺序编写元素层、操作层、业务层、用例层代码
(7)运行项目生成测试报告
2、分层设计
(1)层次划分

(2)项目目录结构

(3)各层次用途:
- 1. base 层:封装基础API
- |-----SelectDriver:根据浏览器选择返回对应的driver;
- |-----DriverBase:构造driver ,生成driver对象;并封装WebDriver类型的driver调用的函数(findElement()、get()、设置窗口大小等)
- |-----ByMethon:封装By,使用静态stastic方法,调用时直接使用类名+方法名
- 2.配置文件loginElement.properities:存储元素位置信息的文件
- 3.util工具类:封装读取文件操作
- 4.Page:封装测试功能 页面元素
- |----BasePage:封装Webelement类型元素对应的操作(element()、click()、sendKeys());
- 5.Handle: 操作层,封装功能常用的测试操作
- 6.Business: 封装基础业务操作 (编写校验函数,校验测试用例的执行情况)
- 7.Case:封装每个功能业务的用例
- |----CasePage:输入浏览器名称,初始化driver.
0.1---selenium+java自动化测试进阶01---PageObject设计模式的更多相关文章
- Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)
TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...
- 0.1---selenium+java自动化测试进阶02----项目实战之登录代码重构
一.测试登录功能实现 以慕课网的登录为例,分析登录的功能需求,编写测试用例,找到要定位的元素以及需要的操作,编写登录功能的测试代码.代码实现如下: public static void main(St ...
- selenium java 自动化测试 基于火狐浏览器/谷歌浏览器
:环境 java1.8+ieda 直接上代码 pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- cumber + selenium +java自动化测试
1.新建一个maven项目,pom文件为: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&quo ...
- Selenium+Java自动化测试的方法
1.设置等待时间Thread.sleep(2000); (1000代表1s)2.断言assertion:验证应用程序的状态是否同所期望的一致.常见的断言包括:验证页面内容,如标题是否为X或当前位置是否 ...
- Selenium+java自动化测试常用知识点
一.元素的定位 1.通过ID定位元素: findElement(By.id(element)); 2.通过元素的名称定位元素: findElement(By.name(element)); 3.通过元 ...
- Java自动化测试框架-02 - TestNG之理论实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)
理论 TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用 ...
- Java自动化测试框架-02 - TestNG之理论到实践
TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集 ...
- 『心善渊』Selenium3.0基础 — 30、UI自动化测试之POM设计模式
目录 (一)POM模式介绍 1.什么是POM介绍 2.为什么要使用POM模式 3.POM的优势 4.POM模式封装思路 (1)POM模式将页面分成三层 (2)POM模式的核心要素(重点) (3)总结 ...
随机推荐
- 软链接 vs. 硬链接
链接大家都用过,比如 Windows 中的快捷方式就是一种链接,可是 Linux 里又分硬链接和软链接,它们表示什么意思,又有什么区别呢,本文来给大家做一个解释. Inode 索引节点 要想理解硬链 ...
- 一,View中引用自定义Dialog组件
需求: 在项目中,有时候可能在不同画面需要完成同一功能,比如示例文件列表查看功能,系统上传文件,需要查看文件列表,以及文件历史记录 话不多说,上图 这个查看文件的Dialog需要在系统中的很多地方调用 ...
- opencv3学习1:opencv3.4.10与vs2017环境配置
原教程网址:https://jingyan.baidu.com/article/dca1fa6f13bd55f1a44052b9.html 具体教程网上很多,我也相信大家的搜素能力,作为一个初入C++ ...
- S32K142学习记录_SDK手动导入
这几天和一位工程师讨论ADC+PDB学到了很多,当然很多的时候都是我在听, 毕竟新手,顺便其中提出自己的疑问,讨论会让你学到很多 有空会将讨论整理出来 因为demo板还没有到,只能看着大佬的程序对着手 ...
- linux 多线程 信号
一个老系统的问题,用的system v消息队列同步等响应,通过alarm信号来进行超时控制.现在系统进行升级改造(所谓云化),原来进程处理的逻辑全部改成了线程框架,问题就出现了.alarm信号发出的时 ...
- Java IO(十二) 字符流 Writer 和 Reader
Java IO(十二) 字符流 Reader和 Writer 一.介绍 涉及到文件(如果是纯文本文件形式)操作时,Java除了提供 FIle(文件和目录路径名的抽象表示形式) 和 FileDescri ...
- (linux)Centos 7 xfsdump文件系统的备份和恢复
XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据.xfsdump 按inode顺序备份一个XFS文件系统. centos7选择xfs格式作为默认文件 ...
- 用python做时间序列预测一:初识概念
利用时间序列预测方法,我们可以基于历史的情况来预测未来的情况.比如共享单车每日租车数,食堂每日就餐人数等等,都是基于各自历史的情况来预测的. 什么是时间序列? 时间序列,是指同一个变量在连续且固定的时 ...
- 最新 iOS 框架整体梳理(一)
前言 这段话其实是我差不多写完文章之后再回过头来写的,原本在写文章之前想写一下写的初衷的,但当我写完之后感觉初衷没有收获更真切一些.其实到这篇为止总结出来的也就三十多个,有些是比较新的框架,有些是我们 ...
- Java 第十一届 蓝桥杯 省模拟赛 梅花桩
小明每天都要练功,练功中的重要一项是梅花桩. 小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1. 小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上.小 ...