一、封装方法



1、编程如何越来越快:



  首先,需要经验丰富,知识面广。



  其次,每一个熟练编程的人员,都会有自己的一个库,解决各种问题、各种通用的方法函数。



  同理,自动化脚本也是编程,测试用例则为需求,UI自动化编写虽然容易,但是界面变化快、维护庞大。所以封装通用方法,是最快最容易的途径。



2、哪些方法需要封装:



  公共的操作方法



  经常使用的步骤:超过两次以上



  经常使用的组件:输入框、文本框、列表



  经常操作的布局:多个组件组成通用的布局



  经常操作的页面:ui页面由一个一个单独Activity组成,就可以将Activity封装成单独的类



  通用的工具函数:文件操作、时间操作之类



3、初级封装:



  通用方法库:将通用的方法封装在一个java文件中,比如登陆、文件操作、时间操作



  专用方法库:比如登陆专用的方法:qq登陆、微博登陆等



  用例集:通过调用方法库中的方法实现用例,这样看起来简洁清晰。



4、设计一个用例的过程:



  先编辑好用例执行步骤、顺序



  然后设计好对应的方法名



  然后新建一个class将这些写入,要将编辑好的用例步骤、方法名等作为注释,这样更清晰



 



  比如设计简单用例如下:



  Cer_MTBF_01:联系人的添加和删除



  预置条件:1、在添加联系人之前通讯录内无任何联系人


  


执行步骤

对应方法

打开通讯录

openContent

清空联系人

clearContent

新建联系人

newContent

确认联系人新建成功

confirmContents

删除联系人

deleteContens

确认联系人删除成功

confirmDelContents

退出通讯录

exitContent

二、接口化



1、面向接口的变成也可以引入自动化用例编写中。可以用到设计核心用例,基本核心用例20-30条,核心功能基本不会变,但是UI变化比较大,这样我们没必要把用例重新写一遍,只要把方法重新实现一下。



  设计用例与实现用例分离



  规范化用例



  多态-应用的多版本



三、组件化与布局化



1、对常用的组件单独编写组件常用方法。我们最终获取的每个对象都为某一个类型的组件



 例如:对EditView设计通用的方法,首先想想你是如何测试编辑框的,将这些方法全写在抽象的 EditView类中



    获取EditView对象



    输入文本



    清除数据



    判断编辑框类型



    判断编辑框



    各种异常与特殊方法预置、






四、界面化



1、界面化知识应用由不同的Activity组成,那我们可以将每一个界面封装成一个类,操作、方法、变量,也就是属性和方法再单独封装。



这样只要哪个界面有变化,再修改对应的Activity就可以了。



  实例:



    拨号盘页面



  属性:



    常用的固定号码,如:10086,10010,10000



    常用的暗码:*#06#、*#*#4636#*#*



    组件ID:页面各个组件ID按功能命名



    页面对象:页面各个UI对象



  方法:



    输入号码



    清除号码、删除号码



    拨号



    其他设置(添加联系人、暂停、等待、发送短信)



    选择号码



2、Activity查询方法



   方法1:有源码,从Manifest文件中获取



   方法2:使用命令查询应用的全部Activity



   adb shell dumpsys package<包名>



   方法3:查询当前Activity栈定的Activity



   adb shell dumpsys activity



   方法4:找到焦点Activity



   adb shell dumpsys activity | find "mFocusedActivity"



   简化搜索字符



   adb shell dumpsys activity | find "mF"



五、逻辑与数据分离



1、实际用例编写过程中有很多数据非固定的而是可变的



如:



   账号信息:邮箱账号、无线登陆账号、即时通讯软件



   逻辑控制:log输出、代码分枝切换



   电话号码



   。。。。。



对于可变的数据,我们应该剥离出来,使用一个数据类来进行控制和获取 



思路:



我们单独设计一个class,功能就是,从某个地方读取变量,再赋值给我们设计好的变量。



 



2、数据获取方式



  1)从命令传入参数:-e 键值对



  2)从文件传入参数:写一个配置文件,文件里包含配置变量的信息,放到手机目录下,然后文件读取,赋值给我们的变量。



  3)从云端传入参数:需要有一个云服务测试系统,用例通过POST请求,请求服务器,服务器上设置好信息,服务器再把信息返回给用例,用例再把信息赋值给对应的变量,然后其他用例再从数据类中读取。



 



简单实例:



  建一个管理数据的package



  建一个数据类



  设置变量



  在写一些获取变量值的方法



 

public class Date extends UiautomatorBase{
        public static String wlan="";
        public static String QQ="";
        public static String phone="";
    }
    
    public void getConfig(){
        wlan="";
         QQ="";
        phone="";
    }
    }