前言

MonkeyScript是一组可以被Monkey识别的命令集合,可以用它来完成重复固定的操作。
相对于Monkey,Monkey是完成随机事件,但是有时候我们需要完成的过程是固定的,这个时候Monkey本身就已经无法满足需求了这是我们就需要把我们的需求写成一个脚本。
相对于Appuim使用控件id来进行定位并操作,其缺陷在于面对不同分辨率的手机脚本适用性差,会出现点击错位的现象,以致于不能正常完成预定的操作。(这里有个好用的定位技巧:打开手机的开发模式,并开启指针位置这个功能,能够方便的获得控件的横纵坐标。

一、MonkeyScript的使用

执行脚本指令:
adb shell monkey -f MonkeyScript EventCount
解释:MonkeyScript:脚本名称,包括写入脚本的路径;EventCount:执行次数
注意:因为 adb shell 的运行环境是在Android 设备上,所以需要将MS脚本 pull 到待测试的设备上,然后再运行。

二、MonkeyScript常用的API

1、Activity(LaunchActivity)
方法签名:LaunchActivity ( pkg_name , act_name )
解释:用于打开指定的页面,它的两个参数,分别表示打开的 App 的包名和打开的 Activity 的名称。
注意:LaunchActivity 命令用于打开的Activity 需要属性 android:exported 被设定为true,才可以通过 LaunchActivity 打开。
2、点击事件(DispatchPointer)
方法签名:DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags)
解释:用于向一个指定的坐标位置,发送单个手势消息,相当于模拟点击的操作。
action的值:0 表示按下,1 表示抬起。
x、y的值:模拟点击位置的横、纵坐标值。
技巧点拨:当你需要模拟一个滑块的滑动操作,可以将终点位置的action的值设为2
eg:(滑块横向滑动)
#滑动方块解锁
DispatchPointer(10,10,0,236,1502,1,1,-1,1,1,0,0)
UserWait(1000)
DispatchPointer(10,10,2,872,1502,1,1,-1,1,1,0,0)
3、等待(UserWait)
方法签名:UserWait ( sleepTime )
解释:用于让脚本中断执行一段时间
4、输入字符串(DispatchString)
方法签名:DispatchString( input )
解释:直接输入英文数据,不需要引号
注意:对中文不友好
5、键盘事件(DispatchPress)
方法签名:DispatchPress( keyName )
解释:用于模拟敲击键盘的事件
6、打开关闭软键盘(DispatchFlip)
方法签名:DispatchFlip (keyboardOpen)
解释:用于打开或者关闭软键盘;参数:true 表示打开,false 表示关闭

三、MonkeyScript脚本编写

1、固定头文件:
type=user
count=10
speed=1.0
start data >>
解释:
type指明类型
count说明执行次数,但是这里改成任何值都执行一次,monkey命令来指定执行次数
speed命令执行速率。改动无影响,可以通过monkey命令行指定。
以上三个参数改动都没什么影响,一般不做改动。
2、脚本具体例子:

type=user
 count=10
 speed=1.0
 start data >>
 LaunchActivity(com.xxx,org.xxx.base.MainActivity)
 UserWait(100)
 DispatchPointer(10,10,0,160,2269,1,1,-1,1,1,0,0)
 DispatchPointer(10,10,1,160,2269,1,1,-1,1,1,0,0)
 UserWait(100)
 DispatchPointer(10,10,0,635,404,1,1,-1,1,1,0,0)
 DispatchPointer(10,10,1,635,404,1,1,-1,1,1,0,0)
 UserWait(1000)
 DispatchPointer(10,10,0,510,2252,1,1,-1,1,1,0,0)
 DispatchPointer(10,10,1,510,2252,1,1,-1,1,1,0,0)
 UserWait(1000)
 #发送信息
 DispatchString(Idonotwhattodo)
 UserWait(1000)
 DispatchPointer(10,10,0,973,1438,1,1,-1,1,1,0,0)
 DispatchPointer(10,10,1,973,1438,1,1,-1,1,1,0,0)
 UserWait(10)
 DispatchPointer(10,10,0,75,184,1,1,-1,1,1,0,0)
 DispatchPointer(10,10,1,75,184,1,1,-1,1,1,0,0)


注意:
(1)保存文件,示例保存为send.script文件,后缀不做限制,可以txt
(2)可以#后加中文注释
具体执行10次:
adb shell monkey -f /sdcard/send.script 10