PageObject模式的层次结构

做过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不是唯一的,也不是什么真理,根据自己环境拿出一套合适的方案才是目标。

时间: 2024-12-08 23:33:59

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

PageObject模式实现页面元素分离

Page Object模式 Page Object将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 1.例如没有使用Page Object模式时对于163邮箱的登录操作代码如下: packagecom.test; importorg.openqa.selenium.By; importorg.openqa.selenium.WebDriver; importorg.openqa.selenium.WebElement; importorg.openqa.seleni

PageObject模式

今天有时间就把之前写的selenium+java的代码整理了一下,之前代码里面到处都充斥着driver.findElement(By.xpath(""))这样的语句,看着很不舒服,所以就利用PageObject处理了一下. 就目前我对PageObject的认识:就相当于把页面操作元素封装到一个对象里面,然后在注解里面加上元素位置(个人的见解) 下面展示自己的一个demo: 这样子页面看起来干净一些了,目前做的太浅,后面会努力一点点把自动化做好

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

如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...) 前言 在UI自动化测试中,PO是目前最为主流,也是公认最佳的设计模式 UI自动化测试最初是通过关键字驱动+数据驱动的形式来实现,然后升级到PO模式 什么是关键字驱动 简单而言,就是将Seleniu

Selenium WebDriver 之 PageObjects 模式 by Example

目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Selenium2.0 WebDriver 之 Page Objects模式. 项目配置 maven 3, pom.xml配置如下 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>s

PageObject设计模式进行自动化用例的设计方法

关于PageObject模式进行自动化代码的编写: PageObject简而言之理解就是:一个页面作为一个类,页面中所有的元素均作为类中的方法 当然PageObject也是一种分层思想. 以Python登录163邮箱举例: BrowserDriver作为打开浏览器驱动的一个方式 Page是所有的页面组成的一个包 Testcase就是实际的测试用例 1.Page中存在一个基本的page类,所有的页面类都需要继承的类:这样写的好处就是元素一旦修改,UI界面发生变化,我仅需修改我的page就行,不影响

掌握设计模式之装饰者模式

![](http://ww4.sinaimg.cn/large/006tNc79ly1g4ztauvhzej30p00dw45p.jpg) ## 前言 当应用开发中,我们要为一个对象在原有功能上进行扩展增强时,往往采用继承的方式,而继承过多时就会使得功能类更加复杂,不利于维护,而设计模式中装饰者模式可以帮助我们更好对应这种场景,装饰者模式可以做到让对象能够动态地进行功能扩展,而不影响其他对象. 那究竟它是如何实现的呢,又如何实际应用呢,就让我们一起来学习下这个模式吧. ## 模式定义 装饰者模式

有赞分层自动化测试实践

1. 背景 先理一下自动化测试的概念,从广义上来说,一切通过工具(程序)的方式来代替或者辅助手工测试的行为都可以成为自动化.从狭义上来说,通过编写脚本的方式,模拟手工测试的过程,从而替代人工对系统的功能进行验证. 有赞是一家互联网行业的创业公司,测试起步较晚,发布非常频繁,就算每次只回归核心功能,对人数极少的几个测试人员来说工作量巨大,且基本是重复劳动,极其枯燥,持续时间长了也容易出错. 所以初期我们测试自动化切入的思路非常简单:从实际用户的角度出发,模拟真实的操作,替代现有的手工测试用例的执行

[小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory &amp; 团队构建

本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读下来并动手实践的话,我相信你应该可以模拟日常工作中80%常见的手动测试用例了.请注意:我的用词是模拟用例,而不是书写自动化测试用例.一个企业级的自动化测试的构建不是单靠Selenium一种技术就能Hold住的.所谓模拟指的是只能实现自动化的某个Case,但是不能工程化的使用.在本人所接触过几家公司的自动化测试

自动化测试框架中关于selenium api的二次封装

不多说,直接看代码如下: #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.desired_capabilities import DesiredCapabilities class webutils(): def __init__(self, browser='fi