How can I send commands to Android Emulator using Monkeyrunner?

4.5k Views Asked by At

I have an application with a login, what I want to do is lunch de application and then interact with the app, sending the username and password.

What is wrong with this script?

# 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')

I also tried with the function type, like device.type('user'). Sometimes works well, but sometimes doesn't, I don´t know why.

May be, the focus of the keyboard is in the search bar or somewhere else. In the script,When I press the select button, what I am trying is to select the textfield to enter the username.

Another idea that come to my mind is that, I have to wait until the activity starts/loads correctly and then send the commands to interact. How can I do that?

2

There are 2 best solutions below

0
On

You can also use the type() function to input data.

void type (string message)

Sends the characters contained in message to this device, as if they had been typed on the device's keyboard. This is equivalent to calling press() for each keycode in message using the key event type DOWN_AND_UP. Arguments message A string containing the characters to send.

See: Developing Tools-Monkey Device

0
On

If you are using emulator for testing purpose, you should give time.sleep() after launching the application and even in-between commands since sometimes they are slow (depending on your system).

For example, you can use following code:


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')