老李推荐:第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类

 

每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行了事,而有些是需要在解析后创建相应的事件类实例并添加到命令队列里面排队执行。负责这部分工作的就是命令翻译类。那么我们往下还是继续在MonkeySourceNetwork这个范畴中MonkeyCommand类是怎么一回事:

图6-3-1 MonkeyCommand族谱

图中间的MonkeyCommand是一个接口,主要定义了translateCommand这个方法,它接收的参数是一个字串命令以及参数的列表以及命令队列,所有实现类都必须实现这个方法来对命令字串进行解析翻译:

  • 如果命令字串需要建立对应MonkeyEvent实例的,则将该命令字串翻译成对应的MonkeyEvent实例并加入到传进来的命令队列
  • 如果命令字串不需要建立对应的MonkeyEvent实例的的,那么直接解析执行该命令字串,然后返回

命令字串格式

命令翻译类

MR是否支持

注释

touch down x y

TouchCommand

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

touch up x y

TouchCommand

同上

touch move x y

TouchCommand

同上

tap x y

TapCommand

同上

press name

PressCommand

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

key down name

KeyCommand

同上

key up name

KeyCommand

同上

getvar name

GetVarCommand

name 代表属性名

listvar

ListViewsCommand

type line

TypeCommand

line 代表输入字串

wake

WakeCommand

listViews

ListViewsCommand

queryview

QueryViewCommand

getRootView

GetRootViewCommand

getViewWithText

GetViewsWithTextCommand

done

N/A

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

quit

N/A

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

flip open

MonkeyFlipEvent

MonkeyRunner不支持发送这两个命令

flip close

MonkeyFlipEvent

trackball dx dy

deferredReturn

DeferReturnCommand

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

注: MR代表MonkeyRunner

表6-3-1 命令字串和对应的命令翻译类参照表

MonkeyCommand中所有的类其实都是内部类,比如网络命令相关的命令翻译类或者是MonkeySourceNetwork的子类,或者是MonkeySourceNetworkVars的子类,不然就是MonkeySourceNetworkViews的子类:

图6-3-2 命令翻译类作为事件源的内部类

一旦事件源获取到字串命令就能很方便的通过COMMAND_MAP调用内部的命令翻译类来把命令翻译出来处理,所以我们也可以认为事件源依赖相应的命令翻译类来做事情:

图6-3-3 事件源依赖命令翻译类

下一小节我们通过一个实例去看事件翻译类是如何把MonkeyRunner发送过来的字串命令翻译出来并转换成事件实例的。

老李推荐:第6章3节《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. ROM及其他知识

     ROM--Read Only Memory 中文意思是:只读存贮器  以前的游戏机用的都是卡带,里面是一块或几块集成电路芯片,游戏程序就是在生产厂家一次性写入这几块芯片,以后用户玩游戏的时候只能读出 ...

  2. 通过oledb驱动读取excel、csv数据丢失解决方案

    1.问题出现 在开发应用程序的过程中,比较常用一功能就是通过oledb驱动读取excel.csv.text等文件:而最近有客户反映,在使用短信平台(下载地址:http://www.sms1086.co ...

  3. Visual Studio 2013 百度云下载地址

    Visual Studio 2013 百度云下载地址 链接:http://pan.baidu.com/s/1sjFifox 密码: ipqe VS2013注册码:BWG7X-J98B3-W34RT-3 ...

  4. Java设计模式之《组合模式》及应用场景

    摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6489827.html 组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是 ...

  5. 浅析=======Struts2之==========valueStack

    今天刚学习了struts2的valueStack,在这里把自己学到的做个分享,说道valueStack就不得不提OGNL表达式=== struts2工作流程 1.OGNL(Object Graph N ...

  6. Caffe学习系列(一)Ubuntu16.04下搭建编译Caffe环境,并运行MNIST示例(仅CPU)

    前言: 正文: 1.安装必要依赖包: sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev l ...

  7. Objective-C日记-之KVC

    KVC(Key-Value-Coding?) 1, 概述 以字符串形式向对象的实例变量或属性(Property)发送或者获得值的方法. 2,用法 a,取值 @property (readwrite,c ...

  8. nodejs学习第一天之模块

    1.运行js文件 2.node 与 js 的区别 相同:数据类型,语法结构,对象  等基本一致 不同:在js中的顶层对象window 在node中没有在node中 顶层对象为global对象 其不对外 ...

  9. 1059: [ZJOI2007]矩阵游戏

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2154  Solved: 1053[Submit][Stat ...

  10. Python实现的异步代理爬虫及代理池

    使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理.同时用aiohttp实 ...