MonkeyRunner進坑——errors importing other modules,monkeyrunner

來源:互聯網
上載者:User

MonkeyRunner進坑——errors importing other modules,monkeyrunner

後知後覺,剛知道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 recorderrecorder.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.gzpython setup.py install

然後在MonkeyRunner下import還是報錯import error。

import simplejson

查看Jython path,沒有simplejson路徑。

import syssys.path

添加simplejson路徑,再import,成功。

sys.path.append('/Library/Python/2.5/site-packages/simplejson-3.6.5')

但是退出後又失效。
解決方案1是用PYTHONPATH,解決方案2是在Python指令碼裡動態添加,添加還需要判斷重複,最好還能將路徑標準化,對Windows系統做些處理。
這裡採用代碼裡動態添加的方法,而且先不管Windows系統了。

 

import sysif 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 jsonexcept ImportError:    import simplejson as json

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.