zoukankan      html  css  js  c++  java
  • 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:MDshot"+str(photo_id)+".png")
            print "E:MDshot"+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
  • 相关阅读:
    uWSGI 是一種協議,同時它也是一個程式。
    影像数据的裁切和保存
    Android Studio、IDEA 获取开发版SHA1值和发布版SHA1值,详细过程
    Android Studio的Signature Versions选择,分别是什么意思
    Android Studio更改项目SDK的版本
    c#+ArcGIS Engine-获取矢量图层的空间参考
    64。node.js 中间件express-session使用详解
    63.note.js之 Mongodb在Nodejs上的配置及session会话机制的实现
    62.nodejs中的ejs模板学习
    61.node.js开发错误——Error: Connection strategy not found
  • 原文地址:https://www.cnblogs.com/luolizhi/p/5641847.html
Copyright © 2011-2022 走看看