Monkeyrunner脚本的编写总结

目录

Monkeyrunner 脚本的使用方法

Monkeyrunner 结果的判断

Monkeyrunner执行多遍脚本如何处理?

一台PC如何跑多台终端


  • Monkeyrunner 脚本的使用方法

转载自:https://blog.csdn.net/pugongying1988/article/details/7345597

1. #导入模块;
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

2. #连接当前设备,并返回一个MonkeyDevice对象;
    device = MonkeyRunner.waitForConnection()
    if not device:
        print "Please connect a device to start!"
    else:
        print "Start "
   
3. #安装Android包,注意,此方法返回的返回值为boolean,由此可以判断安装过程是否正常 ;
    device.installPackage('myproject/bin/MyApplication.apk')

device.removePackage ('com.example.android.notepad')
print ('卸载成功')
device.installPackage('ApiDemos.apk')
print ('安装成功')

4. #启动一个Activity;
   device.startActivity

(component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')

5. #截图;
    result = device.takeSnapshot()
    result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')

6. #时延(秒);
    MonkeyRunner.sleep(3)

7. #滑动屏幕;
    for i in range(1,70):

        device.drag((250,850),(250,110),0.1,10)

     //开始,结束,持续时间,步骤   

    for i in range(1,70):
       device.drag((250,110),(250,850),0.1,10)
   MonkeyRunner.sleep(1)

8. #触击屏幕;
    device.touch(507,72,"DOWN_AND_UP")

9. #执行adb shell命令;
    device.shell("input text goup01")

 

10.重启:

    device.reboot()

 

11.唤醒

    device.wake();

按下HOME键     device.press('KEYCODE_HOME','DOWN_AND_UP')
按下BACK键     device.press('KEYCODE_BACK','DOWN_AND_UP')
按下下导航键     device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
按下上导航键     device.press('KEYCODE_DPAD_UP','DOWN_AND_UP')
按下OK键     

device.press('KEYCODE_DPAD_CENTER','DOWN_AND_UP')
        

相应的按键对应的名称如下:

home键:KEYCODE_HOME
back键:KEYCODE_BACK
send键:KEYCODE_CALL
end键:KEYCODE_ENDCALL
上导航键:KEYCODE_DPAD_UP
下导航键:KEYCODE_DPAD_DOWN
左导航:KEYCODE_DPAD_LEFT
右导航键:KEYCODE_DPAD_RIGHT
ok键:KEYCODE_DPAD_CENTER
上音量键:KEYCODE_VOLUME_UP
下音量键:KEYCODE_VOLUME_DOWN
power键:KEYCODE_POWER
camera键:KEYCODE_CAMERA
menu键:KEYCODE_MENU

 

monkeyrunner的功能脚本编写完成之后,我们就需要对结果进行判断,判断结果是否为我们预期的结果值。下面我们主要讲述2种方式判断结果。

方式一、monkeyrunner截图对比

这是monkeyrunner非常有特色的一种方式,用于通过设备屏幕前后的对比来获取对执行结果的判断。使用.sameAs()对比截图,获得测试结果。

复制代码

#连接设备
device = MonkeyRunner.waitForConnection()
#当前页面截图
image = device.takeSnapshot()
#去文件中找到我们要对比的正确的图片(这里比如存储在F盘,命名为result.png),与该截图image进行对比
result = MonkeyRunner.loadImageFromFile('F:\\result.png')
#判断图片相识度是否是90%(这个比值根据需求来定)
if image.sameAs(result,0.9):
    print "图片对比成功"
else:
    print "图片对比失败"

复制代码

这种方式虽然比较常见,但是如果屏幕分辨率一旦改变,就使得对比结果无效,代码可移植性很低,不稳定。

下面推荐一种通过控件id或文字判断结果的方式。

方式二、monkeyrunner文字对比

1.EasyMonkeyDevice

这种文字对比方式,主要是利用EasyMonkeyDevice中的exists(By selector)和getText(By selector)两种方法来判断。关于EasyMonkeyDevice,后续有文章会专门介绍其所有的API。

核心代码如下(代码中的packageName和activity要换成自己需要的包名和活动名):

复制代码

#coding:utf-8
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
#提供了根据ID进行访问
from com.android.monkeyrunner.easy import EasyMonkeyDevice
#根据ID返回PyObject的方法
from com.android.monkeyrunner.easy import By
#连接设备
device = MonkeyRunner.waitForConnection()
#packageName、activity根据自己的需求获取,启动app
componentName = packageName + '/' + activity
device.startActivity(component = componentName)
#必须在activity启动之后
easy_device = EasyMonkeyDevice(device)   
#判断结果页面中是否有特定控件ID:如果有,则获取该控件上的文本;若没有,则直接出对比结果 
if easy_device.exists(By.id('id/btn_loginout')) == True:
    text = easy_device.getText(By.id('id/btn_loginout'))
    if text.encode('utf-8') == '注销':
        print "login success"
    else:
        print "login failed"
else:
    print "login failed"

复制代码

注:控件text需要具有唯一性。

2.HierarchyViewer

这个方法的API和EasyMonkeyDevice类似,主要用到findViewById和getText来判断。关于HierarchyViewer各API,后续有文章介绍。

由于方法和EasyMonkeyDevice类似,这里不再赘述。核心代码如下:

device=MonkeyRunner.waitForConnection()
hierarchy_viewer = device.getHierarchyViewer()
login_button = hierarchy_viewer.findViewById('id/btn_loginout')
text =  hierarchy_viewer.getText(login_button)
print text.encode('utf-8')

最后,再补充一句,还可以根据EasyMonkeyDevice的getFocusedWindowId接口来获取当前页面的窗口ID,即activity,或者,根据HierarchyViewer的getFocusedWindowName来获取当前页面的packageName/activityName。从而方便monkeyrunner脚本中各页面的切换。

注:每个窗口的activity并不是唯一的,所以当activity相同时,需要activity的Fragment来判断当前页面。(判断方法后续讲述,主要用sdk/tools/uiautomatorviewer)

核心代码如下,欢迎拍砖:

#获取当前页面窗口ID
winId = easy_device.getFocusedWindowId()
print winId.encode('utf-8')
  • Monkeyrunner执行多遍脚本如何处理?

在\sdk\tools新建一个.bat文件(新建一个txt文本,编辑好保存之后修改后缀名为bat即可)

.bat文件里的内容:

@echo off  
#进入\sdk\tools目录
G:  
cd G:\androidsdk\android-sdk-windows\tools  

#执行 call命令会让monkeyrunner脚本顺序执行
call monkeyrunner  W:\monkeyrunner\play_back.py W:\monkeyrunner\aa.mr

call monkeyrunner W:\monkeyrunner\play_back.py W:\monkeyrunner\002aa.mr

call monkeyrunner W:\monkeyrunner\play_back.py W:\monkeyrunner\003aa.mr

#执行完之后,出现一个提示“请输入任意键继续....”表示已经执行完了
pause
---------------------
作者:懒仙仙
来源:CSDN
原文:https://blog.csdn.net/lfx_xianxian/article/details/78967870?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

 

  • 一台PC如何跑多台终端

 devices1=MonkeyRunner.waitForConnection(5,"1234567890ABCDEF")

5为等待时间

"1234567890ABCDEF"为设备串号, adb devices查询得到

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值