因为目前公司的一些情况,任务重,人力紧,现在没有过多的人力投入到自动化脚本的编辑,所有想出一个可以一劳永逸,能够简单便利 App 的测试脚本,完成简答的兼容测试;
目前基本已经实现,但在使用的过程中,发现还有一些问题:
1、下载页面布局慢,导致执行速度慢
2、需要处理的异常情况过多,比如监控系统弹框等,如果要完美实现这一功能,需要做的优化还有很多
3、便利测试的规则难以完美制定,原因是一个页面可能是分很多 Tabs 的,每个 Tabs 的内容又各不相同,可能需要同一个页面多次获取页面布局信息,导致遍历的时候有可能一些点是过不到了
简单来讲,设置一个心跳循环,先创建 2 个 JSONObject,一个用于存放 App 页面布局信息(A),一个用于控制页面内容的点击(B),打开 App 后,获取当前页面 Activity 名称,通过 Activity 名称去查看存放 App 页面布局信息的 JSON(A)数据,是否已保存当前页面布局信息,如果未保存,则下载当前页面布局文件,并分析文件,获取到 ResourceID 和 Text 项,将这些元素整合到合并到一起(中间添加必要的元素用于区分),以当前 Activity 名称为 Key 保存到 JSON(A)中,如果当前页面布局信息已经保存,则读取 JSON(A)数据获得当前页面的元素,并逐次执行,这里同样适用 JSON(B)中 Key 同为当前 Activity 名称的 Value 值来控制点击内容,Value 值一开始赋予当前当前 Activity 元素的个数,执行一个之后,则执行-1,并做一些控制,如果当前页面连续三次点击错误(定位失败),则重新获取下布局信息,覆盖之前的布局文件;
private Handler handler = new Handler();
private Runnable myRunnable = new Runnable() {
public void run() {
String Activity = 获取当前页面Activity;
if(!JSON_A.has(Activity){
获取当前文件布局信息:dumpWindowHierarchy()
解析部分文件,并将获得的元素放到key 为Activity的Value;
}
String Activity_element = JOSN_A.getString(Activity);
String[] element = Activity_element.split(“区分元素添加的特殊字符”);
JSON_B.put(Activity,element.length);
//转换成点击操作
1)从后往前依次取出元素,并做判断后,执行点击操作,
如果成功,则将JSON_B的Activity的值-1;
如果失败,则将另一个统计失败次数的int index+=1;
if(index==3){
重新获取元素
}
}
handler.postDelayed(this, 50);
}
handler.post(myRunnable);