移动性能测试 monkeyrunner Python 中怎么导入 viewclient

jacky · 2014年01月20日 · 最后由 liyonghe 回复于 2014年01月26日 · 3511 次阅读

测试时想用 ViewClient,于是下了 jar 包,解压,添加环境变量,只写了一个导入语句的 py 文件,
from com.dtmilano.android import viewclient
在 Python 环境下直接运行 from com.dtmilano.android import viewclient,没有错误
C:\Users\Administrator>python
Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.

from com.dtmilano.android import viewclient

但是用 monkeyrunner 运行 py 文件,会出错
C:\Users\Administrator>monkeyrunner D:\work\workspace\aaa\test.py
140120 17:04:28.586:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Scri
pt terminated due to an exception
140120 17:04:28.586:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Trace
back (most recent call last):
File "D:\work\workspace\aaa\test.py", line 27, in
from com.dtmilano.android import viewclient
ImportError: No module named dtmilano

问什么呢?导包的话该怎么写呢?菜鸟求指教。谢谢。

共收到 18 条回复 时间 点赞

我记得 monkeyrunner 是基于 jython 的那.

记得以前是直接把 jar 包放到这个路径下就能导入了~
\adt-bundle-windows-x86-20130522\sdk\tools\lib

还是不行,No module named
其实我主要是想用 monkeyrunner 做测试,有一些 app 控件 id 都一样,比如 setting,为了获取控件对象,只能是根据控件上的 txt,有没有其它的方法实现呢?谢谢

对应的 jar 包需要在 classpath 下面, 你可以试试

我现在在 python 环境下执行 from com.dtmilano.android import viewclient 可以,执行 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 提示 No module named;在命令行执行 monkeyrunner,com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 的脚本可以, from com.dtmilano.android import viewclient 的脚本不行,提示 No module named。不知道该怎么弄。

androidviewclient-3.2.0.jar
我用的是这个包,当时在 github 上下的,放到\adt-bundle-windows-x86-20130522\sdk\tools\lib,就能导入了~
http://pan.baidu.com/s/1gd5N7ft 已入百度网盘,如需请自取。

@mingway_hu 现在导入没有问题,就是初始化不知道怎么搞,有简单的 demo 吗? 谢谢
AttributeError: 'javapackage' object has no attribute 'connectToDeviceOrExit'

额。。从你的描述上看你是测试 app,为什么要选择 mr 呢?

主要是想看看 Python 写的自动化脚本,不是很懂,测 App 的话 一般有哪些框架呢?

#7 楼 @jacky 我这没什么问题~启模拟器,打开 API Demo 那个 app,用 monkeyrunner 交互模式下试试

from com.dtmilano.android.viewclient import ViewClient
device, serialno= ViewClient.connectToDeviceOrExit(30, emulator-5554)
vc= ViewClient(device, serialno)
b= vc.findViewWithText('App')
b.touch()
jacky #11 · 2014年01月26日 Author

@mingway_hu 是在 Linux 环境下吗?我的是 windows。
AttributeError: type object 'com.dtmilano.android.viewclient.ViewClient' has no
attribute 'connectToDeviceOrExit'.
其他的环境变量怎么配的?谢谢。

#11 楼 @jacky 我这是 win7~环境变量大致是这样~
ANDROID_HOME E:\DevSoftware\adt-bundle-windows-x86-20130522\sdk
JAVA_HOME C:\Program Files\Java\jdk1.6.0_21
Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Python27;C:\Python27\Scripts\;%ANDROID_HOME%;C:\Program Files\nodejs\;E:\DevSoftware\adt-bundle-windows-x86-20130522\eclipse\plugins;C:\Program Files\Apache Software Foundation\apache-ant-1.9.2\bin;E:\DevSoftware\adt-bundle-windows-x86-20130522\sdk\platform-tools;C:\Program Files\Git\cmd;

jacky #13 · 2014年01月26日 Author

我的也是 Win7,把你说的 jar 包放到 SDK\tools\lib 下,还是 no attribute 'connectToDeviceOrExit'.
Code:
from com.dtmilano.android.viewclient import ViewClient
device, serialno= ViewClient.connectToDeviceOrExit(30, 'B07C0404332301G5')
vc= ViewClient(device, serialno)
ANDROID_HOME C:\sdk
JAVA_HOME C:\Java\jdk1.7.0_40
Path C:\Python27\;C:\Python27\Scripts\;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0.;%ANDROID_HOME%;C:\sdk\platform-tools;C:\sdk\tools;C:\Program Files (x86)\nodejs\;E:\eclipse\plugins;C:\apache-maven-3.1.1\bin;C:\AndroidViewClient-master\AndroidViewClient\src

#13 楼 @jacky C:\AndroidViewClient-master\AndroidViewClient\src 要不,最后这句去掉试试~~?

环境变量设置 ANDROID_VIEW_CLIENT_HOME 为 D:\MobileSDK\android-sdk-windows\tools\lib\AndroidViewClient\src
然后 test_import.py 内容为

# -*- coding: utf-8 -*-
import sys
import os
sys_path = sys.path[0].split(':')
FOLDER_PATH= sys_path[1]+":"+sys_path[2]

if not os.environ['ANDROID_WRAPEASYMONKEY_HOME']:
        #print os.environ['ANDROID_WRAPEASYMONKEY_HOME']
        print 'the environment ANDROID_WRAPEASYMONKEY_HOME does not exist'
ANDROID_WRAPEASYMONKEY_HOME = os.environ['ANDROID_WRAPEASYMONKEY_HOME']
sys.path.append(ANDROID_WRAPEASYMONKEY_HOME)


from com.whoistester.android.viewclient import ViewClient
from com.whoistester.android.wrapEasyMonkey import wrapEasyMonkey
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
from com.android.monkeyrunner.easy import EasyMonkeyDevice
from com.android.monkeyrunner.easy import By
from com.android.hierarchyviewerlib.models import ViewNode

print ("start") 

代码请用代码块。

井号--coding:utf-8-- 然后要用 test_import.py 的绝对路径来执行,monkeyrunner d://test//test_import.py

jacky #17 · 2014年02月13日 Author

环境变量 ANDROID_VIEW_CLIENT_HOME ,代码里是 ANDROID_WRAPEASYMONKEY_HOME,
改过后还是老问题。
谢谢

jacky #18 · 2014年02月18日 Author

@lyh870107 你的库是在哪下的? 我的 AndroidViewClient 对应的 module 是 com.dtmilano.android.viewclient

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册