先说下本人是菜鸟,通过网上资料学习,终于调通了MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出,以后做静态UI测试就不需要眼睛盯着看图了,这一切交给MonkeyRunner了。

首先通过monkeyrunner录制脚本 test.mr

test.mr

TOUCH|{'x':265,'y':1232,'type':'downAndUp',}
WAIT|{'seconds':5.0,}
TOUCH|{'x':355,'y':189,'type':'downAndUp',}
WAIT|{'seconds':5.0,}
TOUCH|{'x':85,'y':322,'type':'downAndUp',}
WAIT|{'seconds':5.0,}
TOUCH|{'x':371,'y':893,'type':'downAndUp',}
WAIT|{'seconds':5.0,}
TOUCH|{'x':371,'y':893,'type':'downAndUp',}
WAIT|{'seconds':5.0,}
TOUCH|{'x':47,'y':778,'type':'downAndUp',}
WAIT|{'seconds':5.0,}
TOUCH|{'x':657,'y':88,'type':'downAndUp',}
WAIT|{'seconds':5.0,}

然后通过python写自动截屏对比功能 monkey_snapshot.py

#!/usr/bin/env monkeyrunner
# Copyright 2010, The Android Open Source Project
#coding=utf8
import sys
from com.android.monkeyrunner import MonkeyDevice
from com.android.monkeyrunner import MonkeyImage
from com.android.monkeyrunner import MonkeyRunner CMD_MAP = {
'TOUCH': lambda dev, arg: dev.touch(**arg),
'DRAG': lambda dev, arg: dev.drag(**arg),
'PRESS': lambda dev, arg: dev.press(**arg),
'TYPE': lambda dev, arg: dev.type(**arg),
'WAIT': lambda dev, arg: MonkeyRunner.sleep(**arg)
} def process_file(fp, device,photo_id):
for line in fp:
(cmd, rest) = line.split('|')
try:
rest = eval(rest)
except:
print 'unable to parse options'
continue if cmd not in CMD_MAP:
print 'unknown command: ' + cmd
continue CMD_MAP[cmd](device, rest)
print cmd
pic_name='./shot'+str(photo_id)+'.png'
result = device.takeSnapshot() #compare picture
result2 = MonkeyRunner.loadImageFromFile("E:\MD\shot"+str(photo_id)+".png")
print "E:\MD\shot"+str(photo_id)+".png" flag = result.sameAs(result2,0.95)
if (flag == False):
print 'prapre to save new png '+pic_name
result.writeToFile(pic_name,'png') photo_id+=1
print "All PlayBack Action Captured,Total:"+str(photo_id)+' PNG Saved'
print "===============================================================" def main():
print "Ok,Now StarRuning MyZXX MonkeyRuner SnopShoot Shell"
print "==============================================================="
device = MonkeyRunner.waitForConnection()
package = 'com.qunsheng.md'
activity = 'com.qunsheng.md.activity.WelcomeActivity'
runComponent = package + '/' + activity
device.startActivity(component=runComponent)
MonkeyRunner.sleep(30)
#device.press('KEYCODE_MENU','DOWN_AND_UP')
#result = device.takeSnapshot()
#result.writeToFile('./shot5.png','png') file = sys.argv[1]
fp = open(file, 'r')
photo_id=0
process_file(fp, device,photo_id)
fp.close(); if __name__ == '__main__':
main()

最后脚本运行,将图片对比后95%部分都不相像的截图自动保存在当前目录

monkeyrunner monkey_snapshot.py E:\test.mr

MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出的更多相关文章

  1. html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)

    // html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过..###重点参考js代码### <div> < ...

  2. [Egret]长按截屏分享、分享截屏图片、本地存储

    egret 分享有API可以把一个显示对象树渲染成一个位图纹理,我把它赋值给 HTML 的 Image 元素,就实现了图片的显示,在微信中,通过长按图片可以分享出去.当然在其他浏览器可以保存在本地. ...

  3. iOS 点击按钮截屏

    @interface CaptureViewController () @property (nonatomic, strong) UIImageView *backgrounView; //控制器背 ...

  4. 关于Unity中GrabPass截屏的使用和Shader的组织优化

    GrabPass截屏 可以用来截屏,截屏后把纹理传给下一个通道使用. 1:使用抓屏通道, GrabPass {} 或 GrabPass { “ 纹理名称”}; 使用GrabPass {}后,可以用_G ...

  5. C# 编写一个简单易用的 Windows 截屏增强工具

    半年前我开源了 DreamScene2 一个小而快并且功能强大的 Windows 动态桌面软件.有很多的人喜欢,这使我有了继续做开源的信心.这是我的第二个开源作品 ScreenshotEx 一个简单易 ...

  6. javascript实现当前页面截屏

    javascript实现当前页面截屏 一.前言 有客户要求能对用户当前页面进行指定区域截屏,类似qq截屏的实现效果.比如用户在处理工作的时候,将当前页面录入后的一些信息进行截图下载保存.但又不能安装任 ...

  7. robotFramework——截屏

    测试执行过程中进行截屏并且保存,是任何一款自动化测试工具或者框架必备的功能.那么Robotframework如何进行截屏呢?Robotframework提供了一个“Screenshot”库.    使 ...

  8. html2canvaces用法,js截屏并且下载

    1.首先自己下载引入html2canvaces和jquery(我的demo路径是自己本地的) 2.点击截屏按钮后,跳出层的其他部分是取消保存,点击截取获得的图片区域,表示保存 <!DOCTYPE ...

  9. ios开发小技巧之摇一摇截屏

    1. 监控摇一摇动作 1> 让当前视图控制器成为第一响应者 // 必须先让当前视图控制器成为第一响应者才能响应动作时间 [self becomeFirstResponder]; 2> 实现 ...

随机推荐

  1. Chapter 14_3 非全局的环境

    关于“环境”的一大问题在于它是全局的,任何对它的修改都会影响程序的所有部分. 例如:若安装一个元表用于控制全局变量的访问,那么整个程序都必须遵循这个规范. 当使用某个库时,没有先声明就使用了全局变量, ...

  2. BcdTool(系统启动菜单管理器) v1.0912 绿色版

    软件名称: 系统启动菜单管理器(BcdTool)软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 903KB图片预览: 软件简介:BcdTool是一款windows ...

  3. sql参数化查询避免注入漏洞的原因探析

    网上其他同学的都说是重用执行计划,将用户输入的作为文本查询,到底如何实现,我用下面三行代码来解析一下. DECLARE @test NVARCHAR() SET @test=' or 1='1 SEL ...

  4. Windows命令查看文件MD5码

    D:\>certutil -hashfile md5test.txt MD5 MD5 哈希(文件 md5test.txt): d6 f6 bb 38 b5 6b 67 8f 34 9b e4 d ...

  5. 四、oracle 用户管理(Profile)

    oracle 用户管理 :profile + tablespace + role + user  一.使用profile管理用户口令概述:profile是口令限制,资源限制的命令集合,当建立数据库时, ...

  6. IOS应用的国际化

    IOS应用的国际化,主要分为3个部分: Info.plist 文件的国际化 .xib文件的国际化 .m文件的国际化 下面我就来一一说明. Info.plist 文件的国际化我们使用Xcode 4.5 ...

  7. sql语句-排序后加入序号再运算判断取想要的项

    select a.id as aid,b.id as bid,a.city,a.cang,a.sid,a.time as atime,b.time as btime,a.price as aprice ...

  8. VMware 8安装苹果操作系统Mac OS X 10.7 Lion正式版

    今天介绍下VM8下安装Mac OS X 10.7  1.工具篇       下载Vmware Workstation 8.0正式版http://115.com/file/bhyk1l2u#       ...

  9. MFC实现登录对话框连接access数据库方式

    编写一个简单的登录对话框 大家好,我们利用MFC编写一个简单的登录对话框.主窗体是单文档界面.程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来. 1.开打VC++6.0.点 ...

  10. java中的静态初始化块

    Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...