第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息。
在上一节的第一个“增加日记”的示例中,我们并没有看到日记是否真的增加成功了,也就是说当时并没有进行结果比较。其实在MonkeyRunner框架中,测试结果的比较往往都是通过截屏比对来完成的。而截屏比对相关的方法主要是由MonkeyImage这个类来实现的,但截屏这个动作确是由MonkeyDevice提供的takeSnapshot这个方法来达成的。所以这一节我们主要就是去熟悉截屏比对相关的测试代码编写的基础知识。
开始之前我们先看下这一节我们会用到的截屏对比的相关方法已经它们所在的类。
表3-3-1 示例代码所用关键方法列表
下面我们就通过一个示例代码来看下应该如何运用这些方法来对测试结果进行比较。该示例延续上一节“新增日记”的第7步新增加一个日记开始,然后会对该日记的内容进行修改,最后会比较修改前后的两个对日记内容的截屏看是否是一致的。因为预期是不一致的,所以如果一致的话就代表出错了,这时就会把修改前后两张图片保存到桌面以便查看。
我们先看一下在上一节“新增日记”的第七步完成后的NotePad的情况:
图3-3-1 日记当前状态
第八步:点击该日记标题进入日记修改页面NoteEditor
代码3-3-1 打开当前日记
42 #Step 8:Open the note
43 MonkeyRunner.sleep(3)
44 device.touch(240,120,MonkeyDevice.DOWN_AND_UP)
45
46 MonkeyRunner.sleep(3) #Wait a bit for the new page to get ready
通过上图的右下角,我们可以知道当前日记的坐标边界在哪里,从而可以获得在该边界范围内的有效点击坐标,比如这里我们用的是(240,120)这个坐标点。获得该日记的有效点击坐标之后,就可以在44行发送触控命令touch来模拟对该日记的点击了。一旦点击后,NotePad就会打开该日记并跳到NoteEditor页面让用户可以对该日记的内容进行编辑。
第九步:获取日记原内容控件子图
在跳转到日记编辑页面之后,我们就需要去把装载该日记内容的控件的截屏子图给获得,而获得该截屏子图需要分两步走:第一步就是要先对整个屏幕进行截屏操作;第二步就是要在整个屏幕截屏的基础上确定内容控件的边界,然后获取该边界范围内的子图。下图给出了通过uiautoatorviewer工具获得的日记内容控件的边界:
图3-3-2 原日记内容及控件边界
代码3-3-2 获取日记内容子图
48 #Step 9: Take a snapshot for the current note content
49 imgOrigin = device.takeSnapshot()
50 subImgOrigin = imgOrigin.getSubImage((0,76,480,391))
首先通过第49行的MonkeyDevice的takeSnapshot方法获得整个屏幕的截图,然后在该截图的基础上,第50行就可以根据上面我们通过uiautomatorviewer工具确定的日记内容子图的范围来获取到日记内容子图。有了该子图后,往下我们就可以和内容修改后的日记进行比较,比对修改看是否成功了。
第十步:修改日记内容并保存
代码3-3-3 修改日记内容并保存
52 #Step 10: Add something to the content of the note and save it
53 device.type("YourFirstNote")
54
55 device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP);
56
57 MonkeyRunner.sleep(3) #Wait a bit for the new page to get ready
58
59 device.touch(150,650,MonkeyDevice.DOWN_AND_UP)
代码的几个关键方法我们在上一节已经学习过了,这里就不做累述。需要提一点的是在修改内容后按下系统菜单键弹出来的Save菜单项的有效点击坐标同样可以通过uiautomatorviewer获得,只需要先获得该控件所在的边界,然后确定一个落在其中的边界就可以了,边界如下图所示:
图3-3-3 Save菜单项坐标
第十一步:重新打开日记内容并获取子图
代码3-3-4 重新打开日记内容并获取子图
61 #Step 11: Open the note again and take another snapshot
62 MonkeyRunner.sleep(3)
63 device.touch(240,120,MonkeyDevice.DOWN_AND_UP)
64
65 MonkeyRunner.sleep(3) #Wait a bit for the new page to get ready
66
67 imgNew = device.takeSnapshot()
68 subImgNew = imgNew.getSubImage((0,78,480,391))
在上一步保存好新增加的日记内容之后,NotePad应用会自动返回到NotesList这个Activity界面来列出所有的日记,在我们这里的示例中只有一个日记。以上代码63行就是直接点击该日记,然后进入到NoteEdtor页面显示出日记内容,最后在69-68行获取到日记内容的子图,整个流程和上面第八步加上第九步是一样的,只是这里没有把打开日记和获取子图分成两步来完成而已。下图显示了打开修改后的日记的内容及内容子图获取的边界。
图3-3-4 修改后日记内容及控件边界
第十二步,比较日记修改前后的内容
代码3-3-5 比较日记修改前后内容并保存截图
70 #Step 12: Compare the two images
71 res = subImgNew.sameAs(subImgOrigin,1)
72
73 #assert res == True
74
75 if not res == True:
76 subImgNew.writeToFile("/Users/apple/Desktop/subImgNew.png",
"png")
77 subImgOrigin.writeToFile("/Users/apple/Desktop/subImgOrg.png",
"png")
通过前面的步骤获得日记内容修改前后的截图后,就可以通过71行的MonkeyImage的sameAs方法对两个截图的内容进比较了。其中第二个参数设置成1,代表两种图如果是一模一样的才会认为是一致的。而我们这里预期的是两个图的内容是不一致的,因为一个内容没有修改过,一个内容由修改过。所以在75行会判断如果返回结果认为这两个图是一致的话,就需要把这两个图保存起来,我这里是保存在桌面,以便我们往后手动去检查究竟是否两个图真的是一样的,还是我们的代码除了问题了。
——— 未完待续———
作者:天地会珠海分舵
微信公众号:TechGoGoGo
微博:http://weibo.com/techgogogo
CSDN:http://blog.csdn.net/zhubaitian
第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例(原创)的更多相关文章
- 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件
老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...
- 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态 poptest是国内唯一 ...
- 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer poptest是国内唯一一家培养 ...
- 老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化
老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...
- 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述 HierarchyViewer库的引入让M ...
- 老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程
老李推荐:第14章1节<MonkeyRunner源码剖析> HierarchyViewer实现原理-面向控件编程VS面向坐标编程 poptest是国内唯一一家培养测试开发工程师的培训机 ...
- 老李推荐:第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结
老李推荐:第8章7节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-小结 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...
- 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本
老李推荐:第8章5节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行测试脚本 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化 ...
- 老李推荐:第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结
老李推荐:第6章8节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-小结 本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事 ...
- 老李推荐:第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化
老李推荐:第8章1节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行环境初始化 首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目 ...
随机推荐
- ADN中国队参加微软Kinect他赢得了全国比赛三等奖,我们的创意项目与团队Kinect于Naviswork虚拟之旅
以下是我的英语写了一个简短的总结,直接贴出来. 让我们知道我们在这参加Hackathon That's an exciting Hackathon for me and also China team ...
- Android应用启动还有一个应用
已知包名和应用入口Activity 包名:org.ww 应用入口:Activity:org.ww.TestActivity Intent intent = new Intent(); intent.s ...
- API访问客户端
API访问客户端(WebApiClient适用于MVC/WebForms/WinForm) 这几天没更新主要是因为没有一款合适的后端框架来支持我们的Web API项目Demo, 所以耽误了几天, 目前 ...
- js 模块化的规范
The Module Pattern,模块模式,也译为模组模式,是一种通用的对代码进行模块化组织与定义的方式.这里所说的模块(Modules),是指实现某特定功能的一组方法和代码.许多现 ...
- SQL Server安全性专题一:简介
原文:SQL Server安全性专题一:简介 一. 安全威胁与法则 1. 安全定义 2. 安全威胁 3. 安全法则 安全定义: 在SQLServer环境中,安全性可以认为是[数据保护].包括: 数 ...
- SpringMVC源代码深度分析DispatcherServlet核心的控制器(初始化)
SpringMVC是非常优秀的MVC框架,每一个框架都是为了我们提高开发效率,我们试图通过对SpringMVC的源码去了解这个框架,了解整个设计思想,框架要有扩展性,这里用的比較多是接口和抽象,是框架 ...
- JAVA该队列中的数组,圆阵队列,链队列
/** * 文件名:QueueText.java * 时间:2014年10月22下午9:05:13 * 笔者:维亚康姆维修 */ package chapter3; /** * 类名:ArrayQue ...
- HDU1069_Monkey and Banana【LCS】
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- CentOS7 安装kubernetes
2台机器,1台为Master,1台为Node 修改Host Master为dmaster,Node为dslave 安装K8s and Etcd 在Master机器上安装 yum install etc ...
- WiX Toolset
原文:WiX Toolset 公司换软件打包平台,弄了一个月,Wix toolset的中文资料真的不多,逼着自己看了不少英文资料,终于弄懂了WiX打包的过程,做出了满足要求的安装包 一点基本概念:(F ...