相信用过一段时间Robotium的同学一般都遇到过如下情况:界面跳转到被测程序外以后,Robotium就毫无对策了,这也是Instrumentation框架最致命的一个缺点;然而领导是不会管你这些很“充分”的理由的…

  Ok,既然我们有这样的需求,还是想办法解决吧。调研了几天最终还是实现了一个曲线救国的方法:

  实现原理:编写一个程序A,用于接收CASE中发送的指定广播,当程序A接收到指定的广播后就会响应你注入的动作事件。

  准备工作:

  熟悉Service 、BoradCastReceiver、input keyevent, 有不清楚的同学可以先百度下以上知识模块。

  具体实现:

  1、首先为了方便我们使用,我们可以设置为程序A为开机启动一个Service,该Service中注册一个BoardCastReceiver用于 接收一个特定action的广播,设置一个IntentFilter:IntentFilter mIntentFilter=new IntentFilter(); mIntentFilter.addAction(“android.zered.action”);然后在BoardCastReceiver的 OnReceive方法中使用Runtime.getRuntime.exec(cmdB)执行我们Case中发送过来的指令(input keyevent xx 当然也可以是其他的一些shell命令)。注意:关于设置程序开机启动,3.1以后Android系统对广播接收做了安全处理——未启动过的程序是不能接 收广播的,当然我们还是有方法解决:即把该程序设置为系统级应用即可,然后把该程序push到system/app下重启手机;

  2、步骤1的完成已经为我们完成了一个命令执行端(可以理解为CS的server端),现在我们需要做的就是发送这个广播,发送广播的方法为 context.sendbroadcast,所以我们在Case中就可以使用 solo.getCurrentActivity.sendbroadcast发送广播;

  剩下的就是我们要把这个命令行cmdB封装到广播中,Intent intent=new Intent();intent.setAction(“android.zered.action”);intent.putExtra(TAG,cmdB);solo.getCurrentActivity.sendbroadcast(intent);

  Ok,这样以来一个带有命令行的广播就算是发送出去了。

  3、以上步骤完成以后,步骤1启动的程序A中的Service接收到步骤2发送的广播以后,就会执行我们发送的命令行指令cmdB了:Runtime.getRuntime.exec(intent.getStringExtra(TAG))

  以上就是Robotium跨应用的一种处理方法,欢迎大家拍砖。

文章转自:http://www.spasvo.com/ceshi/open/kygncsgj/201358111850.html

最新文章

  1. 2.4G/5G频段WLAN的模式、带宽、协商速率
  2. div根据内容改变大小并且左右居中
  3. MYSQL中约束及修改数据表
  4. SQL Server 2005 镜像构建手册
  5. 重装linux后
  6. adb 选择设备
  7. OM Price Lists
  8. JS 特殊字符的验证的问题
  9. Android初级教程理论知识(第一章快速入门)
  10. ArcGIS for JavaScript学习(一)
  11. 2522 和为K的倍数
  12. 5.动态代理AOP实现-DynamicProxy模式
  13. Redis集群部署及命令
  14. FileInputStream.FileOutputStream执行图片复制
  15. JS控制div跳转到指定的位置的几种解决方案总结
  16. python3 解决zip解压中文乱码问题,亲测可用, ZipFile
  17. Cocoapods更改安装版本及卸载、ruby版本检测和安装
  18. pytest文档17-fixture之autouse=True
  19. Jquery中的has、find、filter方法区别
  20. PHP正则表达式笔记和实例

热门文章

  1. virtualbox 安装windows系统的一些问题
  2. 利用jQuery npoi插件 asxh一般处理文件实现excel的下载
  3. 【锋利的jQuery】学习笔记04
  4. C#语法糖之第四篇: 扩展方法
  5. KinSlideshow参数设置说明
  6. ZOJ 1074 To the Max(DP 最大子矩阵和)
  7. 探讨 yum 与 rpm 的安装包数量
  8. IS about 64bit system
  9. Java实现单向链表
  10. 控制器view加载