[Java版]selenium关键字驱动框架设计实战

2023-10-30

引言

使用和学习selenium好长一段时间了,PO设计模式已经算是耳熟能详了(包含PageFactory,它是PO设计模式的延伸),也了解了BDD行为驱动框架;在关键字驱动框架设计方面,由于对java基础技术的理解难度,没有花时间去整理,故而搁浅,今日重拾,只为提醒自己:世上无难事只怕有心人!

框架思想

关键字框架,主要用到的技术是反射机制,即在外部数据介质中读取到关键字<它是我们定义在类中的具体的方法>,然后通过动态查找,去运行中的类里面找到对应的方法并且调用invoke执行;然后你的用例就执行完成了。

层层深入

  1. Java反射机制,原理
这是一个java技术难点,怎么理解反射机制及实现?
  • 什么是反射
反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫Java的反射机制。
  • 实现反射机制的类
Java中主要由以下的类来实现Java反射机制(这些类都位于java.lang.reflect包中):
    • Class类:代表一个类。
    • Field类:代表类的成员变量(成员变量也称为类的属性)。
    • Method类:代表类的方法。
    • Constructor类:代表类的构造方法。
    • Array类:提供了动态创建数组,以及访问数组的元素的静态方法。
  • Class类是Reflection API中的核心类,主要方法如下:
    • getName():获得类的完整名字。
    • getFields():获得类的public类型的属性。
    • getDeclaredFields():获得类的所有属性。
    • getMethods():获得类的public类型的方法。
    • getDeclaredMethods():获得类的所有方法。
    • getDeclaredMethods(String name,Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes参数指定方法的参数类型。
    • getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes参数指定方法的参数类型。
    • getConstrutors():获得类的public类型的构造方法。
    • getConstrutor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型。
    • newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
  • 获取 Class 类对象
获取反射中的Class对象有三种方法。

 

  • 反射演示示例
先写一个类,里面有方法、有变量等

 

再写一个测试类,作为另外的类,通过反射机制来调用reflect类

 

  1. 封装关键字操作对象
预设一个测试场景:打开浏览器--输入地址--点击登录入口--输入帐号--输入密码--点击登录按钮--点击退出;简单的一个流程。 如何封装对应的关键字方法呢?跟使用PO设计模式一致,不过这次是从excel中读取数据来识别是否关键字并执行测试用例。 首先是点击登录的两个操作应该是同一个,都是给你一个元素定位去点击触发事件,那么输入帐号/密码也应该是统一的方法:

 

设计通用关键字方法,不应该的是在方法中固定查找元素方法:By.xpath,如果有更优秀的元素,非得换成xpath才能查找? 很明显这样不明智,所以还需封装一个通用查找元素的方法,这就需要回到一个约定大于配置的规则,即约定规则,不符合规则的就抛弃或不处理:

 

根据这个通用查找元素的方法,再次优化点击、输入这两个关键字操作:

 

如此类推:需要哪个关键字就封装哪个。
  1. 设计关键字驱动框架优化方案
仅此记录一下:某些开源项目中已有实现的关键字驱动框架,但是他们的设计于我而言多少有点缺陷:
  • 数据与脚本分离无可厚非:但是不要将操作步骤和元素拆分,那么等于就是需要维护excel测试用例及元素对象文件;那么我是不是可以在excel中既体现了操作对象又包含了元素及值的输入;
截图中Element其实是有问题,在代码中不好处理,如果String拆分split("="),在xpath会经常使用=来表示:xpath=//input[@class='input_username'],
很明显会失败,虽然可以实现拼接,但是做法比较low;

 

  • 相同的操作不建议再重命名:譬如点击a标签、button按钮、点击任何跳转的操作都只是点某个元素;所以不需要click_login\click_logout\click_butto等;类似操作如:input_username\input_passwd。
  • 也就不需要重复封装相同功能的方法,同时也不需要维护更多的文件,只要维护一个excel即可:元素及文本内容<使用分号;拆分,示例:id;kw>;针对特别需要覆盖值的用例可以使用其他方式覆盖;
  • 上面的excel用例实例,还有一个地方需要处理:就是需要封装一个通用的查找元素的方法,将element列拆分,通过不同的方法查找元素更加灵活;
  • 关于框架本身的设计,继续使用testng测试框架,可以创建testsuites及监听生成html报告:`

 

 

总结

此篇先抛砖,给出思路及方案,对部分功能代码进行封装,也对java反射机制进行了了解及代码演示。后面再会整篇实现selenium关键字驱动。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

  全套资料获取方式:点击下方小卡片自行领取即可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Java版]selenium关键字驱动框架设计实战 的相关文章

随机推荐

  • JAVA使用Jedis操作Redis的基本常用的API。

    package com coderman test import com coderman entities Customer import com coderman entities Department import org junit
  • crafting interpreters 介绍

    crafting interpreters 作者 的博客 crafting interpreters 出生的介绍 英文 crafting interpreters 出生的介绍 中文 crafting interpreters 在线阅读 cr
  • Qt的快捷键汇总

    t的基础知识 感谢大家来看我的分享 一般操作的键盘快捷键 调试相关操作的键盘快捷键 项目相关操作的键盘快捷键 帮助相关操作的键盘快捷键 感谢大家来看我的分享 第一次分享 介绍一下Qt的快捷键 方便大家在工作中速查 一般操作的键盘快捷键 操作
  • 搞懂电路的极点和零点

    在这里 作者将尝试找出关于极点和零点的物理感觉 使用运算放大器来控制它们在复平面中的位置 并利用电路的自然响应来说明极点 零点位置的影响 单端口电路的自然响应 我们来看图1中的无源线性单端口电路 它包括电阻 电容和电感 图1 a 无源单端口
  • touchmove 长按_移动端 javascript 实现长按拖动

    最近我要在移动端实现一个长按拖动功能 发现一个库 https github com bevacqua d 非常好用 用起来也非常简单 下面是一个可以运行的例子 Document box1 height 200px background co
  • 项目 和 api 接口说明文档

    注意 所有api的域名为 http 如果后面文档中 有的域名地址和这里不一样 以这里的为主 获取图文资讯 地址 api getnewlist 作用描述 主要用来获取点击首页上的 新闻资讯 后进入到的图文列表页面的数据 大家在做的时候可以使用
  • Cesium defaultAccessToken 修改

    engine Source Core Ion js中修改 defaultAccessToken 值即可 token申请地址 Cesium ion
  • 如何配置anaconda中环境的路径

    如何配置anaconda中环境的路径 虚拟环境安装在C盘绝对不是一种正确的决定 但是如何指定虚拟环境的路径呢 1 先查阅anaconda文档 发现可以指定路径安装 conda create help 2 安装虚拟环境到指定路径中 conda
  • Jquery鼠标右键插件contextMenu使用方法及自定义图标

    第一步 引入文件 文件在github上下载的 都可以搜到 我是把整个dist文件夹里的全放进项目里了 把这俩文件引进去 position js文件我没有引 暂时不知道这文件干啥用的 js部分 contextMenu selector lis
  • 如何组织项目目录结构——项目目录结构规范

    为什么要规范项目目录结构 首先我们要遵循约定由于配置的原则 通过约定代码结构或者命名规范来减少配置数量 例如 将所有 css后缀的文件放在css文件夹下 将xx js文件压缩后的重新命名为xx min js 那怎么样的目录结构是好的呢 没有
  • 【PTA】 sdut-array2-2-局部峰值

    给定一个N行乘N列的2D数组 逐行扫描该值并打印出所有局部峰值 该值大于其左上 上 右上 左 右 左下 下 右下的值 如果有 N的范围是2到150 输入格式 多组输入 每组输入包含两部分 第一行包含整数N 表示2D数组的大小 后面的N行中的
  • css h5 端弹窗时禁止底部页面滚动

    h5 端页面在弹窗时禁止底部页面滚动 在实现时 我尝试过几种方法 方法一 touchmove stop prevent 在遮罩层中添加 touchmove stop prevent 可以实现禁止页面滚动 如下 div class dialo
  • C++中的几种构造函数

    以下内容主要摘抄博客 浅谈C 中的几种构造函数 林多 CSDN博客 c 构造函数 一 C 中的构造函数可以分为4类 1 默认构造函数 又名缺省构造函数 以Student类为例 默认构造函数的原型为 无参构造函数 Student 没有参数 2
  • 使用element-ui的el-scrollbar时滚动条没有显示出来但是页面可以滚动的解决办法

    如果使用 Element UI 的 el scrollbar 组件时 滚动条没有显示出来但页面可以滚动 可以尝试调用其 update 方法来更新滚动条 在适当的时机 例如在数据加载完成后或组件更新后 调用 el scrollbar 的 up
  • Selenium入门(一)Java 搭建 Selenium 环境

    前言 Selenium是一个用于Web应用程序测试的工具 Selenium测试直接运行在浏览器中 就像真正的用户在操作一样 支持的浏览器包括IE 7 8 9 10 11 Mozilla Firefox Safari Google Chrom
  • SpringBoot全局异常处理

    需求 程序运行中可能出现各种错误 如果不对错误进行处理 那么客户端的体验会非常不好 但如果在业务代码中进行了太多的错误处理 造成代码臃肿 后期维护困难 因此 有必要进行全局的异常捕获 统一处理异常状况 工具类 HTTP状态码工具类 pack
  • react 井字棋 函数式写法

    用react写一个井字棋 看了官网的文档 自己写一个函数式的写法 比较简陋和粗糙 如有错误请在评论区指出 整体样式结构 样式代码就不放了 html return
  • pytorch实战(五)——时间序列多步预测的五种方法介绍

    当需要根据已有的时间序列数据 预测未来多个时刻的状态时 被称之为时间序列多步预测 时间序列多步预测有五种策略 分别为 1 直接多步预测 Direct Multi step Forecast 2 递归多步预测 Recursive Multi
  • Centos7部署kubernetes单机集群(K8S)

    Kubernetes 单机版部署还是比较简单的 下面开始操作吧 查看内核版本 cat etc redhat release 关闭selinux setenforce 0 sed i s SELINUX enforcing SELINUX d
  • [Java版]selenium关键字驱动框架设计实战

    引言 使用和学习selenium好长一段时间了 PO设计模式已经算是耳熟能详了 包含PageFactory 它是PO设计模式的延伸 也了解了BDD行为驱动框架 在关键字驱动框架设计方面 由于对java基础技术的理解难度 没有花时间去整理 故