MonkeyRunner進坑——errors importing other modules
後知後覺,剛知道Android提供了MonkeyRunner這麼個東西,能用來幹嘛呢,官方文件介紹得很清楚。簡單說,可以用Python程式通過API,
- installs an Android application or test package,
- runs it,
- sends keystrokes to it,
- takes screenshots of its user interface,
- stores screenshots on the workstation.
還提供了easy package,包括EasyMonkeyDevice和By兩個類,用來通過控制元件ID來訪問控制元件元素。可是量產裝置(非開發版非模擬器)無法使用Hierarchy Viewer,也無法使用easy package。官方的說明是,
To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.
還是有方法突破該限制的,操作起來有點麻煩,只能暫時捨棄By帶來的便利。
於是只能通過控制元件座標來操作控制元件了。
還好有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。
Google後知道原因,MonkeyRunner用的是Jython 2.5.3,可能是基於Python 2.5,Python 2.7之後才有json模組。
難倒得改用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
相關文章
- [踩坑] Go Modules 使用Go
- Laravel-Modules 模組化開發實踐與填坑Laravel
- go modulesGo
- CSS ModulesCSS
- 前端基礎進階(15):詳解 ES6 Modules前端
- Runloop + runtime + otherOOP
- [Android]Monkeyrunner得id查詢方法Android
- [android]MonkeyRunner-andrec實現思路Android
- CSS Modules 初探CSS
- TypeScript Modules(2)TypeScript
- Golang modules 初探Golang
- Go Modules 命令Go
- Remove Unused ModulesREM
- 【翻譯】ES modules:通過漫畫進行深入理解
- 關於idea的一次踩坑記錄-Auto build completed with errorsIdeaUIError
- PHP函式庫(other)PHP函式
- Other SGA Initialization Parameters (96)
- Metric Collection ErrorsError
- oracle之errorsOracleError
- oracle 之errorsOracleError
- Go modules基礎精進,六大核心概念全解析(上)Go
- python modules and packagesPythonPackage
- 關於 CSS modulesCSS
- CSS Modules實踐CSS
- CSS Modules 用法教程CSS
- read by other session等待事件Session事件
- Python class中的otherPython
- read by other session 測試Session
- 等待事件:read by other session事件Session
- mount other server cdrom&directoryServer
- 【等待事件】read by other session事件Session
- Go Errors 詳解GoError
- slave-skip-errorsError
- HIbernate errors...Error
- ImportError: DLL load failed while importing _cext: 找不到指定的模組ImportErrorAIWhile
- Important SAP APO Function Modules!ImportFunction
- go modules 410 GoneGo
- go modules 初體驗Go