老李推荐:第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件

 

从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有一大部分命令在翻译后需要转换成对应的事件,然后放入到命令队列里面等待执行。Monkey在取出一个事件执行的时候主要是执行其injectEvent方法来注入事件,而注入事件根据是否需要往系统注入事件分为两种:

  • 需要通过系统服务往系统注入事件:如MonkeyKeyEvent事件会通过系统的InputManager往系统窗口注入按键事件来完成输入请求
  • 不需要通过系统服务往系统注入事件: 如MonkeyWaitEvent只是进行简单的睡眠等待

MonkeyEvent是所有Monkey事件的总称,其实它包含了多种事件,我们先看下类图:

图6-5-1 MonkeyEvent类族谱

大家可以看到MonkeyEvent是一个抽象类,它最重要的地方是定义了injectEvent这个抽象方法。然后有一系列的子类继承该抽象类来实现其injectEvent接口,也就是去实现如何往系统注入事件来完成MonkeyRunner的请求了。所以如果这里要给Monkey事件做一个定义,我认为可以这样定义:Monkey事件是一个实现了injectEvent方法来处理不同的命令请求的类。但这里我们要注意并不是所有从MonkeyRunner过来的命令字串都会生成对应的事件的,请看下表:

命令字串

命令翻译类

目标事件类

MR是否支持

注释

touch down x y

TouchCommand

MonkeyTouchEvent

x代表x坐标,y代表y坐标

touch up x y

TouchCommand

MonkeyTouchEvent

同上

touch move x y

TouchCommand

MonkeyTouchEvent

同上

tap x y

TapCommand

MonkeyTouchEvent

同上

press name

PressCommand

MonkeyKeyEvent

Name代表按键名,如"MENU", "HOME", "SEARCH"等

key down name

KeyCommand

MonkeyKeyEvent

同上

key up name

KeyCommand

MonkeyKeyEvent

同上

getvar name

GetVarCommand

N/A(不会有对应事件,所以也不会加入事件队列,而是直接取得属性返回)

name 代表属性名

listvar

ListViewsCommand

同上

type line

TypeCommand

MonkeyKeyEvent

line 代表输入字串

wake

WakeCommand

N/A(不会有对应事件,所以也不会加入事件队列,而是直接PowerManager唤醒屏幕)

listViews

ListViewsCommand

N/A(不会生成事件也不会入事件队列)

queryview

QueryViewCommand

N/A(不会生成事件也不会入事件队列)

getRootView

GetRootViewCommand

N/A(不会生成事件也不会入事件队列)

getViewWithText

GetViewsWithTextCommand

N/A(不会生成事件也不会入事件队列)

done

N/A

N/A(不会生成事件也不会入事件队列)

测试完成,Monkey收到命令后会停止Socket监听

quit

N/A

N/A(不会生成事件也不会入事件队列)

测试请求退出,Monkey收到后不会停止Socket监听,

flip open

MonkeyFlipEvent

MonkeyFlipEvent

MonkeyRunner不支持发送这两个命令

flip close

MonkeyFlipEvent

MonkeyFlipEvent

trackball dx dy

deferredReturn

DeferReturnCommand

N/A(不会生成事件也不会入事件队列)

这个命令比较特别,做的事情是等待一个命令完成然后执行另外一个命令。但是在MonkeyRunner框架中并没有支持。

注: MR代表MonkeyRunner

表6-5-1 命令字串 – 命令翻译类 – 事件关系参照表

从列表中我们可以看到MonkeySourceNetwork支持大部分从MonkeyRunner过来的命令字串,但是只有2种是会生成对应的事件并存放到事件队列里面的,这两种事件都是需要对界面进行操作的,而其他如获得系统属性以及获得界面控件等命令都是不会生成对应事件,也不会进入到事件队列,而是直接处理然后返回的。这里我们对这2种事件做相应的描述:

  • MonkeyTouchEvent:对界面进行触屏操作,最终会通过InputManager往系统注入对应事件
  • MonkeyKeyEvent: 往界面输入键值,最终会通过InputManager往系统注入对应事件

这里要注意的是,其实并不是所有的事件注入都需要真的往系统窗口注入事件的,这个接口方法的名字我觉得Google 工程师起得不好,比如叫做handleEvent就不会造成混乱了(个人见解)。

老李推荐:第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件的更多相关文章

  1. 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

    老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...

  2. 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

    老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态   poptest是国内唯一 ...

  3. 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer

    老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer   poptest是国内唯一一家培养 ...

  4. 老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化

    老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...

  5. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

    老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述   HierarchyViewer库的引入让M ...

  6. 老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

    老李推荐:第14章1节<MonkeyRunner源码剖析> HierarchyViewer实现原理-面向控件编程VS面向坐标编程   poptest是国内唯一一家培养测试开发工程师的培训机 ...

  7. 老李推荐:第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结

    老李推荐:第8章7节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-小结   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...

  8. 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

    老李推荐:第8章5节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行测试脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化 ...

  9. 老李推荐:第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结

    老李推荐:第6章8节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-小结   本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事 ...

  10. 老李推荐:第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化

    老李推荐:第8章1节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行环境初始化   首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目 ...

随机推荐

  1. BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)

    描述:给定一张图(n<1000,m<5000)求有多少点对u,v有不重复经过其他点,共经过k个点的路径.(k<=7) 这个做法应该不是正解吧..顺便说下SDOI的几道题在BZ上都要卡 ...

  2. PHP学习1 — PHP文件处理

    PHP 中 include 与 require  Php include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中. 这意味着您 ...

  3. 来自高维的对抗 - 逆向TinyTool自制

    一.序 无论是逆向分析还是漏洞利用,我所理解的攻防博弈无非是二者在既定的某一阶段,以高维的方式进行对抗,并不断地升级维度.比如,逆向工程人员一般会选择在Root的环境下对App进行调试分析,其是以ro ...

  4. ajax 做登录 实现页面免刷新

    结合之前学的知识,可以用ajax来传递数据,实现页面不用刷新,仅数据刷新,来看一下ajax是怎么来实现页面免刷新的 方的是客户端,圆的是服务器 如果没有ajax的话,客户端直接把数据传给服务器,服务器 ...

  5. 一个想法照进现实-《IT连》创业项目:万事开头难

    前言: 之前是一个想法,现在已经进入创业阶段,所以这个系列的标题,改了. 众筹的事在今天也停止了. 7-9号会在深圳龙岗布吉参加一个风投对接的活动,今晚(6号)会出发. 因为:在深圳会呆几天,而且这个 ...

  6. JMessage是让App 同时集成 Push 功能与 IM 功能最完美的方案

    历经几个月的沉寂,以及兄弟们的奋战,极光推送的兄弟产品诞生了:极光IM,英文名 JMessage. 极光IM 是我们团队基于大量客户的需求反馈,在很多客户的殷切期盼下所开发的.团队成员一方面要支撑极光 ...

  7. 网络信息安全攻防学习平台 上传,解密通关writeup

    上传关 [1]查看源代码,发现JS代码.提交时onclick进行过验证.ctrl+shift+i 打开开发者工具,将conclick修改为 return True,即可以上传上传php文件,拿到KEY ...

  8. Repcached实现memcached复制

    1.介绍     repcached是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它的master/slave都是可读写的,而且可以相互同步,如果 ma ...

  9. 3301: [USACO2011 Feb] Cow Line

    3301: [USACO2011 Feb] Cow Line Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 82  Solved: 49[Submit ...

  10. ST HW2 fault & error & failure

    Software Testing 3014218128 牛菲菲 Below are two faulty programs. Each includes a test case that result ...