一、手机安装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)
手机连接电脑后,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()#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视图进行解析