selenium的PO模式

selenium的PO模式PageObject模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class(封装在一个class类中),其中包含页面中需要测试的所有元素(按钮,输入框,标题等)的属性和操作,这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。当页面元素id变化时,只需要更改测试页Class中页面的属…

大家好,又见面了,我是你们的朋友全栈君。

Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class(封装在一个class类中),其中包含页面中需要测试的所有元素(按钮,输入框,标题等)的属性和操作,这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。当页面元素id变化时,只需要更改测试页Class中页面的属性即可。

强调测试、逻辑、数据和驱动相互分离。

目的: 测试代码与被测页面对象代码分离,后期如果有页面元素发生了更改,只需要修改相应页面对象的代码(即对应Class文件),而不需要修改测试代码

它的好处如下:

  • 集中管理元素对象
  • 集中管理一个page内的公共方法
  • 后期维护方便

 

一、测试用例:使用单元测试框架

二、业务模块:使用 Page Object 设计模式,设计 Common 类

三、封装驱动:

  • 封装单一的工具,或者多个工具都可以
  • 封装 WebDriver(Selenium)成为 BoxDriver,支持Web UI 自动化测试
  • 封装其他特定工具 成为 DbDriver,支持数据库测试
  • 封装接口测试工具 成为 ServiceDriver,支持集成测试,接口测试
  • 封装 Appium工具 成为 AppDriver,支持移动APP UI自动化测试

PO设计

WebDriver封装

  • 这里是对Selenium的封装,完成封装以后的基本封装代码。
  • 新建 base 包
  • 新建 BoxDriver.java 放置 Selenium类的封装

Page 基类

 

  • 设计了一个基本的Page类,以便所有的页面进行继承,该类标明了一个sub page类的基本功能和公共的功能。

  • 全局变量: this.baseDriver,让所有的子类都使用的。

  • 构造方法:
    • 传递 driver的构造方法

      public BasePage(BoxDriver driver) {
            this.baseDriver = driver;
      }
    • 默认的构造方法,无参数的构造方法

      public BasePage() {
      }

    • 私有的常量:存放元素的定位符

      private String START_BUTTON_SELECTOR = "s,#start > div";
      private final String EXIT_MENU_TEXT = "l,%s";
      

    • 成员方法:

      • 每个子类都需要的系统功能:

        • open

          public void open(String url) throws InterruptedException {
              this.baseDriver.navigate(url);
              Thread.sleep(2000);
          }
          

      • 所有子类(页面)都具有的业务功能

        • selectApp
        • logout

  • Sub Pages(s)子类

    • 具体的页面的类,定义了某个具体的页面的功能

    • 必须继承基类

      public class AdminPage extends BasePage {
      }
      

    • 创建构造方法,带driver 参数

      public AdminPage(BoxDriver driver) {
         super(driver);
      }
      

    • 特定页面的业务

    • 使用基类的 this.baseDriver

  • 作者:立师兄Linty
    链接:https://www.jianshu.com/p/b164dd76502d
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • Tests 类

    • 这部分描述的是具体的测试用例。

    • 声明全局变量

      private BoxDriver baseDriver = null;
      private String baseUrl = null;
      private LoginPage loginPage = null;
      private AdminPage adminPage = null;
      

    • 调用各种页面(pages)

      1. 实例化Page

        this.loginPage = new LoginPage(this.baseDriver);
        this.adminPage = new AdminPage(this.baseDriver);
        

      2. 使用page的对象,调用成员方法

        loginPage.open(this.baseUrl);   
        loginPage.changeLanguage(lang);
        loginPage.login("admin", "123456", true);
        loginPage.selectApp(AppType.Admin);
        adminPage.clickAddMemberButton();
        adminPage.addMemberData(member);

https://www.jianshu.com/p/b164dd76502d

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144060.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SenticNet情感词典介绍[通俗易懂]

    SenticNet情感词典介绍[通俗易懂]在进行情感分析时,一个好的情感词典能够让我们的工作事半功倍,较为出名的情感词典有SentiWordNet,GeneralInquirer等,这篇博客将介绍另外一个出色情感词典,SenticNet。简介当谈论SenticNet时,我们正在谈论概念层面的情感分析,即通过语义和语言学来完成极性探测、情感识别等任务,而不是单纯的依靠词共现频率。SenticNet可以看作是以下其中一种:1…

    2022年8月23日
    18
  • js匿名函数作为函数参数

    js匿名函数作为函数参数由衷的感叹,js真是烦。学到现在,渐渐理解了什么是:语言都是通用的,没有好不好,只有擅长不擅长。继承,多态,甚至指针,c能实现,c++,java有,javascript(和java是雷锋和雷峰塔的区别,名字上不知道坑了多少人)也能变通实现。温故知新,今天又回味了一遍,匿名函数作为函数参数。代码很短,五脏俱全。functiont

    2022年10月3日
    2
  • PyCharm激活码永久有效PyCharm2020.3.4激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2020.3.4激活码教程-持续更新,一步到位PyCharm激活码永久有效2020.3.4激活码教程-Windows版永久激活-持续更新,Idea激活码2020.3.4成功激活

    2022年6月19日
    44
  • [译] AlphaGo 的确是一个大事件

    [译] AlphaGo 的确是一个大事件

    2021年9月16日
    66
  • webpack基本配置项_webpack配置文件详解

    webpack基本配置项_webpack配置文件详解前言上篇我们已经配置好了本地开发服务器,但是配置的相对比较凌乱,一个文件中有些是开发时用到的配置,有些是生成时用到的配置,有些是开发和生成都要用到的配置,所以我们这里把环境分为3个环境webpac

    2022年7月29日
    29
  • pycharm使用anaconda的虚拟环境_pycharm解释器为空

    pycharm使用anaconda的虚拟环境_pycharm解释器为空项目场景:在pycharm中新建项目,如果需要新建python环境时的全部操作问题描述:显示所有的python解释器:condainfo-eanaconda已经安装好了,创建新的python环境:condacreate–namepython37python=3.7#创建一个名字为python37,版本是python3.7的新环境,conda会自动安装3.7的最新版本;它会把新安装的python环境放在anaconda3的envs目录下:…

    2022年8月26日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号