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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 矩形类定义

    矩形类定义

    2022年1月11日
    45
  • nginx负载均衡并发量(应用服务器高并发解决方案)

    1.什么是负载均衡?当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。下…

    2022年4月14日
    66
  • 数据库 — char、varchar、varchar2区别

    数据库 — char、varchar、varchar2区别char、varchar、varchar2区别char是定长的,varchar是变长的。varchar2应该是varchar的升级,只有ORACLE才有,这里不作讨论。char定长存储,速度快,但是存在一定的空间浪费,适用于字段不是很大,对速度要求高的场合。速度快是因为其在物理上是按定长存储的,这样,就可以根据偏移址一次取出固定长度的字符。varchar变长存储,效率不如char。…

    2022年6月19日
    50
  • VS中 多行注释的快捷键

    VS中 多行注释的快捷键只需要使用组合键即可 注释 nbsp nbsp nbsp nbsp 先 CTRL K 然后 CTRL C 取消注释 nbsp 先 CTRL K 然后 CTRL U 这样就大大提升了写代码效率 还有逼格 哈哈哈

    2025年11月23日
    3
  • linux中hdfs命令_linux下adb配置

    linux中hdfs命令_linux下adb配置Linux下的HDFS命令1.hdfs常用操作的命令格式  hadoopfs-ls对hdfs下一级目录的查看  hadoopfs-lsr对hdfs目录的递归查看  hadoopfs-mkdir创建目录  hadoopfs-put从linux上传文件到hdfs  hadoopfs-get从hdfs下载文件到linux  hadoopfs-text查看文件内容  hadoopfs-rm删除文件  hadoopfs-rm

    2022年10月5日
    2
  • 应用层,驱动层,硬件层_windows组件向导在哪里

    应用层,驱动层,硬件层_windows组件向导在哪里驱动层与应用层通信是通过DeviceIoControl,首先驱动层要实现:pDriverObject->DriverUnload=MyDriverUnload;pDriverObject->MajorFunction[IRP_MJ_CREATE]=MyCreate;pDriverObject->MajorFunction[IRP_MJ_CLOSE]=MyClose;

    2025年9月26日
    6

发表回复

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

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