为什么需要Page Object?
Page Object(PO)是界面自动化验收测试中的一个常见模式,要和@槽神刘叫兽探讨一下PO的必要性,顾写这篇小文表达一下我的观点。
PO的主要价值体现在对界面交互细节的封装,这样可以使测试案例可以更关注与业务而非界面细节,提高测试案例的可读性,这其实都很有利Behavior Driven Development(BDD),Acceptance Test Driven Development(ATDD)或Specification By Example(SbE)的实施。
举个小例子,例如,我有个身份信息页面,需要输入姓名,年龄,性别,身份证号等信息,如果不用PO,那么我的测试用例可能是这样的(java+selenium):
driver.findElement(By.name("name_field")).sendKeys("God");
driver.findElement(By.name("age_field")).sendKeys("99999");
driver.findElement(By.name("sex_field")).sendKeys("unknown");
driver.findElement(By.name("social_id_field")).sendKeys("invalid");
可以看到,上述语句除了业务之外,包含许多实现层面的噪音,即便使用BrowserBot模式对这些噪音进行分装,但是测试案例也会包含四个步骤:
MySendKeyByName("name_field","God");
MySendKeyByName("age_field","99999");
MySendKeyByName("sex_field","Unknown");
MySendKeyByName("social_id_field","invalid");
噪音经过使用BrowserBot模式大为降低,但是,还是有一些,如界面id等。如果使用PO模式,测试案例可以得到进一步简化,
IDPage.InputBasiicInfo(“God”,”99999”,”Unknown”,”invalid”);
这其实就形成了自己的针对特定应用的测试DSL,封装了大量界面交互细节,提升测试案例的可读性。
使用PO之后的另外一个大好处,就是有助于降低冗余,如果我需要在10个案例里面都输入身份信息,那么我不需要将这个4个步骤重复写10遍,而是只需要调用InputBasicInfo十次即可,这将极大降低未来的案例维护成本。
因此,PO的威力在一个测试人员自己写主场景测试案例时是不容易体会到的,因为,他不需要和开发、业务交流案例,他也不会写很多重复动作。但是,我相信,当他真正开始尝试ATDD,BDD或SbE时,当他开始写一些重要的异常分支流程时,当他开始为新需求频繁维护修改案例时,我想他会更意识到PO的作用。
最后一句,PO不是万灵药,也不是唯一真理,提高测试案例可读性,避免案例步骤冗余才是终极目标。
为什么需要Page Object?的更多相关文章
- Selenium的PO模式(Page Object Model)[python版]
Page Object Model 简称POM 普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...
- 使用page object模式抓取几个主要城市的pm2.5并从小到大排序后写入txt文档
#coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- Page Object Model (Selenium, Python)
时间 2015-06-15 00:11:56 Qxf2 blog 原文 http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...
- 【C#|.NET】从细节出发(三) 逻辑层事务和page object模式
一. 业务逻辑层的事务问题 如果你的程序分层清晰并且系统禁用复杂存储过程,那么在DA中的职责比较单一.程序的逻辑通过BLL调用各种不同模块的DA来实现数据操作.如果当需要不同模块在一个事务的时候,问题 ...
- 浅析selenium的page object模式
selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...
- Page Object 模式编写UiAutomator脚本
在我们学习Page Object Model之前,我们先了解一下Page Object Model(以下简称POM). 为什么要POM 用UiAutomator启动UI自动化测试不是一件困难的任务.你 ...
- selenium page object model
Page Object Model (POM) & Page Factory in Selenium: Ultimate Guide 来源:http://www.guru99.com/page ...
- Python+Selenium使用Page Object实现页面自动化测试
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...
随机推荐
- 动态规划-Burst Balloons
Burst Balloons Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it ...
- sshd服务---暴力破解应对策略
sshd服务暴力破解步骤 sshd暴力破解方法 防止暴力破解调优 1. 变更默认端口 2. 变更root用户 3. 日志监控-->防止暴力破解(fail2ban应用) fail2ban详解 在初 ...
- tempo 2.0 学习记录
最近在做项目时使用了tempo,感觉还不错,但是发现网上对于tempo 2.0 的介绍比较少,我也是在GitHub才找到了比较完整的使用说明,我也简单记录一下自己的使用过程,重新学习一下tempo 2 ...
- Aix6.1安装openssh
一.软件下载 1.官方网站下载: openssl IBM官方网站下载:https://www14.software.ibm.com/webapp/iwm/web/reg/download.do?sou ...
- javascript实现小九九乘法口诀
<!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...
- html表格单元格设置背景颜色
- input模糊搜索功能
<!doctype html> <meta charset="utf-8"> <style type="text/css"> ...
- Mschart绘制图表之X轴为时间的设置方式
最近使用C#开发图表,比较了DirectorChart,DontNetCharting,TeeChart,最终选用微软的mschart开发,对于X轴作为时间轴探索了好久,终于实现了想要的效果. 界面效 ...
- C++中重载、重写(覆盖)和隐藏的区别实例分析
这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...
- android:visibility
RelativeLayout android:visibility="gone/visible/invisible" 此属性意思是此视图是否显示 例如RelativeLayout中 ...