後知後覺,剛知道Android提供了MonkeyRunner這麼個東西,能用來幹嗎呢,官方文檔介紹得很清楚。簡單說,能夠用Python程序經過API,html
還提供了easy package,包括EasyMonkeyDevice和By兩個類,用來經過控件ID來訪問控件元素。但是量產設備(非開發版非模擬器)沒法使用Hierarchy Viewer,也沒法使用easy package。官方的說明是,python
To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.android
仍是有方法突破該限制的,操做起來有點麻煩,只能暫時捨棄By帶來的便利。json
因而只能經過控件座標來操做控件了。app
還好有MonkeyRecorder,能夠減輕一些負擔。函數
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder recorder.start(dev)
這玩意能方便地記錄點擊操做的座標值。還有個工具monitor,能夠比較方便地獲取到每個視圖裏控件的座標範圍。工具
有了monitor,能夠創建兩個配置文件,一個用來存放全部控件的座標,一個用來存放針對每一個測試用例從start Activity開始的抵達路徑。
配置文件用xml仍是json呢?選擇了json,在矇頭寫了近百行控件座標、用Python寫好了加載配置文件用解析出的座標值初始化控件列表函數後,用monkeyrunner運行,掉進了坑裏。測試
import json
這一行報錯,import error。spa
Google後知道緣由,MonkeyRunner用的是Jython 2.5.3,多是基於Python 2.5,Python 2.7以後纔有json模塊。code
難倒得改用xml?近百行json配置文件白寫了?
再Google,一大半介紹MonkeyRunner使用的文章都簡單到,舉例只是connect、startActivity、press一下。多發幾個組合觸摸事件都沒有。我相信不少人都深度使用過MonkeyRunner,但是難倒這些深度使用過的人都不寫博客,同時寫博客的都是把一個App運行起來後只摸了一下、截了一張圖的?
還好有stackoverflow,順着幾個相似問題的解答,終於從坑裏爬了出來。詳細記錄爬的步驟。
一個解決方法是給Python 2.5安裝simplejson,以Mac OS X舉例。
在Android SDK目錄下能夠看到Jython jar文件,版本是2.5.3。
android-sdks/tools/lib/jython-standalone-2.5.3.jar
下載simplejson,拷貝到Python 2.5目錄,解壓,安裝。
/Library/Python/2.5/site-packages/ tar -xzf simplejson-3.6.5.tar.gz python setup.py install
而後在MonkeyRunner下import仍是報錯import error。
import simplejson
查看Jython path,沒有simplejson路徑。
import sys sys.path
添加simplejson路徑,再import,成功。
sys.path.append('/Library/Python/2.5/site-packages/simplejson-3.6.5')
可是退出後又失效。
解決方法1是用PYTHONPATH,解決方法2是在Python腳本里動態添加,添加還須要判斷重複,最好還能將路徑標準化,對Windows系統作些處理。
這裏採用代碼裏動態添加的方法,並且先無論Windows系統了。
import sys if not ('/Library/Python/2.5/site-packages/simplejson-3.6.5' in sys.path): sys.path.append('/Library/Python/2.5/site-packages/simplejson-3.6.5') try: import json except ImportError: import simplejson as json