0

我有兴趣使用 MonkeyRunner 的 ViewClient 扩展,因为纯 MonkeyRunner 遇到了 Broken Pipe 问题。

对于某些测试,我仍然需要在 device.press(...)、device.touch(...)、device.drag(...) 函数中使用 X/Y 坐标(不是普通的 android 层次结构)所以出于这个原因,我需要将 MonkeyRunner 导入 ViewClient Phyton 脚本 - 但是对于测试的 android 应用程序部分,我可以使用 ViewClient 适当地在层次结构中搜索 ID。除非有人知道如何在调用 vc.touch()/vc.drag() 等之前在 ViewClient 中设置硬编码 X/Y?

因此,我的 Python 脚本有以下标头,它试图拉入 ViewClient 环境和 MonkeyRunner 路径。但是运行脚本总是会导致相同的错误:

ImportError:没有名为 android.monkeyrunner 的模块

设置环境的脚本部分是这样构造的(环境 - Ubuntu 12.04 LTS)

#! /usr/bin/env python

# Import Class Files

import sys
import os

# This must be imported before MonkeyRunner and MonkeyDevice,
# otherwise the import fails.
# PyDev sets PYTHONPATH, use it
try:
    for p in os.environ['PYTHONPATH'].split(':'):
       if not p in sys.path:
          sys.path.append(p)
except:
    pass

try:
    sys.path.append(os.environ['ANDROID_VIEW_CLIENT_HOME'])
    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
    sys.path.append(os.path.join(os.environ['ANDROID_SDK_ROOT'], 'tools/lib/monkeyrunner.jar'))
    sys.path.append(os.path.join(os.environ['ANDROID_SDK_ROOT'], 'tools/lib'))
except:
    pass

print sys.path

from com.dtmilano.android.viewclient import ViewClient, View
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

所以上面的输出看起来像这样:

mactwixs:~/AndroidViewClient/examples$ ./monkeyscript3.py
['/home/mactwixs/AndroidViewClient/examples', '/home/mactwixs/AndroidViewClient/examples', '/home/mactwixs/AndroidViewClient', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol', '', '/home/mactwixs/AndroidViewClient', '/home/mactwixs/AndroidViewClient/src', '/home/mactwixs/dev_env/ADT/sdk/tools/lib/monkeyrunner.jar', '/home/mactwixs/dev_env/ADT/sdk/tools/lib']
Traceback (most recent call last):
  File "./monkeyscript3.py", line 41, in <module>
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
ImportError: No module named android.monkeyrunner

谢谢!

更新:

有趣的是:

mactwixs:~/AndroidViewClient/examples$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path_hooks
[<type 'zipimport.zipimporter'>]
>>>

不应该有<type 'org.python.core.JavaImporter'>吗?

更新2:

所以区别是:

mactwixs:~/AndroidViewClient/examples$ python
**Python** 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

mactwixs:~/AndroidViewClient/examples$ monkeyrunner
**Jython** 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35) 
[Java HotSpot(TM) 64-Bit Server VM (Sun Microsystems Inc.)] on java1.6.0_24
>>>

....所以让我尝试安装 Jython!

更新3:

没有。现在它与 ViewClient 发生冲突,所以我回到第一方……我找到了 ViewClient 提供的 check-import.py。这让我觉得有些东西没有正确设置,因为 viewclient.py 和 adbclient.py 调用了monkeyrunner而不是python ...

mactwixs:~/AndroidViewClient/examples$ monkeyrunner check-import.py --debug
sys.path= ['/home/mactwixs/dev_env/ADT/sdk/tools/lib/monkeyrunner.jar', '/home/mactwixs/AndroidViewClient/examples', '/home/mactwixs/dev_env/ADT/sdk/tools/lib/Lib', '/home/mactwixs/dev_env/ADT/sdk/tools/lib/jython-standalone-2.5.3.jar/Lib', '__classpath__', '__pyclasspath__/', '/home/mactwixs/AndroidViewClient/src']
/home/mactwixs/AndroidViewClient/src/com/dtmilano/android/viewclient.py:27: RuntimeWarning: 

    You should use a 'python' interpreter, not 'monkeyrunner' for this module


  warnings.warn(
/home/mactwixs/AndroidViewClient/src/com/dtmilano/android/adb/adbclient.py:26: RuntimeWarning: 

    You should use a 'python' interpreter, not 'monkeyrunner' for this module


  warnings.warn(
OK
4

1 回答 1

3

我做了一些实验,还查看了 GIT 存储库,发现我确实可以根据需要进行拖动和触摸,但没有 MonkeyRunner 并且纯粹在 Python 中 - 所以我的问题已经解决了,因为我不必导入 Monkey 库。

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.adb import adbclient
import com.dtmilano.android.viewclient as viewclient

device, serialno = viewclient.ViewClient.connectToDeviceOrExit(verbose=True)
device.drag((960,1497),(214,1496),0.15,10)

time.sleep(2)

device.touch(610, 1734, adbclient.DOWN_AND_UP)

time.sleep(2)
于 2014-01-31T12:28:22.060 回答