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

引言

使用和学习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、计算机基础

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小怡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值