Monkeyscript---获取包名主界面名和位置坐标
一、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---获取包名主界面名和位置坐标的更多相关文章
- 01-ADB命令获取包名、界面名
命令代码 adb shell dumpsys window |findstr mFocusedApp
- hibernate 获取实体的表名、主键名、列名(转载+修改)
package com.escs.utils; import java.util.Iterator; import org.hibernate.cfg.AnnotationConfiguration; ...
- Android Apk获取包名和Activity名称
一.使用aapt(Android Asset Packaging Tool)工具获取: 1.配置Android环境: a.添加build-tools/android路径到系统环境变量的中Path中,注 ...
- monkeyrunner_获取apk的包名和activity名
一.使用adb获取单个apk的包名和Activity名称: 1.配置adb环境 a. 我的电脑点击右键-属性-高级-环境变量; b. 环境变量中新建PATH,变量值输入adb.exe工具所在目录; ...
- 【Monkey】Monkey获取包名的方式
获取包名的方式: 1.有源码:查看AndroidManifest.xml 2.只有apk: 2.1 aapt dump xmltree ColaBox.apk AndroidManifest.xml ...
- 二.第一个自动化demo,打开APP-如何获取包名和activity。(真机)
环境配置成功后,我们就可以进行第一个自动化测试了.用真机则不需要安装安卓模拟器.以一个简单的打开APP为例. 一.获取包名和activtity 启动一个app,我们需要知道它的平台.版本号. ...
- Android 获取包名,版本信息
Android 获取包名,版本信息及VersionName名称 <span style="font-size: 14px;">private String ge ...
- 手机App测试如何获取包名的入口【两种方式】
在进行手机APP测试的时候经常要获取包名.那么何为包名呢?简单来说其实就是手机APP的安装apk文件的名称,每个手机APP(软件)的包名都是唯一的. 那么我们怎样来获取包名以及包名的入口呢? 方法一: ...
- 快速获取Android应用包名和Activity名
一.获取包名 方法1: 先说明一下这里讲的方法是通用的,而网上其他方法获取PackageName不通用(因为他是建立在root的基础上的,我不敢保证你的设备已经root). ①在android设备上点 ...
随机推荐
- MySQL dump简单使用
首先确保MySQL的bin目录已经添加到path中,在cmd中运行@echo %path%查看. 1.基本的mysqldump使用: mysqldump -uroot -pOSSDB123 nnm5 ...
- 洛谷 [P4016] 负载平衡问题
贪心做法 第一眼看见觉得和均分纸牌差不多,然而因为这是环形的,并不能用均分纸牌的方法做,但是均分纸牌的思想仍然适用 首先我们假设平均数为sum1. 那么对于第1个人,我们假设他给第N个人K个糖果, 第 ...
- BZOJ 2595: [Wc2008]游览计划 [DP 状压 斯坦纳树 spfa]【学习笔记】
传送门 题意:略 论文 <SPFA算法的优化及应用> http://www.cnblogs.com/lazycal/p/bzoj-2595.html 本题的核心就是求斯坦纳树: Stein ...
- 【模板小程序】求M~N范围内的质数个数
/* 本程序说明: [编程题] 求素数 时间限制:2秒 空间限制:32768K 输入M.N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数.素数定义:除了 ...
- python怎么实现数组增加一行或多行
对数组增加一行或一列很简单,网上一搜一大把的事例.比如增加一行或一列: import numpy as np a = np.array([[1, 2, 3]]) row = a[0] col = a[ ...
- javamail+ical4j发送会议提醒
本篇讲述小编在使用ical4j时对其的理解与使用,留作笔记的同时希望能帮助到大家! 初学者可以先了解下ical4j的基本信息: iCalender编程基础,了解与使用ical4j:https://ww ...
- 针对Eclipse的maven Missing artifact com.microsoft.sqlserver:slqjdbc4:jar:4.0
maven 中添加sqlserver 出错,报错内容 maven Missing artifact com.microsoft.sqlserver 解决方法这里先下载好jar包 ,然后maven命令执 ...
- 分布式代码管理系统Git实践
1.1 版本管理工具介绍 什么是版本管理工具 为什么要使用版本管理工具? 老板要求小明写一个可行性报告,当他写完给老板看后,结果-- Git简介 早先linux内核代码托管在B ...
- 捋一捋js面向对象的继承问题
说到面向对象这个破玩意,曾经一度我都处于很懵逼的状态,那么面向对象究竟是什么呢?其实说白了,所谓面向对象,就是基于类这个概念,来实现封装.继承和多态的一种编程思想罢了.今天我们就来说一下这其中继承的问 ...
- java 23种设计模式 深入理解
以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive ...