最近研究monkeyrunner,感觉还是挺好用的,最终陆续耗费两天时间完成以下脚本。有写的不好的地方,欢迎批评指导,共同进步。
该脚本实现以下功能:
自动识别多设备
自动在各设备运行app
自动将运行结果截图
自动对比运行结果
首先 adb devices >E:\devices.txt
脚本
#导入我们需要用到的包和类并且起别名
import sys,time,datetime
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.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 #代表一个控件,可获取控件属性
templist = []#设置一个空列表,用来放设备内容
deviceslist =[]#设置一个空列表,用来放分割后的设备内容
devices = [] #设置一个空列表,用来读取放分割后的设备内容
snapshot = []#设置一个空列表,用来读取截图
text = []#设置一个空列表,用来读取结果文本
#已经将设备列表导出adb devices>E:\devices.txt
#将设备列表导入到templist中
f = open("E:\devices.txt")#读取文件
while True:
line = f.readline()#逐行读
print line
if line:
templist.append(line.strip())#删除所读行的空格,增加到templist列表中,默认每个元素后都有\tdevices
print templist
else:
break;
f.close() #关闭
print templist
templist.pop(0) #删除下标为0的元素,现在templist列表元素为['emulator-5554\tdevices','emulator-5556\tdevices','']
print templist
print len(templist)
#将每个元素使用\t分割,并导入到新列表 deviceslist中
for i in range(0,len(templist)-1):
deviceslist.append(templist[i].split('\t')) #deviceslist列表元素为[['emulator-5554','devices'],['emulator-5556','devices']]
for i in range(len(deviceslist)):#遍历每个元素
print 'current devices:'
print deviceslist[i][0]#只读取元素的前半部分
devices.append(mr.waitForConnection(1.0,deviceslist[i][0]))##devices列表元素为['emulator-5554','emulator-5556']
if not devices:
print >> sys.stderr,"fail"
sys.exit(1)
else:
print 'connnect success'
#启动activity
devices[i].startActivity('com.sky.jisuanji/.JisuanjizixieActivity')
easy_device = EasyMonkeyDevice(devices[i])#初始化EasyMonkeyDevice模块,必须放在startActivity之后,用来通过ID访问控件
hViewer = devices[i].getHierarchyViewer() # 对当前UI视图进行解析
#2、执行计算1+2=3
easy_device.touch(By.id('id/qingchu'),devices[i].DOWN_AND_UP)
easy_device.touch(By.id('id/btn1'),devices[i].DOWN_AND_UP)
easy_device.touch(By.id('id/jia'),devices[i].DOWN_AND_UP)
easy_device.touch(By.id('id/btn2'),devices[i].DOWN_AND_UP)
easy_device.touch(By.id('id/denyu'),devices[i].DOWN_AND_UP) #=
mr.sleep(5.0)
#进行takeSnapshot截图
snapshot.append(devices[i].takeSnapshot())
print 'end snapshot'
#创建时间字符串
t = time.strftime("%Y-%m-%d-%X",time.localtime())
t = t.replace(":","-")
#保存截图
snapshot[0].writeToFile(deviceslist[i][0]+'-'+t+'-'+'.png','png');
snapshot.pop()
#通过By来获取
text.append(easy_device.getText(By.id('id/text')))
print text[i].encode('utf-8')#打印结果
#比较设备输出的结果
for i in range(len(devices)-1):
for j in range(1,len(devices)):
if text[i]==text[j]:
print 'true'
else:
print 'false'
效果图:
最终运行结果:
List of devices attached
['List of devices attached']
emulator-5554 device
['List of devices attached', 'emulator-5554\tdevice']
emulator-5556 device
['List of devices attached', 'emulator-5554\tdevice', 'emulator-5556\tdevice']
['List of devices attached', 'emulator-5554\tdevice', 'emulator-5556\tdevice', '']
['List of devices attached', 'emulator-5554\tdevice', 'emulator-5556\tdevice', '']
['emulator-5554\tdevice', 'emulator-5556\tdevice', '']
3
current devices:
emulator-5554
connnect success
end snapshot
3.0
current devices:
emulator-5556
connnect success
end snapshot
3.0
true