5

Pythonで記述されたMonkeyスクリプトを使用してアプリを駆動するAndroidエミュレーターを使用して自動テストを実行しています。スクリプトはファイルをエミュレーターにコピーし、アプリのボタンをクリックして、ソフトウェアが操作中にトリガーするアクティビティに応じて反応します。スクリプトはサイクルを数千回実行することになっているので、これをループに入れて、adbツールを実行してファイルをコピーし、アクティビティを開始して、デバイスでgetPropertyメソッドを呼び出してソフトウェアがどのように反応するかを確認します。パラメータ'am.current.comp.class'。だからここに私のスクリプトの非常に単純化されたバージョンがあります:

for target in targets:
    androidSDK.copyFile(emulatorName, target, '/mnt/sdcard')

    # Runs the component
    device.startActivity(component='com.myPackage/com.myPackage.myactivity')

    while 1:
        if device.getProperty('am.current.comp.class') == 'com.myPackage.anotheractivity':
            time.sleep(1) # to allow the scree to display the new activity before I click on it
            device.touch(100, 100, 'DOWN_AND_UP')
            # Log the result of the operation somewhere
            break

        time.sleep(0.1)

(androidSDKは私が書いた小さなクラスで、adbツールを使用してファイルをコピーおよび削除するためのいくつかのユーティリティ関数をラップします)。

たとえば、いくつかの例外の1つでスクリプトがクラッシュすることがあります(完全なスタックトレースを省略しています)。

[com.android.chimpchat.adb.AdbChimpDevice]com.android.ddmlib.ShellCommandUnresponsiveException

また

[com.android.chimpchat.adb.AdbChimpDevice] Unable to get variable: am.current.comp.class
[com.android.chimpchat.adb.AdbChimpDevice]java.net.SocketException: Software caused connectionabort: socket write error

デバイスへのソケット接続が不安定になり、再起動が必要になる場合があることを読みました(adbstart-serverとadbkill-serverが役立ちます)。

私が抱えている問題は、ツールがJava例外をスローしていることです(MonkeyはJythonで実行されます)が、Pythonスクリプト内からそれらをトラップする方法がわかりません。スクリプト内の失敗の正確な原因を特定し、状況を回復して、反復を続行できるようにしたいと思います(たとえば、接続を再確立しますか?たとえば、別の呼び出しでデバイスを再初期化しますか? MonkeyRunner.waitForConnectionに十分ですか?)

何か案は?

どうもありがとう、アルベルト

編集します。誰かがこれを必要とする場合、JythonスクリプトでJava固有の例外をキャッチできることを発見したことに言及したいと思いました。

from java.net import SocketException

...

try:
    ...

except(SocketException):
    ...
4

2 に答える 2

0

JythonスクリプトでJava固有の例外をキャッチすることができます。

from java.net import SocketException

...

try:
    ...

except(SocketException):
    ...

(OPの編集から彼の質問への引用)

于 2013-10-07T20:59:35.030 に答える
0

これは私のために働いた:device.shell('exit')#シェルを終了する

于 2015-11-19T21:45:04.353 に答える