用过Robotium做Android自动化测试的同学都知道,Robotium因为继承了instrumentation而无法进行跨进程的调用,比如模拟按键点击(据说4.3以后instrumentation有了getUIAutomator的入口,然后就木有然后了,本人没有亲试且不在本文讨论中)。
本人亲试了两种实现方式,经实验均能实现简单的事件,比如:发送按键、点击、长按、拖动等,最终的调用方式都采用4.1以后的input命令实现,当然你得是root。具体命令如下:
[email protected]:/ $ input input usage: input ... input text <string> input keyevent <key code number or name> input tap <x> <y> input swipe <x1> <y1> <x2> <y2>
跨应用方式一:关键字:Broadcasting
跨应用方式二:关键字:aidl
下面具体来说说如何实现:
第一种方式比较简单,一句话描述一下就是,通过在测试setup中启动一个service,在service中动态注册一个广播监听从客户端发送过来的文本命令,接收到之后通过Runtime去执行。实现步骤如下:
1、新建一个service,在service创建的时候动态注册一个广播(至于为啥要动态注册,其实静态也可以,但静态的话不能主动解除),在onReceive方法中实现执行命令的方法。如:
device.sendKeyEvent(intent.getStringExtra("cmd"));
2、安装这个service项目到手机;
3、在robotium的setup中start这个service,再到用例发送命令到service中执行;
4、最后可以清理service和广播。
第二种方式,简单说,通过建立aidl文件,实现其接口通过IPC通道跨应用,原理跟第一种是一样的,客户端发送命令到服务端执行。(这里不详细说了,aidl按照官网一步步做就好了)
时间: 2024-10-30 14:09:21