`

Android自动化测试初探: 模拟键盘鼠标事件(Socket+Instrumentation实现)

 
阅读更多

这篇文章是为了实现自动化测试,我主要是为了实现模拟键盘鼠标事件,实现PC控制手机,即PC发送指令控制手机执行相应的动作,例如界面的切换,屏幕的滑动等等。对于Socket编程和Service,我会在另外一篇文章里写明。下面讲的应该可以实现屏幕的滑动:

通过Socket + Instrumentation实现模拟键盘鼠标事件主要通过以下三个部分组成:

  * Socket编程:实现PC和Emulator通讯,并进行循环监听

  * Service服务:将Socket的监听程序放在Service中,从而达到后台运行的目的。这里要说明的是启动服务有两种方式,bindService和startService,两者的区别是,前者会使启动的Service随着启动Service的Activity的消亡而消亡,而startService则不会这样,除非显式调用stopService,否则一直会在后台运行因为Service需要通过一个Activity来进行启动,所以采用startService更适合当前的情形

  * Instrumentation发送键盘鼠标事件:Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘鼠标,如下所述:

  sendCharacterSync(int keyCode) //用于发送指定KeyCode的按键

  sendKeyDownUpSync(int key) //用于发送指定KeyCode的按键

  sendPointerSync(MotionEvent event) //用于模拟Touch

  sendStringSync(String text) //用于发送字符串

  注意:以上函数必须通过Message的形式抛到Message队列中。如果直接进行调用加会导致程序崩溃。

  对于Socket编程和Service网上有很多成功的范例,此文不再累述,下面着重介绍一下发送键盘鼠标模拟事件的代码:

  1.发送键盘KeyCode:

  步骤1. 声明类handler变量

private static Handler handler;

  步骤2. 循环处理Message

//在Activity的onCreate方法中对下列函数进行调用
private void createMessageHandleThread(){
//need start a thread to raise looper, otherwise it will be blocked
Thread t = new Thread() {
public void run() {
Log.i( TAG,"Creating handler ..." );
Looper.prepare();
handler = new Handler(){
public void handleMessage(Message msg) {

//process incoming messages here

//在这里是不是不用处理了呢?

}
};
Looper.loop();
Log.i( TAG, "Looper thread ends" );
}
};
t.start();
}

  步骤3. 在接收到Socket中的传递信息后抛出Message

handler.post( new Runnable() {
public void run() {
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(keyCode);
}
} );

  2.Touch指定坐标,如下例子即touch point(240,400)

Instrumentation inst=new Instrumentation();
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 240, 400, 0));
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 240, 400, 0));

  3.模拟滑动轨迹

  将上述方法中间添加 MotionEvent.ACTION_MOVE

分享到:
评论

相关推荐

    Android单元测试初探——Instrumentation

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...

    浅析Android 模拟键盘鼠标事件

    通过Socket + Instrumentation实现模拟键盘鼠标事件主要通过以下三个部分组成:Socket编程:实现PC和Emulator通讯,并进行循环监听Service服务:将Socket的监听程序放在Service中,从而达到后台运行的目的。...

    Android UiAutomator 自动化测试

    UiAutomator也是Android提供的自动化测试框架,基本上支持所有的Android事件操作 Espresso,Android Studio工程,以apk的形式执行测试 UiAutomator2,Android Studio工程,支持中文输入 UiAutomator 谷歌推出的,...

    Android系统模拟触摸按键

    博文源码《Android基于Socket无线遥控(2)--无线控制篇》 http://blog.csdn.net/zzp16/article/details/7939852 为Android系统添加模拟按键对外接口

    Android自动化测试

    Android自动化测试,该jar包支持robotium测试,当然支持所有的继承Instrumentation类型的测试

    翻译:Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation

    学习valgrind必看的一篇论文-Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation,论文较长,这里是全文翻译。

    android-support-multidex-instrumentation.jar.zip

    android-support-multidex-instrumentation.jar.zip

    Android中Hook Instrumentation 的实现

    参考博客 【Android中Hook Instrumentation 的实现】 http://blog.csdn.net/u012341052/article/details/71191409

    源码

    《AndroidStudio单元测试——instrumentation》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38060361

    android自动化测试框架robotium的jar包、doc文档及source code

    著名的android自动化测试框架robotium出了4.1版本 在原有基础上增加了对webview的支持 方便好用,但是需要测试者有一定java开发基础 对android instrumentation有一定了解

    Android系统自动化测试简述

     Android自动化测试目前可借鉴的经验不多,现在采取的方式就是通过java代码对Activity和View进行操作,目前已知的入口是Instrumentation类。  Instrumentation与Activity均位于android.app包下,这个包内还有诸如...

    Android手机测试的自动化测试工具

    Android自动化测试相对来说还是比较难,Instrumentation比较难以使用。下面和大家分享一个Android自动化测试工具Robotium。Robotium是一款测试AndroidApp的测试框架,它使得编写黑盒测试代码更加容易和稳定。通过...

    DevComponents.DotNetBar9.0 + TreeGX + Instrumentation

    经测试可以使用,效果不错。TreeGX效果不错。

    Android系统的自动化测试解决方案

    现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:ActivityInstrumentation,MonkeyRunner,Robotium,以及Robolectric。另外LessPainful也提供服务来进行真实设备上的自动化测试。  Android...

    安卓自动化测试框架

    通过android的instrumentation机制联系起来,可以用来对应用程序进行功能测试和简单的性能测试,测试程度也可以是从代码级别到具体功能点级别,到简单的性能测试级别。本文将从以下几个方面来对基于android平台的...

    Android开发资料合集-World版!

    9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再述模拟键盘鼠标事件(adb shell 实现) 334 9.87、反编译APK 344 9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90...

    Android 开发技巧

    9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再述模拟键盘鼠标事件(adb shell 实现) 334 9.87、反编译APK 344 9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90...

    CppVector:ShiViz兼容的C ++日志记录库

    可以将该库添加到C ++项目中,以在并发或分布式系统中生成与ShiViz兼容的矢量时钟带时间戳的事件日志。 CppVector与C ++ 11兼容。 用法 使用以下命令编译项目: g++ -W -Wall -Werror -std=c++11 CppVec.cpp ./...

    详解Android单元测试最佳实践

    目的 ...这种方式运行速度快,对运行环境没有特殊要求,可以很方便的做自动化测试,是单元测试首选的方法 Instrumentation测试 Instrumentation测试需要运行在Android环境下,可以是模拟器或者手机等

Global site tag (gtag.js) - Google Analytics