Of course, to do it I would resort to our old pal AndroidViewClient. This is a very interesting example of its use because it lies far from testing and application or UI.
And so, without further ado, let me introduce you to the code...
#! /usr/bin/env monkeyrunner
'''
Copyright (C) 2012 Diego Torres Milano
Created on Oct 12, 2012
@author: diego
'''
import re
import sys
import os
# This must be imported before MonkeyRunner and MonkeyDevice,
# otherwise the import fails.
# PyDev sets PYTHONPATH, use it
try:
for p in os.environ['PYTHONPATH'].split(':'):
if not p in sys.path:
sys.path.append(p)
except:
pass
try:
sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
pass
from com.dtmilano.android.viewclient import ViewClient
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
VPS = "javascript:alert(document.getElementsByTagName('html')[0].innerHTML);"
PACKAGE = 'com.android.browser'
ACTIVITY = '.BrowserActivity'
COMPONENT = PACKAGE + "/" + ACTIVITY
URI = 'http://dtmilano.blogspot.com'
device, serialno = ViewClient.connectToDeviceOrExit()
device.startActivity(component=COMPONENT, uri=URI)
MonkeyRunner.sleep(3)
vc = ViewClient(device=device, serialno=serialno)
device.drag((240, 180), (240, 420), 10, 10)
url = vc.findViewByIdOrRaise('id/url')
url.touch()
MonkeyRunner.sleep(1)
device.press('KEYCODE_DEL', MonkeyDevice.DOWN_AND_UP)
for c in VPS:
device.type(c)
device.press('KEYCODE_ENTER', MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(3)
vc.dump()
print vc.findViewByIdOrRaise('id/message').getText().replace('\\n', "\n")
device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)
And now a brief explanation of the most important pieces of this script.
- Shebang, you know, to invoke monkeyrunner as the interpreter. I don't have to tell you more (if you are a poor Windows user you may have to invoke monkeyrunner from command line, I feel sad for you)
- Some comments and imports
- Read PYTHONPATH just in case you are using Eclipse and Pydev (this has been explained in this post)
- Then use ANDROID_VIEW_CLIENT_HOME environment variable to find AndroidViewClient in your system
- Some constants defined. VPS is the actual javascript to obtain the page source
- The standard way of connecting to the device or emulator in AndroidViewClient. This handles errors and timeout automatically solving many problems you find with bare monkeyrunner
- We start Browser
- Drag a bit to make the URL visible in case the page has scrolled
- Next, we find the View with ID id/url, which you know, contains the URL
- We touch to focus
- And type the javascript in VPS followed by ENTER
- By that time the alert dialog should be on screen so we take a new dump
- Now we find the View with ID id/message which contains the HTML and print it
- Finally, we press BACK to dismiss it
I hope you have enjoyed it as much as I did and this help you find new ways of using AndroidViewClient.
P.S. This script will be part of AndroidViewClient source code distribution examples