大家好,好久不见了。虽然Itpub没落了,不过我还是选择在这里默默的共享我接触的一些测试框架,希望能给测试的人一点启示。
下面言归正传。
-----------------------------------------------------------------华丽丽的分割线--------------------------------------------------------------------------------------------- Google亲儿子UI Automator不支持长按。面对新公司选型UI Automator我一面表示无语,一面还是得把长按功能给加上去。 完全从Java代码层面应该也行,不过时间和精力不允许。我找到一种Shell实现的办法。 要了解可以从Linux底层说起: 1 遥控器发射信号 -------------->2 Linux(Android)底层响应事件--------->3 安卓响应逻辑 如果能知道具体键值配对就能通过键盘去模拟操作了。 Android提供了2个命令可以给与我们很大的帮助: 1 getevent 从上面图我们可以看到/dev/input就是各种设备,其中的event4就是遥控器. 从上面的图我们来分析下OK按键的输入序列 黄色分为上下2组,2组见的区别就是1在上面表示按下,0在上面表示松开。 在安卓中,如果按下和松开间隔超过0.5秒就认为是长按。 所以看到上面的图中模拟的是一次按键事件。 来稍微看下该命令的参数 其中1个功能是查看时间: 看下间隔的时间,我猜测都是转换成了Java从1970开始的标准时间,但是差值是我们认定的秒数。 看下42 - 37 大致是5秒,这个就是长按了。 2 sendkeys 我们来看下如何模拟长按增加音量按键 /dev/input/event3: 0004 0004 000c00e9 /dev/input/event3: 0001 0073 00000001 /dev/input/event3: 0000 0000 00000000 /dev/input/event3: 0004 0004 000c00e9 /dev/input/event3: 0001 0073 00000000 /dev/input/event3: 0000 0000 00000000 adb shell sendevent /dev/input/event3 4 4 786665 adb shell sendevent /dev/input/event3 1 115 1 adb shell sendevent /dev/input/event3 0 0 0 adb shell sendevent /dev/input/event3 4 4 786665 adb shell sendevent /dev/input/event3 1 115 0 adb shell sendevent /dev/input/event3 0 0 0 上面的部分是从getevent得到的输入 将其中的数字从16进位切换为10进位,就是我们的输入串了。 请在命令行中执行下面的连续6个adb命令 同时观察TV界面,发生了什么? 电视按键音量的确变大了,说明sendevent 是可行的。 3 是用Win的批处理还是Android的sh? 电视音量按键从0一直增加到了100??!! 为啥呢?我期待的应该是单击增加按键音量一次啊? 来看看相应机制: 主要时间花费在从Win到Android去了 如果我们转换思路: 直接把shell写到Android里面呢? 这时候我们就能很明显的发现一次只增加1个音量按键。 4 对休眠的支持 如果加上天生支持的休眠参数
现在就能完全支持长按了。
还可以拆分为多个脚本,组合执行。 看上图,可以分为root,普通用户,或者Win用户adb执行。 5 最后实现: 1 执行需要长按的测试用例之前从咱们的FTP服务器取下长按脚本 2 FTP取脚本的Java程序 需要特别指出的是,因为引入了第三方FTP的jar包 编译需要去修改特定的文件
修改了之后再Build Dex的时候会出现如下的增量dex过程 3 具体实现长按的脚本 会根据具体传入的动作来决定调用的脚本,按下的时间如果低于850会定义为850 4 长按的脚本 每个脚本都成对出现,一个为按下按键对应的值,另一个为松开按键对应的值。中间的长按的时间为上面函数传入的值,如果太小则定为850毫秒。
5 跑完脚本后需要去清理掉这些下载下来的脚本 总结一下现在的流程:
|