OK.. Great … Now you know what is
monkeyrunner and how to run tests with monkeyrunner. Let’s discuss
about one important feature of the monkeyrunner tool.
Running tests on multiple devices
with a single python script.
It looks like a big ask. But that is as
simple as drinking a Sri Lankan Tea …
By following my previous posts
now you are running some scripts with
monkeyrunner. Let’s add some little bit of information to that
script.
#First you need to import the modules
which you are using in this script
from com.android.monkeyrunner
import MonkeyRunner, MonkeyDevice
#Then you have to connect to the device
which you are running your test
device =
MonkeyRunner.waitForConnection()
Wait here !!!!!!
In this script you are waiting for a
connection to a running android device or emulator implicitly. Rather
than doing like that, you can explicitly tell what emulator or device
you may need to connect. You can do that like this.
# Timeout value for waiting for
connection 10 seconds
timeout = 10000
timeout = 10000
# Connects to the current
device, returning a MonkeyDevice object
device =
MonkeyRunner.waitForConnection(timeout, “emulator-5554″)
here you specify which device you need
to connect by the id of the emulator or device.
If you want to connect to another
device within the same script, you can do like this
device2 =
MonkeyRunner.waitForConnection(timeout, “emulator-5556″)
Then you can do all the operations you
have done with device parameter
to device2 parameter.
With this kind of scripting, you can
run commands on as many devices you have with you. I believe in
sample scripts in tutorials. Here is a sample script in action.
# Imports the monkeyrunner modules used
by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Timeout value for waiting for connection
timeout = 10000
timeout = 10000
# Connects to the current device, returning a MonkeyDevice
object
device = MonkeyRunner.waitForConnection(timeout, “emulator-5554″)
device = MonkeyRunner.waitForConnection(timeout, “emulator-5554″)
# Installs the Android package. Notice that this
method returns a boolean, so
# you can test to see if the installation worked.
device.installPackage(‘/home/chanaka/workspace/SimpleIntentPreference/bin/SimpleIntentPreference.apk’)
# you can test to see if the installation worked.
device.installPackage(‘/home/chanaka/workspace/SimpleIntentPreference/bin/SimpleIntentPreference.apk’)
#
sets a variable with the package’s internal name
package = ‘com.chanaka.android.sip’
package = ‘com.chanaka.android.sip’
# sets a variable with the name of an
Activity in the package
activity = ‘.SimpleIntentPreferenceActivity’
activity = ‘.SimpleIntentPreferenceActivity’
# sets the name of the component to
start
runComponent = package + ‘/’ + activity
runComponent = package + ‘/’ + activity
# Runs the
component
device.startActivity(component=runComponent)
device.startActivity(component=runComponent)
# Wait for few
seconds
MonkeyRunner.sleep(2)
MonkeyRunner.sleep(2)
# Presses the Menu
button
device.press(‘KEYCODE_MENU’, MonkeyDevice.DOWN_AND_UP)
device.press(‘KEYCODE_MENU’, MonkeyDevice.DOWN_AND_UP)
# Wait for few
seconds
MonkeyRunner.sleep(2)
MonkeyRunner.sleep(2)
#Touch the new status
button
device.touch(160, 460, ‘DOWN_AND_UP’)
device.touch(160, 460, ‘DOWN_AND_UP’)
# Wait for few
seconds
MonkeyRunner.sleep(2)
MonkeyRunner.sleep(2)
# Connects to the current device,
returning a MonkeyDevice object
device2 = MonkeyRunner.waitForConnection(timeout, “emulator-5556″)
device2 = MonkeyRunner.waitForConnection(timeout, “emulator-5556″)
# Installs the Android package. Notice
that this method returns a boolean, so
# you can test to see if the installation worked.
device2.installPackage(‘/home/chanaka/workspace/SimpleIntentPreference/bin/SimpleIntentPreference.apk’)
# you can test to see if the installation worked.
device2.installPackage(‘/home/chanaka/workspace/SimpleIntentPreference/bin/SimpleIntentPreference.apk’)
# sets a variable with the package’s
internal name
package = ‘com.chanaka.android.sip’
package = ‘com.chanaka.android.sip’
# sets a variable with the name of an
Activity in the package
activity = ‘.SimpleIntentPreferenceActivity’
activity = ‘.SimpleIntentPreferenceActivity’
# sets the name of the component to
start
runComponent = package + ‘/’ + activity
runComponent = package + ‘/’ + activity
# Runs the
component
device2.startActivity(component=runComponent)
device2.startActivity(component=runComponent)
# Wait for few
seconds
MonkeyRunner.sleep(2)
MonkeyRunner.sleep(2)
# Presses the Menu
button
device2.press(‘KEYCODE_MENU’, MonkeyDevice.DOWN_AND_UP)
device2.press(‘KEYCODE_MENU’, MonkeyDevice.DOWN_AND_UP)
# Wait for few
seconds
MonkeyRunner.sleep(2)
MonkeyRunner.sleep(2)
#Touch the new status
button
device2.touch(160, 460, ‘DOWN_AND_UP’)
device2.touch(160, 460, ‘DOWN_AND_UP’)
# Takes a screenshot
result = device.takeSnapshot()
result = device.takeSnapshot()
# Wait for few
seconds
MonkeyRunner.sleep(2)
MonkeyRunner.sleep(2)
# Writes the screenshot to a
file
result.writeToFile(‘/home/chanaka/status_update.png’,'png’)
result.writeToFile(‘/home/chanaka/status_update.png’,'png’)
#Touch the first
preference
device2.touch(160, 30, ‘DOWN_AND_UP’)
device2.touch(160, 30, ‘DOWN_AND_UP’)
#Touch the entre
button
device2.press(‘KEYCODE_DPAD_CENTER’, MonkeyDevice.DOWN_AND_UP)
device2.press(‘KEYCODE_DPAD_CENTER’, MonkeyDevice.DOWN_AND_UP)
# Takes a screenshot
result2 = device2.takeSnapshot()
result2 = device2.takeSnapshot()
# Writes the screenshot to a
file
result2.writeToFile(‘/home/chanaka/shot1.png’,'png’)
result2.writeToFile(‘/home/chanaka/shot1.png’,'png’)
Hi,
ReplyDeleteI am Sabari, I have 8 years of experience. I am trying to automate my application on Android devices. I am new to MonkeyRunner and Python scripting.
I want your help to develop a scripting to launch my application -> take a snap of that -> Compare with another Image.
If possible, Kindly share the script which will help us to understand the Monkeyrunner tool. Can you help me in this.
Thank you,