MonkeyRunnerStarter是MonkeyRunner启动时的入口类,由于它里面包括了main方法.它的整个启动过程主要做了以下几件事情: 解析用户启动MonkeyRunner时从命令行传输进来的參数: 由于MonkeyRunner须要依据指定的參数才干做事情,比方输入的一个须要执行的脚本. 假设确实不知道不论什么參数的话它就会进入MonkeyRunner的交互模式,事实上就是Jythong的交互模式,让用户能够边写代码边执行 启动AndroidDebugBridge: 事实上就是启动…
我们这一节会先去分析下monkeyrunner是如何对参数进行处理的,我们跳转到MonkeyRunnerOptions这个类里面的processOptions这个方法: 93   public static MonkeyRunnerOptions processOptions(String[] args) 94   { 95     int index = 0; 96 97     String hostname = DEFAULT_MONKEY_SERVER_ADDRESS; 98     F…
本章我们重点环绕处理网络过来的命令的MonkeySourceNetwork这个事件源来阐述学习Monkey是怎样处理MonkeyRunner过来的命令的.以下总结下MonkeyRunner从启动Monkey開始到怎样处理完毕一个命令的流程总结例如以下: MonkeyRunner通过ADB发送shell命令"monkey --port 12345"来启动Monkey Monkey启动运行进入runMonkeyCycles方法来循环获取并运行事件 runMonkeyCycles方法首先依据…
在工作中由于要追求完毕目标的效率,所以很多其它是强调实战.注重招式.关注怎么去用各种框架来实现目的.可是假设一味仅仅是注重招式.缺少对原理这个内功的了解,相信自己非常难对各种框架有更深入的理解. 从几个月前開始接触ios和android的自己主动化測试.原来是本着只为了提高測试团队工作效率的心态先行作浅尝即止式的研究,然后交给測试团队去边实现边自己研究.最后由于各种原因果然是浅尝然后就止步了,而自己终于也离开了上一家公司. 换了工作这段时间抛开全部杂念和曾经的困扰专心去学习研究各个框架的使用,逐…
在第2节中我们看到了MonkeySourceNetwork是怎样从Socket中获取MonkeyRunner发送过来的命令字串的,可是最后怎样将它翻译成事件的代码我们还没有进行分析,由于在那之前我们还没有了解命令翻译类的相关知识.那么经过第3小节对命令翻译类的学习后,我们就能够继续往下分析MonkeySourceNetwork的getNextEvent中是怎样翻译命令字串的了. 我们回看下第2小节,最后在获得命令字串之后调用的是MonkeySourceNetwork类的translateComm…
上一节我们看到在启动AndroidDebugBridge的过程中会调用其start方法,而该方法会做2个基本的事情: 715行startAdb:开启AndroidDebugBridge 722-723行:初始化android设备监控并启动DeviceMonitor设备监控线程. 当中第一点我们上一小节已经做了详尽分析了,那么我们往下就去分析下第2点. DeviceMonitor基本的功能就是监控是否有安卓设备拔除或者连接上来,然后对每一个连接上来的设备的全部可调式进程进行监控.这个功能很多其它是…
在上一章中我们有简要的介绍了事件源是怎么一回事.可是并没有进行详细的描写叙述.那么往下的这几个小节我们就须要把这方面的知识给补充完整. 这一节我们先主要环绕MonkeySourceNetwork这个事件源来学习事件源的框架结构.首先,要理解事件源,必须先搞清楚几个问题: 事件从哪里来? Monkey的事件来源有多个方面,可是作为MonkeyRunner框架的一部分,它的事件来源主要是来自MonkeyRunner通过网络Socket(USB/TCP协议)发送过来的命令字串.MonkeySource…
MonkeyRunner在准备好AndroidDebugBridge和DeviceMonitor等服务之后,就基本上是攻克了和目标设备通信的问题了,那往下须要做的就是把測试脚本执行起来了. 178 public static void main(String[] args) { 179 MonkeyRunnerOptions options = MonkeyRunnerOptions.processOptions(args); 180 181 if (options == null) { 182…
在上几节的描写叙述中,我们把HierarchyViewer初始化好.也把ViewServer给装备好了.那如今距离获得一个控件去操作它是万事具备仅仅欠东风了,欠了那一股春风了?欠了的是建立控件树这个东风.由于HierarchyViewer依据ID去获取一个控件之前是须要先建立好控件树.然后从该控件树上依据ID去查找到目标控件的. 那么这一小节我们就先去看下HierarchyViewer是怎样去ViewServer获取控件列表,然后怎样把每一个控件的信息解析出来,最后组成一个由根控件開始的一颗控件…
在初始化HierarchyViewer的实例过程中,HierarchyViewer会调用自己的成员方法setupViewServer来把ViewServer装备好,那么我们这里先看下这种方法: 39 private void setupViewServer() { 40 DeviceBridge.setupDeviceForward(mDevice); 41 if (!DeviceBridge.isViewServerRunning(mDevice)) { 42 if (!DeviceBridg…