真机上运行monkeyrunner python脚本踩坑系列二

之前搞monkeyrunner的时候,尝试过使用AndroidViewClient,但是一直没配好环境。

这两天有空恰好朋友也在弄,又捡起来。

才发现之前网上查到的用monkeyrunner 跑androidviewclient完全没必要。androidviewclient已经完全独立了,相当于可以python直接运行,它的包里面也有封装得很好的可以直接操作真机的函数。通过文本、id等都可以操作,而且现在看来也暂时不需要sleep,能够自己判断页面是否加载完成。到这里,是不是已经很激动了!!真机上终于可以开搞!

接下来就讲一些安装使用办法,并给出基本示例。https://github.com/dtmilano/AndroidViewClient/wiki官网在此。

一、安装

1、首先下载.egg文件和master压缩包,我使用的是androidviewclient-12.5.2-py2.7.egg和AndroidViewClient-master.7z。
2、然后使用easy_install安装.egg文件,并将AndroidViewClient-master.7z解压后拷贝到python目录的\Lib\site-packages文件夹下。
3、记录AndroidViewClient-master\src路径,将该路径添加到系统环境变量中,并命名为ANDROID_VIEW_CLIENT_HOME,我的python安装在c盘下,因此我的路径为C:\Python27\Lib\site-packages\AndroidViewClient-master\src

二、使用

这个时候,我们就把整个环境弄好了。接下来看看怎么使用。这里主要有两个地方值得注意的。
1、在AndroidViewClient-master\example文件夹下,给出了很多使用示例。比如你可以查看che.py文件,里面给出了连接设备的示例。并且有如下代码:
b = vc.findViewWithText(u'发消息')
(x, y) = b.getXY()
b.touch()
这里我们只是测试连接成功与否,因此可以直接把这段话删掉。其实这段就是讲通过手机布局上的发消息文本获得空间,然后获取该控件x.y坐标,然后点击该控件。

如果环境配置没问题,那么你这个时候可以直接测试che.py文件,连接上你的手机,然后打开命令行,输入命令python che.py即可。

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已经可以帮我们做很多事情了,而且功能也封装的很好,大家有兴趣的话可以试试。

猜你喜欢

转载自blog.csdn.net/u012195899/article/details/53837429