0

私はログインを伴うアプリケーションを持っています。私がしたいのは、アプリケーションをランチしてから、ユーザー名とパスワードを送信してアプリと対話することです。

このスクリプトの何が問題になっていますか?

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()

# Installs the Android package.
device.installPackage('myproject/bin/LoginApp.apk')

# Runs an activity in the application
device.startActivity(component='com.example.android.myapplication.MainActivity')

# Write username and password
device.press('KEYCODE_BUTTON_SELECT','DOWN_AND_UP')

device.press('KEYCODE_U','DOWN_AND_UP')
device.press('KEYCODE_S','DOWN_AND_UP')
device.press('KEYCODE_E','DOWN_AND_UP')
device.press('KEYCODE_R','DOWN_AND_UP')

device.press('KEYCODE_ENTER','DOWN_AND_UP')

device.press('KEYCODE_P','DOWN_AND_UP')
device.press('KEYCODE_A','DOWN_AND_UP')
device.press('KEYCODE_S','DOWN_AND_UP')
device.press('KEYCODE_S','DOWN_AND_UP')

device.press('KEYCODE_ENTER','DOWN_AND_UP')
device.press('KEYCODE_ENTER','DOWN_AND_UP')

のような関数型でも試しましたdevice.type('user')。うまくいくこともあれば、うまくいかないこともあります。理由はわかりません。

おそらく、キーボードのフォーカスは検索バーまたはその他の場所にあります。スクリプトでは、選択ボタンを押すと、テキストフィールドを選択してユーザー名を入力しようとしています。

私の頭に浮かぶ別のアイデアは、アクティビティが正しく開始/ロードされるまで待ってから、対話するコマンドを送信する必要があるということです。どうやってやるの?

4

2 に答える 2

3

テスト目的でエミュレータを使用している場合は、time.sleep()(システムによっては) 遅い場合があるため、アプリケーションの起動後やコマンドの合間にも与える必要があります。

たとえば、次のコードを使用できます。


device.startActivity(component='com.example.android.myapplication/com.example.android.myapplication.MainActivity')
import time
time.sleep(10)
device.press('KEYCODE_BUTTON_SELECT','DOWN_AND_UP')
于 2011-03-02T20:00:53.160 に答える
0

type() 関数を使用してデータを入力することもできます。

void 型 (文字列メッセージ)

デバイスのキーボードで入力されたかのように、メッセージに含まれる文字をこのデバイスに送信します。これは、キー イベント タイプ DOWN_AND_UP を使用して、メッセージ内の各キーコードに対して press() を呼び出すことと同じです。引数 message 送信する文字を含む文字列。

参照:ツールの開発 - Monkey デバイス

于 2012-05-15T23:37:57.253 に答える