之前搞monkeyrunner的时候,尝试过使用AndroidViewClient,但是一直没配好环境。
这两天有空恰好朋友也在弄,又捡起来。
才发现之前网上查到的用monkeyrunner 跑androidviewclient完全没必要。androidviewclient已经完全独立了,相当于可以python直接运行,它的包里面也有封装得很好的可以直接操作真机的函数。通过文本、id等都可以操作,而且现在看来也暂时不需要sleep,能够自己判断页面是否加载完成。到这里,是不是已经很激动了!!真机上终于可以开搞!
接下来就讲一些安装使用办法,并给出基本示例。https://github.com/dtmilano/AndroidViewClient/wiki官网在此。
b = vc.findViewWithText(u'发消息')
(x, y) = b.getXY()
b.touch()
这里我们只是测试连接成功与否,因此可以直接把这段话删掉。其实这段就是讲通过手机布局上的发消息文本获得空间,然后获取该控件x.y坐标,然后点击该控件。
2、在AndroidViewClient-master\doc文件夹下,给出了该项目的使用文档,你可以直接点开里面的index.html,这里是最开始的页面,然后在里面查看各种操作文档。
接下来我们给出一个最基础的使用示例。
新建test.py python文件并编辑
#! /usr/bin/env python
#coding=utf8
'''
Copyright (C) 2012 Diego Torres Milano
Created on May 5, 2012
@author: diego
'''
import sys
import os
import time
try:
sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
pass
from com.dtmilano.android.viewclient import ViewClient
component = "***"#这里给出运行的包名和类名
device, serialno = ViewClient.connectToDeviceOrExit()
device.startActivity(component=component)
ViewClient.sleep(5)
vc = ViewClient(device = device, serialno = serialno)
b = vc.findViewWithText(u'测试')
b.touch()
file = open('F:\\tt2.txt','w')
a = ViewClient(*ViewClient.connectToDeviceOrExit(verbose=True)).traverse(transform=ViewClient.traverseShowClassIdTextAndUniqueId,stream=file)
file.close()
print >>sys.stderr, "bye"
说明:
1、我们首先引入环境变量,再导入包。然后定义component,这里给出的是需要运行的包名和类,然后开始使用ViewClient连接,并启动活动。
2、vc = ViewClient(device=device, serialno=serialno)这句话是调用ViewClient的构造函数新建对象vc,vc你可以想象这里就是一个当前的布局文件,然后根据文本获得布局文件上面的控件b并点击。
3、file部分是将当前布局文件保存在F盘下tt2.txt文件中,在这个文件里面保存了该页面的控件id。
4、通过id获取控件的示例如:
b = vc.findViewById("id/no_id/%d" % i)
5、每次点击页面过后(相当于页面重新加载之后),需要刷新vc对象,示例如下:
vc.dump()
关于这个坑,差不多也就了解到这里了,androidviewclient已经可以帮我们做很多事情了,而且功能也封装的很好,大家有兴趣的话可以试试。