文档章节

从测记---Monkeyscript---获取包名主界面名和位置坐标的几种方法

b
 bling1245
发布于 2018/03/08 21:34
字数 1299
阅读 68
收藏 0

一、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                                            

                            方案二:

                                    a、打开应用

           b、adb shell dumpsys window w | findstr \/ | findstr name=

                                        或 adb shell dumpsys window |findstr mCurrent

                   或 adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed 's/ //g'"

                                              

                      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_KEY          0001        keyboard键盘事件

                                    # 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_X0000        绝对坐标X

                                                # define ABS_Y0001        绝对坐标Y

                                                # define ABS_Z0002        绝对坐标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

                                                。。。

                         注意点:           

                                     当0030和0032出现时,表示有触屏事件发生;

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

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

                                     

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

 

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

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

         ②adb shell getevent -p                      

                            ③显示了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)

 

方案二:

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

 

 

 

 

© 著作权归作者所有

b
粉丝 0
博文 34
码字总数 18632
作品 0
南京
QA/测试工程师
私信 提问
【项目经验】Ionic中根据登录的账户名和账户id生成二维码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YYM15732626210/article/details/87200635 目录 一、项目前提: 二、项目宏观说明: 1、基于Ionic4项目: 2、...

杨燕梅-Yolanda94
02/13
0
0
UGUI实现长按显示道具详细信息(类背包道具信息显示)

游戏中很普遍的一个功能,长按道具,显示道具的信息。类似下面这样的一个功能: 分析一下这个功能需要的知识点: 1.文本框的长宽根据文本内容自适应; 2.点击位置转换成实际UI位置(弹窗位置...

a598211757
2018/05/23
0
0
android 换肤之一(apk安装模式)

研究了几种android换肤的策略,感觉apk方式比较容易管理资源,代码改造量还算小,但是apk模式在大量使用style和系统级style的项目中,不能灵活应用,而且每次加载页面都需要判断一下是否需要...

火云
2015/07/21
134
0
Bambook应用“我爱记歌词” 使用说明

功能说明: 我爱记歌词 是一个方便用户搜索歌词,并将歌词传输到Bambook设备的程序。 用户可以通过此程序在PC上搜索喜欢的歌词,并汇集成一本电子书保存到Bambook设备上,从而达到“用户在B...

长平狐
2012/06/08
44
0
关于C语言的学习,第一个小项目,打造扫雷游戏

一直说写个几百行的小项目,于是我写了一个控制台的扫雷,没有想到精简完了代码才200行左右,不过考虑到这是我精简过后的,浓缩才是精华嘛,我就发出来大家一起学习啦,看到程序跑起来能玩,...

小辰GG
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

带你了解 Java内存模型

Java内存模型的规定: 1、所有变量存储在主内存中; 2、每个线程都有自己的工作内存,且对变量的操作都是在工作内存中进行; 3、不同线程之间无法直接访问彼此工作内存中的变量,要想访问只能...

linux-tao
11分钟前
2
0
.net c# datetime转string 时间转字符串

.net c# datetime转string 时间转字符串 .net c# datetime转string 时间转字符串 刚开始接触net 时间转换字符串 一搜索出来的全是 字符串转时间,要么就是系统当前时间转字符串 就没有一个指...

青峰Jun19er
12分钟前
2
0
hbase demo

HbaseDao public class HbaseDao {@Testpublic void insertTest() throws Exception {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.qu......

Garphy
22分钟前
2
0
IT兄弟连 HTML5教程 HTML5表单 多样的输入类型2

4 range range类型用于包含一定范围内数字值的输入域,跟number一样,我们还可以对数值设置限定,range类型显示为滑动条用法如下: 上述代码使用了range类型输入框,为该类型设置了数值范围为...

老码农的一亩三分地
22分钟前
2
0
对比不同的数据库连接的异同

博主在学习和使用数据库连接时,遇到的问题, 这个几个数据库连接究竟有什么不同? 到底什么时候该使用哪个会更好一点? 带着这个问题我们先去了解常见的数据库连接 1. 常见的数据库连接有哪些?...

理性思考
24分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部