首页 > 其他 > 详细

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

时间:2015-12-28 18:22:17      阅读:183      评论:0      收藏:0      [点我收藏+]

每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行了事,而有些是需要在解析后创建相应的事件类实例并添加到命令队列里面排队执行。负责这部分工作的就是命令翻译类。那么我们往下还是继续在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原理分析-事件源-事件源概览-命令翻译类

原文:http://www.cnblogs.com/poptest/p/5083211.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!