monkeyrunner自动化测试工具--脚本模板及MonkeyRunner常用事件

一、手机安装app(今日头条)

二、写.PY的monkeyrunner脚本

基本样式:

#在程序中引入monkeyrunner模块
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
#连接到正在运行的设备戒模拟器上,返回一个MonkeyDevice对象
device = MonkeyRunner.waitForConnection()
#安装待测应用, installPackage会返回一个布尔值,来说明安装的结果
device.installPackage( "./CalcTest.apk")
#设置要启劢的活动类名,有包名和活动类组成
runComponent = "com.sky.jisuanji/.JisuanjizixieActivity“
#启动活动组件
device.startActivity(component = runComponent)

一个简单的功能,打开一个看新闻的头条app,然后截图,再按键home使其后台运行。,脚本保存为E盘目录下test0.py

#导入我们需要用到的包和类并且起别名
import sys
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根据ID进行访问
from com.android.monkeyrunner.easy import By    #根据ID返回PyObject的方法

#connect device 连接设备
#第一个参数为等待连接设备时间
#第二个参数为具体连接的设备
device = mr.waitForConnection()
if not device:
    print >> sys.stderr,"fail"
    sys.exit(1)
	
#定义要启动的Activity
componentName="com.ss.android.article.news/.activity.SplashActivity"

#启动特定的Activity
device.startActivity(component=componentName)
mr.sleep(3.0)

#takeSnapshot截图,获取程序运行界面截图
result = device.takeSnapshot()
#save to file 保存到文件
result.writeToFile('./shot1.png','png');#保存到sdk的tools根目录下
mr.sleep(3.0)
device.press('KEYCODE_HOME', device.DOWN_AND_UP)

三、PC运行该脚本

手机连接电脑后,PCcmd命令行输入 monkeyrunner E:\test0.py。执行成功。

ps:获取app包名和入口startActivity名称

使用aapt命令。aapt位于sdk的platform-tools中,如果没有就网上下载aapt .exe 并放入到sdk的platform-tools目录中

执行aapt dump badging E:\***.apk即可,运行后的结果中以下两行分别是应用包名package和入口activity名称




ps:monkeyrunner常用事件

#monkeyrunner导入模块

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

#monkeyrunner连接设备

device = MonkeyRunner.waitForConnection()
if not device:
print "Please connect a device to start!"
else:
print "Start "

#monkeyrunner启动一个Activity

componentName="com.ss.android.article.news/.activity.SplashActivity"

device.startActivity(component=componentName)

#monkeyrunner按键

发送指定键的关键事件:  device.press(参数1:键码, 参数2:触摸事件类型)

参数1:常用键内容

  按下HOME键 device.press('KEYCODE_HOME', MonkeyDevice.DOWN_AND_UP)

  按下BACK键 device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)

  按下下导航键 device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)

  按下上导航键 device.press('KEYCODE_DPAD_UP', MonkeyDevice.DOWN_AND_UP)

  按下OK键 device.press('KEYCODE_DPAD_CENTER', MonkeyDevice.DOWN_AND_UP)

  按下左导航键 device.press('KEYCODE_DPAD_LEFT', MonkeyDevice.DOWN_AND_UP)

  按下右导航键 device.press('KEYCODE_DPAD_RIGHT', MonkeyDevice.DOWN_AND_UP)

  相应的按键对应名称:

  menu键:KEYCODE_MENU

  home键:KEYCODE_HOME

  back键:KEYCODE_BACK

  search键:KEYCODE_SEARCH

  call键:KEYCODE_CALL

  end键:KEYCODE_ENDCALL

  上音量键:KEYCODE_VOLUME_UP

  下音量键:KEYCODE_VOLUME_DOWN

  power键:KEYCODE_POWER

  camera键:KEYCODE_CAMERA

#monkeyrunner卸载包

device.removePackage ('com.example.android.notepad')

print ('卸载成功')

#monkeyrunner安装包

device.installPackage('ApiDemos.apk')

print ('安装成功')

#monkeyrunner单击控件

方式1:device.touch(507,72,"DOWN_AND_UP") 

方式2:easy_device.touch(By.id('id/qingchu'),device.DOWN_AND_UP)

用后者需要导入

from com.android.chimpchat.hierarchyviewer import HierarchyViewer #根据ID找到ViewNode,对viewnode的一些操作等

from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根据ID进行访问方法touch、drag等

from com.android.monkeyrunner.easy import By    #根据ID返回PyObject的方法

from com.android.hierarchyviewerlib.models import ViewNode as vn #代表一个控件,可获取控件属性

#monkeyrunner长按控件

方式1:device.touch(507,72,"DOWN_AND_UP") 

device.touch(507,72,MonkeyDevice.DOWN)

MonkeyRunner.sleep(1) 

device.touch(507,72,MonkeyDevice.UP)

方式2:

easy_device.touch(By.id('id/qingchu'),,MonkeyDevice.DOWN) 

MonkeyRunner.sleep(1)

 easy_device.touch(By.id('id/qingchu'),MonkeyDevice.UP)

用后者需要导入

from com.android.chimpchat.hierarchyviewer import HierarchyViewer #根据ID找到ViewNode,对viewnode的一些操作等

from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根据ID进行访问方法touch、drag等

from com.android.monkeyrunner.easy import By    #根据ID返回PyObject的方法

from com.android.hierarchyviewerlib.models import ViewNode as vn #代表一个控件,可获取控件属性

#monkeyrunner滑动屏幕

for i in range(1,70):

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

MonkeyRunner.sleep(1)

#monkeyrunner延时

MonkeyRunner.sleep(3)

#monkeyrunner截图

result = device.takeSnapshot()

 result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')

#monkeyrunner截图对比

result1.sameAs(result0,1.0)

#monkeyrunner局部图片(前两个值是左上角左边,后两个值是右下角减左上角的坐标。)

pic0= result0.getSubImage((4,41,400,700))

#monkeyrunner重启设备

device.reboot()

#monkeyrunner单击电源键,熄灭屏幕

device.press('KEYCODE_POWER',MonkeyDevice.DOWN_AND_UP)

#monkeyrunner唤醒屏幕

device.wake()

#monkeyrunner输入文本

Cotent='1234'

device.type(Cotent)

#monkeyrunner获取文本

方式1:#通过By来获取

text1=easy_device.getText(By.id('id/text'))

print text1.encode('utf-8')

前提:

from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根据ID进行访问方法touch、drag等

from com.android.monkeyrunner.easy import By    #根据ID返回PyObject的方法

easy_device = EasyMonkeyDevice(device)#初始化EasyMonkeyDevice模块,必须放在startActivity之后,用来通过ID访问控制


方式2:通过HierarchyViewer

content = hViewer.findViewById('id/text')  

text0 = hViewer.getText(content)

print text0.encode('utf-8')

前提:

from com.android.chimpchat.hierarchyviewer import HierarchyViewer #根据ID找到ViewNode,对viewnode的一些操作等

from com.android.hierarchyviewerlib.models import ViewNode as vn #代表一个控件,可获取控件属性

hViewer = device.getHierarchyViewer() # 对当前UI视图进行解析

你可能感兴趣的:(monkeyrunner自动化测试工具--脚本模板及MonkeyRunner常用事件)