先说下本人是菜鸟,通过网上资料学习,终于调通了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. jQuery 事件 - bind() 方法

    定义和用法 bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数. 实例1(一个事件) 记得把js引用地址换掉 当点击鼠标时,隐藏或显示 p 元素: <html&g ...

  2. javascript动画效果之匀速运动

    html和css写在一起方便看,div通过定位设置为-200隐藏,span也是通过定位定在div靠左的中间 <!DOCTYPE html> <html> <head> ...

  3. unity 退到桌面的 OnApplicationPause

    void OnApplicationFocus( bool isFocus ) { // Debug.Log("--------OnApplicationPause---" + i ...

  4. Linux通过XAMPP集成软件包搭建LAMPP环境

    前面介绍过一篇“Linux手动搭建LAMP环境”,今天再来整理一篇“Linux通过XAMPP集成软件包搭建LAMPP环境”. 其实当初整理通过XAMPP集成软件包搭建LAMPP环境的原因是这样的: 自 ...

  5. JPA 系列教程15-继承-一个表-SINGLE_TABLE

    继承映射策略 一个类继承结构一个表的策略,最终只生成一个表,这是继承映射的默认策略. 举例 如果实体类Teacher继承实体类Person,实体类Student也继承自实体Person,那么只会映射成 ...

  6. sql 查询一段时间内某个时间点数据

     SELECT  CONVERT(VARCHAR(10), dtCreateTime, 120) AS dtStatisticsCreateDate, COUNT(1) AS nStatisticsC ...

  7. json数据格式在IE浏览器中报错问题

    如果一个json数据,最后一个数据的后面带有分号,则在IE浏览器中会报错 { "books": [ { "language":"Java" ...

  8. php项目第三季

    1.百度浏览器路径写相对路径 2.svn--setting中两个勾去掉,第二页一个勾打上.工程上右击update是更新,commit是提交. 3.Deprecated: mysql_connect() ...

  9. 如何在MFC中启动其它的(.exe)可执行文件

    ShellExecute(NULL,   "open",   "http://www.sina.com.cn",   NULL,   NULL,   SW_SH ...

  10. php:sprintf

    十六进制 $hex = sprintf("%x",18); 输出:12(%x表示十六进制) $hex = sprintf("%4x",18); 输出:strin ...