Android Robotium跨应用处理方法

相信用过一段时间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跨应用的一种处理方法,欢迎大家拍砖。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2025-01-26 07:17:21

Android Robotium跨应用处理方法的相关文章

robotium跨应用操作~~~请大神们帮忙解答,,新手见谅

问题描述 robotium跨应用操作~~~请大神们帮忙解答,,新手见谅 执行 if(!solo.searchText("您没"));需要跨应用进入contacts中 程序无法执行,请帮忙进行编写跨应用操作,请帮忙直接进行在代码上进行修改,,最好能进行备注,新手请谅解 注:不需要写调用什么,然后声明什么的,新手看不懂直接改代码就好. 可以的话加我QQ:1158996359~~~ ~~~~~~~~~~~~~~~~~谢谢您! public class Call extends Activit

android 下载 跨界面更新UI

问题描述 android 下载 跨界面更新UI 项目遇到问题,在一个activity中点击下载一堆文件,然后需要在另一个activity中的fragment中的listview中更新正在下载的item的进度. 我是使用广播加异步更新.但总觉得效率有点慢.有更好的方法吗?

Android提高Service优先级的方法分析_Android

本文实例讲述了Android提高Service优先级的方法.分享给大家供大家参考,具体如下: Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存.这样就能保证真正对用户有用的程序仍然再运行.如果你的 Service 碰上了这种情况,多半会先被杀掉.但如果你增加 Service 的优先级就能让他多留一会,我们可以

Android中bindService基本使用方法概述_Android

Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindService的使用,不涉及任何startService方法调用的情况.如果想了解startService相关的使用,请参见<Android中startService基本使用方法概述>. bindService启动服务的特点 相比于用startService启动的Service,bindService启动的服务具有如下特点:

Android提高Service优先级的方法分析

本文实例讲述了Android提高Service优先级的方法.分享给大家供大家参考,具体如下: Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存.这样就能保证真正对用户有用的程序仍然再运行.如果你的 Service 碰上了这种情况,多半会先被杀掉.但如果你增加 Service 的优先级就能让他多留一会,我们可以

javascript实现跨域的方法汇总

  这篇文章主要给大家汇总介绍了javascript实现跨域的方法的相关资料,需要的朋友可以参考下 由于同源策略的限制,XMLHttpRequest只允许请求当前源(包含域名.协议.端口)的资源. json与jsonp的区别: JSON是一种数据交换格式,而JSONP是一种依靠开发人员创造出的一种非官方跨域数据交互协议. script标签经常被用来加载不同域下的资源,可以绕过同源策略.(有src属性的都可以获取异域文件). 如果请求的这个远程数据本身就是一段可执行的js,那么这些js会被执行(相

Android手机保持屏幕高亮方法

  这篇文章主要介绍了Android手机保持屏幕高亮方法,本文直接给出实现代码,需要的朋友可以参考下 一开始接触android应用项目时,在项目快上线时策划要求加个高亮,每次都是直接从网上百度一下,现在做游戏了,却还是这个需求,这里备份一下方便后续的查找,毕竟是自己写好且验证没问题的 :) 首先,在Activity里添加一下代码: 成员变量: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 pri

Android开发之动画实现方法

  本文实例讲述了Android开发之动画实现方法.分享给大家供大家参考.具体分析如下: 动画分为三种: 逐帧动画.布局动画和控件动画 控件动画实现 通过重写Animation的 applyTransformation (float interpolatedTime, Transformation t)函数来实现自定义动画效果,另外一般也会实现 initialize (int width, int height, int parentWidth, int parentHeight)函数,这是一个

Android实现Service重启的方法

  本文实例讲述了Android实现Service重启的方法.分享给大家供大家参考.具体如下: 做APP的时候,我们可能需要一个后台服务一直在运行着,得用到Service组件. 但服务可能在如下情况被杀死: A.用户手动点击停止. B.采用第三方软件(比如360手机卫士)进行清理,当然这样子除了系统服务外,其他的进程肯定也会被杀死,除非跟手机厂商联系. 这时候可能需要重启该服务,上网看了半天,有提到用Timer.AlarmManager去实现间歇性的发送广播启动Service(注册的广播接收后,