Page Object 设计模式介绍

Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性。

1、认识 Paget Object

Page Object 设计模式的优点如下:

  • 减少代码的重复;

  • 提高测试用例的可读性;
  • 提高测试用例的可维护性,特别是针对 UI 频繁变化的项目;

Paget Object 使用注意:

  • public方法代表Page提供的功能

  • 尽量不要暴露Page的内部细节
  • 不要assertion
  • 方法可以返回其他Page Objects
  • Page Objects不用代表整个页面,可以是任意一个部分
  • 一样的操作,不同的结果应该分开(正确登录,错误登录)

简单的说,Page Objects是指UI界面上用于与用户进行交互的对象。它可以指整个页面,也可以指Page上的某个区域。Page Objects是你的test code的交互对象,是对实际UI的一种抽象模型化。通过Page Objects可以减少重复代码的编写,例如,很多页面都有同样的header,footer,navigator等部分,如果对这些进行抽象,只写一次就可以在其他地方通用了。

当在为 Web 页面编写测试时,需要操作该 Web 页面上的元素进行操作。然而,如果在测试代码中直接操作 HTML 元素,那么你的代码是及其脆弱的,因为 UI 会经常变动。我们可以将一个 page 对象封装成一个 HTML 页面,可以通过提供的应用程序特定的 API 来操作页面元素,而不在 HTML 中四处搜寻。

page 对象的一个基本经验法则是,凡是人能做的事,page 对象通过软件客户端都能够做到。因此它也应当提供一个易于编程的接口并隐藏窗口中低层的部件。所以访问一个文本框应该通过一个访问方法(accessor method)来实现字符串的获取与返回,复选框应当使用布尔值,按钮应当被表示为行为导向的方法名。page 对象应当将在 GUI 控件上所有查询和操作数据的行为封装为方法。一个好的经验法则是,即使改变具体的控件,page 对象的接口也不应当发生变化。

尽管该术语是“页面”对象,但并不意味着需要针对每个页面建立一个这样的对象,例如页面有重要意义的元素可以独立为一个 page 对象。经验法则的目的在于通过给页面建模,从而对应用程序的使用者变得有意义。

2、Paget Object 实例

以 126 邮箱登录为例,通过 Page Object 设计模式来实现:

(1)首先创建 LoginPage.java 类

将登录界面LoginPage封装成对象;在包含主函数的类中直接调用;
分别定义了 126 邮箱首页的几个方法,用户名输入框,密码输入框,登录按钮;

package com.mypro.pom;
import ......

public class LoginPage {
    private static WebElement element = null;

    public static WebElement login_UserName(WebDriver driver){
        element = driver.findElement(By.id("idInput"));
        return element;
    }
    public static WebElement login_Password(WebDriver driver){
        element = driver.findElement(By.id("pwdInput"));
        return element;
    }
    public static WebElement login_Button(WebDriver driver){
        element = driver.findElement(By.id("loginBtn"));
        return element;
    }
}
(2)创建 mailLogin.java 类
package com.mypro.pom.test;
import ......

public class mailLogin {
    private static WebDriver driver = null;

    public static void login(WebDriver driver,String username,String password){
        LoginPage.login_UserName(driver).sendKeys(username);
        LoginPage.login_Password(driver).sendKeys(password);
        LoginPage.login_Button(driver).click();
    }
    public static void main(String[] args) throws InterruptedException {
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("http://www.126.com");

        Login(driver,"username","123456");
        Thread.sleep(5000);
        driver.quit();
        System.out.println("test case run end!");
    }
}

定义 login()方法的好处就是再创建测试用例的时只关心测试数据(用户名和密码),而不用考虑“登录”到底需要几个步骤。
一个有分歧的地方是 page 对象是否应自身包含断言,或者仅仅提供数据给测试脚本来设置断言。在page 对象中包含断言的倡导者认为,这有助于避免在测试脚本中出现重复的断言,可以更容易地提供更好的错误信息,并且提供更接近只做不问风格的 API。不在 page 对象中包含断言的倡导者则认为,包含断言会混合访问页面数据和实现断言逻辑的职责,并且导致 page 对象过于臃肿。我赞成在 page 对象中不包含断言,虽然我们可以通过为常用的断言提供断言库的方式来消除重复,这可以提供更好的诊断,但从站在用户的角度去自动化的观点来看,判断是否登录成功是用户需要做的事情,不应该交给页面对象层来完成。

使用 Page Object 模式之后的另外一个好处就是有助于降低冗余。如果需要在 10 个用例里面都输入不同用户名密码登录,那么用 main()方法写起来将会变得非常简便。因此,Page Object 模型的作用在一个测试人员自己写主场景测试案例时是不容易体会到的,因为你不需要和开发、业务交流案例,也不会写很多重复动作。但是,当你真正开始尝试 ATDD 或 BDD,当你开始写一些重要的异常分支流程时,当你开始为新需求频繁维护修改案例时,就会意识到 Page Object 的作用。

原文地址:https://www.cnblogs.com/davice/p/9444517.html

时间: 2024-08-03 03:12:14

Page Object 设计模式介绍的相关文章

Page Object设计模式实践

Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对象来对应页面的一个应用.故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型.体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试.减少代码重复,提高测试代码的可读性和可维护性. 下面将以登录qq邮箱为例,通过Page Object设计模式来实现.

python-selenium Page Object设计模式

Page Object是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理.可以使代码复用,降低维护成本,提高程序可读性和编写效率. #用page object思想实现百度首页的搜索和登陆功能 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time class BaiduPage():   

Page Object设计模式

1. 什么是框架 1.1 定义: 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件(类)及构件(类)实例间交互的方法. 1.2 为什么要搭建自动化测试框架 自动化测试的开发,通常是由自动化测试的需求决定的.这个需求主要包括: 自动化测试更便于实施 解决自动化测试脚本本身存在的问题,如异常处理和场景恢复. 测试易于维护.好的框架,可以减少你在管理维护中所投入的人力物力精力. 可重用性.框架的意义之一就在于可重用吧.所以在框架里,你可以实现一些通用功能,简化脚本开发过程. 

python+ selenium&APPium page Object 设计模式

题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录: Page Object Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对象来对应页面的一个应用.故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型.体现在对界面交互细节的封装,测试在更上层使用页

Page Object 设计模式-PO

1.传统测试用例实现的弊端: 易读性差 复用性差 可维护性差 扩展性差 2.PO 设计模式图: 3.Page Object 的核心要素: 抽象封装一个 BasePage 基类,基类应该拥有一个只想 webdriver 实例的属性: 每一个 page 都继承 BasePage,通过 driver 来管理(自己)page 中的元素(对象), 将 page 中的操作封装成一个个的方法 TestCase 继承 unitest.Testcase 类,并且依赖 page 类,从而实现相应的 teststep

Selenium_Page Object设计模式

Page Object 介绍 Page Object设计模式的优点如下: 减少代码的重复 提高测试用例的可读性 提高测试用例的可维护性,特别是针对UI频繁变化的项目 当Web页面编写测试时,需要操作该Web页面上的元素,如果在测试代码中直接操作HTML元素,那么代码比较脆弱,因为UI频繁变动.可用到page对象封装成一个HTML页面,通过提供的API来操作页面元素. Page Object 实例 下面以登录163邮箱为例实现: 1 #!/usr/bin/env python 2 # _*_ co

selenium +python之Page Obiect设计模式

PageObject是selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现对界面交互细节的封装,这样可以使测试案例更关注于业务而非界面细节,从而提高测试案例的可读性. 1.认识PageObject PageObject设计模式的优点如下: *减少代码的重复 *提高测试用例的可读性 *提高测试用例的可维护性,特别针对UI频繁变动的项目. 当为web页面编写测试是,需要操作该web页面上的元素.然而,如果在测试代码中直接操作HTML元素,代码是及其脆弱的,因为ui的变动性会很大.我们

Page Object页面设计模式核心要点

  Page Object,页面对象.一种设计模式,实施selenium的最佳实践,体现了web应用与页面显示之间的关系.为什么需要Page Object?测试代码维护的需要:减少代码的编码量,减少代码的维护量,清晰而明确的业务测试流程. Page Obje实现了测试代码的分层:页面元素.元素操作 和 页面业务的分离. 1.基础类 全局公共配置方法2.页面类 页面业务+元素集合3.用例层 关注数据和业务流程4.增加测试用例1(增加商品). 测试用例2(删除商品) 5.代码解耦 用例1和用例2公共

关于page object(PO)模型的介绍

点击链接加入QQ群 522720170(免费公开课.视频应有尽有):https://jq.qq.com/?_wv=1027&k=5C08ATe 所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作:至于测试脚本要和ta区别开来,需要什么去这些页面类去调用即可.这样的好处就是如果页面元素发生变化,你去维护页面类即可,测试类你基本不用管.(个人觉得理想丰满,现实骨感!) 说了这么多,估计还是会有童鞋不明白,那么就看看这张图,一