MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出
先说下本人是菜鸟,通过网上资料学习,终于调通了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.mrMonkeyRunner 实现自动点击截屏后与本地图库进行对比输出的更多相关文章
- html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)
		// html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过..###重点参考js代码### <div> < ... 
- [Egret]长按截屏分享、分享截屏图片、本地存储
		egret 分享有API可以把一个显示对象树渲染成一个位图纹理,我把它赋值给 HTML 的 Image 元素,就实现了图片的显示,在微信中,通过长按图片可以分享出去.当然在其他浏览器可以保存在本地. ... 
- iOS 点击按钮截屏
		@interface CaptureViewController () @property (nonatomic, strong) UIImageView *backgrounView; //控制器背 ... 
- 关于Unity中GrabPass截屏的使用和Shader的组织优化
		GrabPass截屏 可以用来截屏,截屏后把纹理传给下一个通道使用. 1:使用抓屏通道, GrabPass {} 或 GrabPass { “ 纹理名称”}; 使用GrabPass {}后,可以用_G ... 
- C# 编写一个简单易用的 Windows 截屏增强工具
		半年前我开源了 DreamScene2 一个小而快并且功能强大的 Windows 动态桌面软件.有很多的人喜欢,这使我有了继续做开源的信心.这是我的第二个开源作品 ScreenshotEx 一个简单易 ... 
- javascript实现当前页面截屏
		javascript实现当前页面截屏 一.前言 有客户要求能对用户当前页面进行指定区域截屏,类似qq截屏的实现效果.比如用户在处理工作的时候,将当前页面录入后的一些信息进行截图下载保存.但又不能安装任 ... 
- robotFramework——截屏
		测试执行过程中进行截屏并且保存,是任何一款自动化测试工具或者框架必备的功能.那么Robotframework如何进行截屏呢?Robotframework提供了一个“Screenshot”库. 使 ... 
- html2canvaces用法,js截屏并且下载
		1.首先自己下载引入html2canvaces和jquery(我的demo路径是自己本地的) 2.点击截屏按钮后,跳出层的其他部分是取消保存,点击截取获得的图片区域,表示保存 <!DOCTYPE ... 
- ios开发小技巧之摇一摇截屏
		1. 监控摇一摇动作 1> 让当前视图控制器成为第一响应者 // 必须先让当前视图控制器成为第一响应者才能响应动作时间 [self becomeFirstResponder]; 2> 实现 ... 
随机推荐
- digitalocean最新优惠码赠送10美元
			digitalocean是我非常喜欢的vps服务商,目前手头还有十来个digitalocean vps服务器.用了三年多digitalocean后,我发现digitalocean一点小技巧.比如,如果 ... 
- 常用 NHibernate.Criterion
			Expression.Where<ScreenView>((v) => v.bizType != 0); 
- mysql sql语句大全(转载)
			1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 ... 
- 36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有
			//接口:CentralPartyCommittee package jieKou; public interface CentralPartyCommittee { void partyLeader ... 
- grub引导centos
			下面来主要讲一下在grub下来引导centos: 其步骤如下; a 进入grub的命令模式. b 先熟悉一下grub 的一些命令 grub>help c 熟悉一下cat命令 d ro ... 
- 什么是JDBC?
			JDBC是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力! 1.方式一(配置文件实现): <!-- 1. 连接池实例 --&g ... 
- java并发编程框架 Executor   ExecutorService   invokeall
			首先介绍两个重要的接口,Executor和ExecutorService,定义如下: public interface Executor { void execute(Runnable command ... 
- NGUI插件的一个扩展---NGUI_HUD_Text
			NGUI_HUD_Text扩展主要用于主角跟随和伤害/治疗的功能. 场景大概是这样的,我们希望有一个主角,在其头顶显示他的名字,在单击鼠标左键的时候显示红色的“-10”表示减少血量,单击鼠标右键的时候 ... 
- hdu_4718_The LCIS on the Tree(树链剖分+线段树合并)
			题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4718 题意:给你一棵树,每个节点有一个值,然后任给树上的两点,问这两点的最长连续递增区间是多少 题解: ... 
- 被非技术瓶颈阻挡了,没钱买Mac,挣扎ing
			最近一直没来写博客,因为一直在找刷盘子.服务生.看店的工. 已经找到,主要因为前阵子天不热,所以酒馆的顾客不多.现在好了. 只好买个Mac mini,看了很多帖子,也只好暂时折中这样了.Mac买不起. ... 
