monkeyrunner和uiautomator


一:monkeyrunner简介
monkeyrunner导入EasyMonkey因为手机电量和时间的显示不同,通过坐标点和控件id(导入EasyMonkey)的两种方式进行局部图片对比判断,支持录制回放
优点:门槛低,支持录制回放,可以跨应用
缺点:移植性,交互性,稳定性很差,不能断言,不好调试
二:录制和回放
录制:
monkeyrunner recorde.py
操作业务流程,保存为recorde.mr
回放
monkeyrunner playback.py recorde.mr
三:monkeyrunner脚本
#导入相关模块
import sys
import time
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
from com.android.monkeyrunner.easy import By
#安装apk
device.installPackage("E:/1.apk")
device.installPackage("E:\\1.apk")
#卸载apk
device.removePackage("包名")
#连接设备
device = mr.waitForConnection()
easyDevice = EasyMonkeyDevice(device)
#如果设备不连接,退出
if not device:
print >> sys.stderr,"fail"
sys.exit(1)
#启动Activity
device.startActivity(component="包名/活动名")
device.startActivity(component="com.android.mms/.ui.ConversationList")
#滑动
device.drag((x1,y1),(x2,y2),1,10)
device.drag((100,1053),(520,1053),1,10)
#触摸
device.touch(520,520,device.DOWN_AND_UP)
easy_device.touch(By.id('id号'),device.DOWN_AND_UP)
easy_device.touch(By.id('id/qingchu'),device.DOWN_AND_UP)
#输入字符串
device.type("abc")
#指定的键码事件
HOME
device.press("KEYCODE_HOME",device.DOWN_AND_UP)
Back
device.press("KEYCODE_BACK",device.DOWN_AND_UP)
MENU
device.press("KEYCODE_MENU",device.DOWN_AND_UP)
power键
device.press("KEYCODE_POWER",device.DOWN_AND_UP)
上音量键
device.press("KEYCODE_VOLUME_UP",device.DOWN_AND_UP)
下音量键
device.press("KEYCODE_VOLUME_DOWN",device.DOWN_AND_UP)
#截图
result1 = device.takeSnapshot()
#保存图片
result1.writeToFile("E:/shot1.png","png")
#相识度(100%)截图对比(会报错因为电量和时间有差异)
if(result2.sameAs(result1,1.0)):
print("true")
else:
print("false")
#局部截图对比
result.getSubImage((x坐标,y坐标,横向长度,竖向长度))
pic1= result1.getSubImage((4,41,400,700))
pic2= result2.getSubImage((4,41,400,700))
print (pic1.sameAs(pic2,1.0)) #输出true
#暂停(秒)
mr.sleep(1)
time.sleep(1)
#手机设备重启
device.reboot()
#唤醒
device.wake()
#调用adb shell命令
device.shell("")
device.shell("am start com.android.calculator2/.Calculator")
device.shell("input text 10086")
device.shell("input keyevent 7")
device.shell("input tap x y")
device.shell("input swipe x1 y1 x2 y2")

二:Uiautomator

一、操作步骤:
1.创建java工程,添加junit4jar包、android.jar、uiautomator.jar三个jar包
2.创建测试类,方法必须是test打头:继承UiAutomatorTestCase类编写case:
UiObject openObject=new UiObject(new UiSelector().className("android.widget.TextView"));
openObject.clickAndWaitForNewWindow();
sleep(2000);
//校验
UiObject tab1=new UiObject(new UiSelector().description("All contacts"));
boolean r1=tab1.exists();
assertTrue(r1);
........
备注:description(conten-desc)/class/recourse-id等等来找控件
3.使用命令生成build.xml文件
android create uitest-project -n UiautomatorMes -t 19 -p D:\workspace\UiautomatorMes
说明:
-n工程名称
-t android list target
-p 工程目录
4.生成jar包:
刷新工程,打开build.xml文件,暂时将default="help" 改为default="build",保存后选择工程右键选择RUN as中的ant build,进入工程所在目录的bin目录下找到生成的jar包
5.将jar包push在手机中:
adb push jar包所在目录 data/local/tmp
6.运行case:
android shell uiautomator runtest PeopleTest.jar -c com.people.test.TestPeople

总结:创建测试类--更新工程生成build文件--ant build生成jar包--push到手机里命令行运行

相关