Python 2.7 — Выполнить скрипт AndroidViewClient / culebra с веб-сайта (Yii PHP Framework)

У меня есть скрипт с AndroidViewClient / culebra, который работает нормально, если он выполняется из командной строки, например:

python myscripttest.py emulator-5554

Но так как я использую Yii (PHP) для веб-сайта. скрипт был выполнен с использованием subprocess.call(python myscripttest.py, shell=True), И это показывает эту ошибку.

File "/var/www/html/u_script_files/myscripttest.py", line 47, in <module>
vc = ViewClient(device, serialno, **kwargs2)
File "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.0.7-py2.7.egg/com/dtmilano/android/viewclient.py", line 2352, in __init__
adb = obtainAdbPath()
File "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.0.7-py2.7.egg/com/dtmilano/android/common.py", line 116, in obtainAdbPath
raise Exception('adb="%s" is not executable. Did you forget to set ANDROID_HOME in the environment?' % adb)
Exception: adb="adb" is not executable. Did you forget to set ANDROID_HOME in the environment?
Exception AttributeError: "ViewClient instance has no attribute 'uiAutomatorHelper'" in <bound method ViewClient.__del__ of <com.dtmilano.android.viewclient.ViewClient instance at 0x7f1ae981dc68>> ignored

ANDROID_HOME и ANDROID_VIEW_CLIENT_HOME определены в среде:

$ echo $ANDROID_HOME
/home/experts/android-sdk-linux/
$ echo $ANDROID_VIEW_CLIENT_HOME
/home/experts/AndroidViewClient-master/

Может быть потому что скрипт вызывается с сайта?

РЕДАКТИРОВАТЬ — ANDROIDVIEWCLIENT ОБНОВЛЕНО 11.0.10:

Connecting to a device with serialno=emulator-5558 with a timeout of 60 secs...
Connected to device with serialno=emulator-5558
Actual device serialno=emulator-5558
Starting App: Evernote
Traceback (most recent call last):
File "/var/www/html/u_script_files/myscripttest.py", line 47, in <module>
vc = ViewClient(device, serialno, **kwargs2)
File "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.0.10-py2.7.egg/com/dtmilano/android/viewclient.py", line 2356, in __init__
adb = obtainAdbPath()
File "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.0.10-py2.7.egg/com/dtmilano/android/common.py", line 128, in obtainAdbPath
if not os.environ['ANDROID_HOME']:
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)

Но ANDROID_HOME это определено:

$ echo $ANDROID_HOME
/home/experts/android-sdk-linux/

Скрипт myscripttest.py это:

#!/usr/bin/python

import re
import sys
import os
import time

from com.dtmilano.android.viewclient import ViewClient

TAG = 'CULEBRA'

_s = 5
_v = '--verbose' in sys.argv

def back(self):
self.shell('input keyevent KEYCODE_BACK')

def home(self):
self.shell('input keyevent KEYCODE_HOME')

def enter(self):
self.shell('input keyevent KEYCODE_ENTER')

def saveresult(fr, device, msg):
f_result = open(fr, 'wt')
if msg is None:
msg = 'None'
f_result.write(msg.encode('utf-8'))
f_result.close()

# define package and Main activity name
package = "com.evernote"activity = "ui.HomeActivity"
# sets the name of the component to start
runComponent = package + "/." + activity
kwargs1 = {'ignoreversioncheck': False, 'verbose': True, 'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)

# Runs the component
print ("Starting App: Evernote")
device.startActivity(component=runComponent)
time.sleep(5)

kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True}

vc = ViewClient(device, serialno, **kwargs2) <== HERE IT IS THE ERROR

#vc.dump(window='-1')
vc.dump()

# class=android.widget.FrameLayout
no_id1 = vc.findViewByIdOrRaise("id/no_id/1")

1

Решение

Обновитесь до AVC 11.0.10 и сообщения будут более явными. Это поможет вам определить проблему.

Сообщение будет:

Exception: adb="adb" is not executable. Did you forget to set ANDROID_HOME in the environment?

These files we unsuccessfully checked to find a suitable 'adb' executable:
/opt/android-sdk/platform-tools/adb
/Users/user/android/platform-tools/adb
/Users/user/android-sdk/platform-tools/adb
adb
/usr/local/bin/adb
/usr/bin/adb
/bin/adb
/usr/sbin/adb
/sbin/adb
/opt/X11/bin/adb
/Library/Frameworks/Python.framework/Versions/2.7/bin/adb
/Users/user/Library/Android/sdk/tools/adb
/Users/user/Library/Android/sdk/platform-tools/adb
/Users/user/bin/adb

возможно ANDROID_HOME объявлен, но не экспортируемый.
Пытаться:

export ANDROID_HOME

в среде вы выполняете сценарий.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]