一、monkey随机事件有三类:点击、输入、手势

二、Monkeyscript难点:如何获取坐标

三、Monkeyscript API:

  1、轨迹球(手势)事件:

   DispatchTrackball(long downTime,long eventTime,int action, float x,float y,float pressure,float size,int meteState,float xPrecision,float yPrecision,int device,int edgeFlags)

    long downTime:键最初按下时间

    long eventTime:事件发生时间

    int action: 动作:action_down = 0按下,action_up=1弹起,action_multiple=2

    float x:X坐标

    float y:Y坐标

    float pressure:当前事件的压力,范围0~1

    float size:触摸近似值。范围0~1

    int metaState:当前按下的meta键的标识

    float xPrecision:X坐标精确值

    float yPrecision:Y坐标精确值

    int device:事件来源,范围0~x,0标识不来自物理设备

    int edgeFlages:坐标是否超出屏幕范围

  2、输入字符串(输入)事件:DispatchString(String text)

    如:DispatchString(adf23实地呵呵)

  3、点击事件:

    DispatchTrackball(long downTime,long eventTime,int action, float x,float y,float pressure,float size,int meteState,float xPrecision,float yPrecision,int device,int edgeFlags)

  4、启动应用:LaunchActivity(String pkg_name,String cl_name)

    pkg_name:应用所在包名

    cl_name:应用主界面名

    如:LaunchActivity(com.andrioid.browser,com.andrioid.browser.BrowserActivity)

      启动应用BrowserActivity

  5、等待事件:UserWait(3000) 单位:毫秒,等待3秒

  6、按下键值:DispatchPress(int keycode)

    常用键值:手机按键0~9-------键值:7~16

         按键A~Z------键值:29~54

         拨号键---------键值:5

         挂断键---------键值:6

         HOME键-----3

         音量增键------24

         音量减键------25

    如:DispatchPress(3)即为短按home键

  7、长按键值:LongPress(int keycode)

  8、发送键值:DispatchKey(long downTime,long eventTime,int action,int code,int repeat,int metaState,int device,int scancode)

      long downTime:键最初按下时间

      long eventTime:事件发生时间

      int action:动作:action_down = 0按下,action_up=1弹起,action_multiple=2

      int code:键值(参考第6条)

      int repeat:重复次数

      int metaState:当前按下的meta键的标识

      int device:事件发生的设备id

      int scancode:上报点信息

  9、开关软键盘:DispatchFlip(boolean keyboardOpen)

      true为打开;false为关闭

四、脚本编写:

  1、编写规范:

    (1) 头语句+事件脚本

      ① 头语句:固定格式

        type = raw events(脚本类型,一般不用更改)

        count = 10(执行脚本次数)

        speed = 1.0(执行速率,改动无影响,也可通过monkey命令行指定)

        stat data >>

      ② 事件脚本:

          1) 启动应用(如:众托帮)LaunchActivity(String pkg_name,String cl_name)

          a. 如何获取pkg_name包名:

              adb shell pm  list packages

            包名为:com.zhongtuobang.android

             

          b. 如何获取cl_name应用主界面名:

            adb logcat -c

            adb logcat ActivityManager:I *:s

            然后手动在手机上面打开app客户端

            即:应用主界面名:com.zhongtuobang.android/.ui.activity.splash.SplashActivity

            

      2) 如何获取坐标,步骤如下:

      方案一:

          a. 打开app(如:众托帮)

          b. adb shell getevent(getevent是安卓下的一个工具,模拟多种按键和触屏操作,产生raw event,再经过event hub处理产生gesture事件)

          c. 点击app中“我的”区域:

            

        备注:

            (1)/dev/input/event4: 0003 0000 00000028

                |           |       |         |

               |           |       |         |

              devicename   type  code  value

            (2)getevent中type、code、value的定义可以查看kernel/include/linux/input.h,三者互相影响

            ① 对于type的定义:

                              # define EV_SYN0000同步事件——表示一组完整事件已经完成

             

                              # define EV_KEY0001keyboard键盘事件

                              #define EV_REL          0002相对坐标

                              #define EV_ABS      0003绝对坐标

               #define EV_MSC       0004

              #define EV_SW            0005

                #define EV_LED           0011

              #define EV_SND           0012

              。。。。。。

            ② 对于code的定义:

             1) type值为# define EV_SYN      0000,其code值为:

            # define SYN_REPORT 0

              # define SYN_CONFIG 1

              # define SYN_MT_REPORT 2

              2) type值为#define EV_ABS      0003,其code值为:

                                    # define ABS_X 0000 绝对坐标X

                                    # define ABS_Y 0001 绝对坐标Y

                                    # define ABS_Z 0002 绝对坐标Z

            # define ABS_RX 0003

            # define ABS_RY 0004

               # define ABS_RZ 0005

               。。。

                             # define ABS_MT_TOUCH_MAJOR 0030    主接触面的长轴:若屏幕分辨率为X*Y,那么       ABS_MT_TOUCH_MAJOR最大值为sqrt(X`2+Y`2),即为:平方和的正数开根

             # define ABS_MT_WIDTH_MAJOR 0032

                                    # define ABS_MT_POSITION_X 0035 椭圆中心绝对坐标X

                                    # define ABS_MT_POSITION_Y 0036 椭圆中心绝对坐标Y

              。。。

                     当0x30和0x32出现时,表示有触屏事件发生;

                     当0x35和0x36出现时,表示实际触屏时的绝对坐标X和Y;

                     通过getevent获取到的值为16进制。

                               

          此时绝对坐标(X,Y)为(28e,4de)

          (3)若对于不同分辨率的设备,如何获取绝对坐标点,步骤如下:

            ① adb shell getevent -p

                              ② 发现命令adb shell getevent时可以看到device name为:/dev/input/event6,即设备号为:adb device 3            

             ③ 显示了code值得范围:当code为0035和0036,对应本机x最小值0,最大值720;对应y最小值0,最大值1280;

             ④ 获取手机设备的分辨率:720x1280

                  adb shell wm size

                 

            ⑤ 通过Android VNCServer源码,得出公式为:

            计算时要将十六进制全部转化为十进制:

            相对坐标X=(x - xmin)*(getevent中的十进制值 * 分辨率宽度)/ (0035max - 0035min)

            相对坐标Y=(y - ymin)*(getevent中的十进制值 * 分辨率高度)/(0036max - 0036min)

方案二:

直接打开手机设置 →打开 开发者选项 → 打开指针位置,手指点击屏幕即可显示坐标

Monkeyscript---获取包名主界面名和位置坐标的更多相关文章

  1. 01-ADB命令获取包名、界面名

    命令代码 adb shell dumpsys window |findstr mFocusedApp

  2. hibernate 获取实体的表名、主键名、列名(转载+修改)

    package com.escs.utils; import java.util.Iterator; import org.hibernate.cfg.AnnotationConfiguration; ...

  3. Android Apk获取包名和Activity名称

    一.使用aapt(Android Asset Packaging Tool)工具获取: 1.配置Android环境: a.添加build-tools/android路径到系统环境变量的中Path中,注 ...

  4. monkeyrunner_获取apk的包名和activity名

    一.使用adb获取单个apk的包名和Activity名称: 1.配置adb环境 a. 我的电脑点击右键-属性-高级-环境变量; b.  环境变量中新建PATH,变量值输入adb.exe工具所在目录; ...

  5. 【Monkey】Monkey获取包名的方式

    获取包名的方式: 1.有源码:查看AndroidManifest.xml 2.只有apk: 2.1 aapt dump xmltree ColaBox.apk AndroidManifest.xml ...

  6. 二.第一个自动化demo,打开APP-如何获取包名和activity。(真机)

    环境配置成功后,我们就可以进行第一个自动化测试了.用真机则不需要安装安卓模拟器.以一个简单的打开APP为例. 一.获取包名和activtity      启动一个app,我们需要知道它的平台.版本号. ...

  7. Android 获取包名,版本信息

    Android 获取包名,版本信息及VersionName名称     <span style="font-size: 14px;">private String ge ...

  8. 手机App测试如何获取包名的入口【两种方式】

    在进行手机APP测试的时候经常要获取包名.那么何为包名呢?简单来说其实就是手机APP的安装apk文件的名称,每个手机APP(软件)的包名都是唯一的. 那么我们怎样来获取包名以及包名的入口呢? 方法一: ...

  9. 快速获取Android应用包名和Activity名

    一.获取包名 方法1: 先说明一下这里讲的方法是通用的,而网上其他方法获取PackageName不通用(因为他是建立在root的基础上的,我不敢保证你的设备已经root). ①在android设备上点 ...

随机推荐

  1. 对.Net Core结合Docker和Jexus的实践

    本文基于上次尝试之后的进一步尝试,加入Docker容器.编写Dockerfile,并且jexus结合Docker的使用,总结下自己的个人感想. 一.环境介绍 当前的场景有两种方式将Demo实现运行,一 ...

  2. Jmeter_上传与下载

    今天重点说一下Jmeter的上传与下载 1:Jmeter上传文件 首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看.注意,此处我的文件路 ...

  3. 6.C++初步分析类

    面向对象的意义在于: -将日常生活中习惯的思维方式引入程序设计中 -将需求中的慨念直观的映射到解决方案中 -以模块为中心构建可复用的软件系统 -提高软件产品的可维护性和可扩展性 其中类和对象是面向对象 ...

  4. apache 改变文档根目录www的位置

    1.找到apache的安装目录,找到config/httpd.conf,找到DocumentRoot "D:/wamp/www/" 改成你想要的目录,例如:改成 DocumentR ...

  5. .NET Core UI框架Avalonia

    .NET Core UI框架Avalonia,Avalonia是一个基于WPF XAML的跨平台UI框架,并支持多种操作系统:Windows(.NET Framework,.NET Core),Lin ...

  6. mysql查找以逗号分隔的值-find_in_set

    有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1.智能机,2.Andri ...

  7. 让linux 服务器网卡物理口不停闪烁

    [root@DBSERVER51 ~]# ethtool -p eth0 此时就会看到对应的物理口一个灯在不停的闪烁,对了.这就是我们在系统看到的那个叫eth0的网卡了.就是这么简单.

  8. ss-redir 的 iptables 配置(透明代理)

    透明代理指对客户端透明,客户端不需要进行任何设置就使用了网管设置的代理规则 创建 /etc/ss-redir.json 本地监听 7777 运行ss-redir -v -c /etc/ss-redir ...

  9. linux下简洁优化部署tomcat应用

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 本文是自己根据公司架构部署tomcat方法整理出来的文本 修 ...

  10. 撸一撸Spring Cloud Ribbon的原理-负载均衡器

    在上一篇<撸一撸Spring Cloud Ribbon的原理>中整理发现,RestTemplate内部调用负载均衡拦截器,拦截器内最终是调用了负载均衡器来选择服务实例. 接下来撸一撸负载均 ...