基于uiautomator testrunner扩展和注解扩展

时间:2022-12-20 16:50:56

做过UI自动化项目的小伙伴是不是有过以下困扰:

当你执行某个类的时候uiautomator会默认一股脑的把该类中的方法全都执行一遍?分成几个类执行吧,项目又会显得很冗长,而且好多方法其实都是相关联的,分成多个类也不好管理,你放在一个类中吧,又会出现上面说的方法全都执行的问题了,而且当类中方法很多,执行一整个类所等待的时间又很漫长,与我们的期待相距甚远!

下面针对上述问题简单介绍一下解决方法(当然,这只是其中一种方法,欢迎各位提出宝贵意见~~~

1、自定义一个注解

 基于uiautomator testrunner扩展和注解扩展基于uiautomator testrunner扩展和注解扩展基于uiautomator testrunner扩展和注解扩展上面这个长得有点像接口的就是自定义的Tester注解啦~它与接口的区别最主要的一个就在于注解可以设定默认值。有一点要注意的是,元素不能有不确定的值,即你要么给它个默认值,要么在使用注解的时候提供元素的值,而且元素不能使用null作为默认值。

该注解中定义了两个元素,一个是version,一个是author

定义解释:

注解Annotation,也即元数据,即一种用于描述数据的数据,是一种代码级别的说明。简单理解注解就相当于标签的作用,用于标记它下方的代码段,可以用于类/方法/参数/变量/构造器以及包声明,是一种特殊的修饰符。

2、在你想要执行的方法上添加此注解,并为注解赋值,使用注解但未赋值的默认采用1中的默认值

背景说明:由于在不同版本下,首次进入应用的权限弹框不同(主要分成下面3个大类),部分版本还存在特殊的引导动画,而UI自动化项目又对UI有着极其高的依赖,所以需要根据不同版本来执行不同的代码。

下面三个方法使用了注解Tester中的version元素,并为其重新赋值。

基于uiautomator testrunner扩展和注解扩展而下面几个方法则使用了注解Tester中的author元素,这边方法中我没有多写代码,只是简单地示范下注解及其使用。

基于uiautomator testrunner扩展和注解扩展3、在testrunner执行命令中添加自定义参数,参数的value值就是你想要执行的方法上带的注解值

基于uiautomator testrunner扩展和注解扩展-e参数可以通过键值对来指定传递给测试类的参数,像上面的例子传入的分别是versionauthor,并为其设置value值。这意味着我们想要等会儿执行测试类只执行浏览器版本为6.0或者作者是author1的方法~~~当然你可以把版本修改为2.0,5.0等等你所需要执行的版本,作者改为张三李四王五balabala,或者再自定义多一个参数,定制你的需求~~

4、自定义方法,通过反射获取方法上的注解值

定义解释:

Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性

基于uiautomator testrunner扩展和注解扩展上面的getTester()方法就是用于获取注解值的方法,通过调用getTestCaseAnnotation(..)方法,获取整个Tester注解,并取出注解中的值。而getTestCaseAnnotation(..)方法则是通过反射机制获取执行的测试类:getClass()及其中的方法:getMethod(..,..),由此获取到方法上的注解。

5、判断该注解的值是否与命令行中定义的参数的value值一致,如果一致,则执行此方法,不一致则跳过

 基于uiautomator testrunner扩展和注解扩展到这儿也差不多啦~~下面让咱们来看下执行的结果:

基于uiautomator testrunner扩展和注解扩展基于uiautomator testrunner扩展和注解扩展

基于uiautomator testrunner扩展和注解扩展

总共执行到的有3个方法,正好跟我们命令行中给定的参数值一致,执行的分别是version6.0以及authorauthor1的方法,与预期一致[撒花]~~~