做过UI自动化的都晓得,在做UI自动化时定位特别依赖页面,一旦页面发生变更就不得不跟着去修改页面定位。

在webdriver中,假设你想对一个元素定位操作,那么你可能会编写下面的代码:
driver.findElement(By.id("ad")).click();
发现问题:
你有10个地方对这个元素做了这个操作,哪天这个控件的元素变了,你就不得不去修改10个地方。
那么,有什么好的方法来解决这个问题呢?
这就是PageObject模式的引入的必要性。
那到底什么是PageObject模式?
PageObject 见名思意思,就是页面对象,也就是把界面定位和业务操作分开,在我现在团队我推行的是三层模式,把UI自动化分为了对象库层,操作层和业务层。PO思想对界面交互细节进行了封装,这样可以使测试案例更关注业务,而非界面细节,提高了测试案例的可读性,同样也可以为我后期BDD(Behavior Driven Deveopment)的推行打好基础。
 
废话这么多来看个例子吧:
假设我现在要做一个登陆操作,那么我创建一个对象库层:
 
public class LoginPage{
    public static By userName = By.name("userName");
    public static By pwd = By.name("passWord");
    public static By login=By.id("login");
}
 
 操作层:
public void inputUser(String name, String pwd) {
    driver.findElement(LoginPage.userName).sendKeys(name);
    driver.findElement(LoginPage.pwd ).sendKeys(pwd);
}
 
业务层:
@Test
public void login(){
    login.inputUser("username","pwd");
    tools.click("点击【登录】",login);
}
 
很容易从上面的案例可以看出,PO模式引入前后的区别:

当然减少UI自动化脚本的维护,提高测试案例的可读性方式很多的,PO不是唯一的,也不是什么真理,根据自己环境拿出一套合适的方案才是目标。

PageObject模式的层次结构的更多相关文章

  1. 浅谈pageobject模式

    先来看两段代码 代码1: package com.zlshuo.selenium.nonaming.pageobject; /** * @author leshuo * @version 2014年5 ...

  2. Cypress系列(62)- 改造 PageObject 模式

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html PO 模式 PageObject(页面对 ...

  3. 基于UiAutomator2+PageObject模式开展APP自动化测试实战

    前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...

  4. Selenium系列(二十) - PageObject模式的详细介绍

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  5. 【python+selenium的web自动化】- PageObject模式解析及案例

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html PO模式 ​ Page O ...

  6. 【Python + ATX】之uiautomator2 PageObject模式自动化框架学习

    参考文章: 感谢:cynic (linpengcheng) <ATX 基于 ATX-Server 的 UI 自动化测试框架> <ATX-uiautomator2 实现 webview ...

  7. PageObject模式简介

    一.原理 将页面元素定位和对元素的操作行为封装成一个page类,实现对页面对象和测试用例的分离. 一条测试用例可能需要多个步骤操作元素,将每个步骤单独的封装成一个方法,在执行测试用例的时候调用封装好的 ...

  8. 【Selenium07篇】python+selenium实现Web自动化:PO模型,PageObject模式!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第七篇博 ...

  9. Selenium WebDriver 之 PageObjects 模式 by Example

    目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Sele ...

随机推荐

  1. SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  2. HashSet非常的消耗空间,TreeSet因为有排序功能,因此资源消耗非常的高,我们应该尽量少使用

    注:HashMap底层也是用数组,HashSet底层实际上也是HashMap,HashSet类中有HashMap属性(我们如何在API中查属性).HashSet实际上为(key.null)类型的Has ...

  3. 【BZOJ】1024: [SCOI2009]生日快乐(dfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1024 果然现在弱到连搜索都不会了么..... 一直想二分...但是无论如何也推不出怎么划分... Q ...

  4. noip2014滚粗记

    滚粗了..伤心. day0:和baba一起去,但是整天都是下雨啊好不爽,鞋子都湿了啊好不爽,注定是要滚粗?在火车站等了1h后上动车走人...在此期间我还天真的认为火车站的wifi可以被我给破解然后上网 ...

  5. jquery获取设置input值

    $("#input").val("123"),注意val()这个函数$("#input").val("123"),//给 ...

  6. poj_1125 Floyd最短路

    题目大意 N个股票经纪人,每个股票经纪人都会将得到的消息传播给另外一些股票经纪人,传播的速度均不固定,且从A传到B的速度和B传到A的速度不一定相等.给定一个消息,并不一定能够传遍所有的股票经纪人,因为 ...

  7. 【BZOJ3120】Line 矩阵乘法

    [BZOJ3120]Line Description Wayne喜欢排队……不对,是Wayne所在学校的校长喜欢看大家排队,尤其是在操场上站方阵.某日课间操时,校长童心大发想了一个极具观赏性的列队方案 ...

  8. 【BZOJ3033】太鼓达人 暴力+欧拉回路

    [BZOJ3033]太鼓达人 Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员 ...

  9. chrome/FF 解析遇到 { 行为一致,返回不一致

    测试的时候,发现一个问题,FF下: chrome 下: 你会发现,FF 在解析一直到返回的时候,都是把 {x:1} 当做一个语句块去解析的,而 chrome 在返回的时候返回了对象,把 {x:1} 当 ...

  10. Linux云服务器下Tomcat部署超详细

    基于阿里云Centos 7服务器的Tomcat 项目部署 工具:一台安装jdk1.8的Centos 6/7.X 云服务器(64位) Putty  ssh远程连接云服务器的软件 FileZillaCli ...