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跨应用的一种处理方法,欢迎大家拍砖。
文章转自:http://www.spasvo.com/ceshi/open/kygncsgj/201358111850.html
Robotium跨应用处理方法的更多相关文章
- 基于ADB框架Robotium跨进程操作
转自:http://blog.csdn.net/qingchunjun/article/details/42580937 2015年2月3日更新: 有些朋友在用真机尝试本方法时,抛出了InputStr ...
- ThinkPHP跨控制器调用方法
跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController(); 用绝对路径找echo $sc->ShuChu(); ...
- [转]vue跨域解决方法
vue跨域解决方法 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' hea ...
- JS访问或设置cookie的方法+跨域调用方法
无意中从163网站获取的JS访问或设置cookie的方法,Log到日志上以防遗忘 //COOKIE功能检查function fCheckCookie(){ if(!navigator.cooki ...
- AllJoyn+Android开发案例-android跨设备调用方法
AllJoyn+Android开发案例-android跨设备调用方法 项目须要涉及AllJoyn开源物联网框架.前面主要了解了一些AllJoyn主要的概念.像总线,总线附件,总线对象,总线接口这种概念 ...
- AJAX四种跨域处理方法
同源策略 同源策略 同源策略限制从一个源加载的文档或者脚本如何与来自另一个源的资源进行交互.这是一个用于隔离潜在恶意文件的关键的安全机制. 具体定义是:一段脚本向后台请求数据,只能读取属于同一协议名. ...
- AJAX跨域问题解决方法(4)——调用方解决跨域
调用方解决跨域的方法只有一种,那就是隐藏跨域. 何为隐藏跨域? 隐藏跨域的核心思路是通过反向代理隐藏跨域以欺骗浏览器 什么是反向代理?反向代理是指通过中间服务器使得访问同一个域名的两个不同url最终会 ...
- AJAX(XMLHttpRequest)进行跨域请求方法详解
AJAX(XMLHttpRequest)进行跨域请求方法详解(三) 2010年01月11日 08:48:00 阅读数:24213 注意:以下代码请在Firefox 3.5.Chrome 3.0.Saf ...
- 5种处理js跨域问题方法汇总(转载)
1.JSONP跨域GET请求 ajax请求,dataType为jsonp.这种形式需要请求在服务端调整为返回callback([json-object])的形式.如果服务端返回的是普通json对象.那 ...
随机推荐
- JS实例(二)
一:注册页面 包括非空验证.邮箱验证.密码相等验证,在输入之前提示文字,获得焦点时文字清除颜色变化,输入正确显示正确图片,错误显示错误图片,所有验证通过才可提交,重置会重置回初始模样. 效果图如下: ...
- Java递归流程
递归二字顾名思义就是:递过去,归回来.所以我索性叫它做有借有还吧. 下面的例子由c而来: public class Main { publ ...
- OpenXML: Asp.net利用OpenXML 导出Excel.
http://www.cnblogs.com/skyfei/archive/0001/01/01/Openxml.html
- C# 实现的多线程异步Socket数据包接收器框架
转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...
- 额定能量不得超过160Wh, 等同是多少mAh电池容量?
额定能量不得超过160Wh, 等同是多少mAh电池容量?行动电源容量标示, 正确应该是用Whr(Wh)瓦特小时来标示, 不过坊间标榜行动电源的容量通常是用xx000mAhWHr瓦特小时, 即是行动电源 ...
- eclipse总是自动跳到ThreadPoolExecutor.java
解决方法:在eclipse中选择Window->Preference->Java->Debug, 将“Suspend execution on uncaught exceptions ...
- 虚拟机 Linux 系统增加换页空间
想在虚拟机里面安装oracle10g,发现默认的swap交换空间不满足最低要求,因为我分配的物理内存是1G,那么就按照要求需要2G的swap交换空间,默认只有1G的交换空间.添加swap交换空间的步骤 ...
- IOS-UIScrollView实现图片分页
1.设置可以分页 _scrollView.pagingEnabled = YES; 2.添加PageControl UIPageControl *pageControl = [[UIPageContr ...
- SVM技法
PLA不管胖瘦,SVM喜欢胖的 fewer dichotomies=> small VC 演算法的VC dimension shatter 掉3个点 如果限制胖瘦,两个点都shatter不掉 喜 ...
- Bootstrap 3 支持 IE8
Bootstrap 3 支持 IE8 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries ...