为什么需要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不是万灵药,也不是唯一真理,提高测试案例可读性,避免案例步骤冗余才是终极目标。

 
欢迎大家加入分层自动化测试QQ群20442181一起讨论

为什么需要Page Object?的更多相关文章

  1. Selenium的PO模式(Page Object Model)[python版]

     Page Object Model 简称POM  普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...

  2. 使用page object模式抓取几个主要城市的pm2.5并从小到大排序后写入txt文档

    #coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...

  3. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  4. Page Object Model (Selenium, Python)

    时间 2015-06-15 00:11:56  Qxf2 blog 原文  http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...

  5. 【C#|.NET】从细节出发(三) 逻辑层事务和page object模式

    一. 业务逻辑层的事务问题 如果你的程序分层清晰并且系统禁用复杂存储过程,那么在DA中的职责比较单一.程序的逻辑通过BLL调用各种不同模块的DA来实现数据操作.如果当需要不同模块在一个事务的时候,问题 ...

  6. 浅析selenium的page object模式

    selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...

  7. Page Object 模式编写UiAutomator脚本

    在我们学习Page Object Model之前,我们先了解一下Page Object Model(以下简称POM). 为什么要POM 用UiAutomator启动UI自动化测试不是一件困难的任务.你 ...

  8. selenium page object model

    Page Object Model (POM) & Page Factory in Selenium: Ultimate Guide 来源:http://www.guru99.com/page ...

  9. Python+Selenium使用Page Object实现页面自动化测试

    Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...

随机推荐

  1. xml 解析 Xstream

    1.概述 json 解析可以使用gson包解为现成的对象,那么xml可以不可以用现成的包解析成java的对象呢? 带着这个问题,查询了一些材料找到了Xstream解析方法,确实可以完成这种思考,只是实 ...

  2. Android-Ant自动编译打包android项目 -- 2 ----签名与渠道包

    上篇介绍了怎么使用ant自动编译打包现有的android项目,这篇将继续介绍如果如何在ant打包应用的时候加入签名信息以及自动打包渠道包. 1. 加入签名信息: 在项目的根目录下建一个ant.prop ...

  3. C#内存操作

    原文:[转]C#内存操作 最近闲来无事发现周围的朋友都在玩<植物大战僵尸>的游戏!于是动了制作这游戏工具的念头!虽然在网上同类工具很多 但是用C#写的我几乎看不到!所以我想用C#写一个!  ...

  4. python魔术方法

    在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的 ...

  5. 10-3[RF] feature selection

    main idea: 计算每一个feature的重要性,选取重要性前k的feature: 衡量一个feature重要的方式:如果一个feature重要,则在这个feature上加上noise,会对最后 ...

  6. linux 学习之九、Linux 磁盘与文件系统管理(3)

    原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php#filesys 创建大文件以制作 loop 装置文件!(练习非常有用) ...

  7. JavaScript单线程

    首先浏览器的js引擎是单线程的,执行一个耗时操作必定阻碍线程后续代码的执行(比如等待网络请求的响应).一些语言采用了开一个子线程并把耗时操作放到子线程去执行的办法解决了这个问题.js引擎本身不支持多线 ...

  8. C# System.Guid.NewGuid() 【转】

    概念 GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算 ...

  9. WinEdt7.0 初试

    刚刚开始学的时候,安装就出了些问题(关于安装的问题,请看我之前的文章)不知道如何点击运行,编译.看了些博客论坛.终于成功了. 首先先写一个小代码: \documentclass[UTF8]{ctexa ...

  10. 使用win8时删除自带的输入法的好方法

    无直接把那个语言都删了,再直接装输入法就行了.