MonkeyRunner Command Summary
1. #導入模塊;
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
還可起別名:
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
2. #連接當前設備,並返回一個MonkeyDevice對象;
device = MonkeyRunner.waitForConnection(float timeout, string deviceID) // 第一個參數爲等待連接設備時間,第二個參數爲具體連接的設備
3. #安裝Android包,注意,此方法返回的返回值爲boolean,由此可以判斷安裝過程是否正常 ;
device.installPackage('myproject/bin/MyApplication.apk')
print ('True')
device.removePackage ('com.example.android.notepad')
print ('False')
4. #啓動一個Activity;
device.startActivity(component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')
5. #截圖;
result = device.takeSnapshot()
result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')
6. #延時(秒);
MonkeyRunner.sleep(3)
7. #滑動屏幕;
for i in range(1,70):
device.drag((250,850),(250,110),0.1,10) //開始,結束,持續時間,步驟
for i in range(1,70):device.drag((250,110),(250,850),0.1,10)
MonkeyRunner.sleep(1)
8. #觸擊屏幕;
device.touch(507,72,"DOWN_AND_UP")
9. #執行adb shell命令;
device.shell("input text goup01")
10. #按鍵按下HOME鍵 device.press('KEYCODE_HOME','DOWN_AND_UP')
相應的按鍵對應的名稱如下:
menu鍵:KEYCODE_MENU
back鍵:KEYCODE_BACK
search鍵:KEYCODE_SEARCH
end鍵:KEYCODE_ENDCALL
上導航鍵:KEYCODE_DPAD_UP
下導航鍵:KEYCODE_DPAD_DOWN
左導航鍵:KEYCODE_DPAD_LEFT
右導航鍵:KEYCODE_DPAD_RIGHT
ok鍵:KEYCODE_DPAD_CENTER
上音量鍵:KEYCODE_VOLUME_UP
下音量鍵:KEYCODE_VOLUME_DOWN
power鍵:KEYCODE_POWER
camera鍵:KEYCODE_CAMERA
11. #輸入a s d
device.type('asd')
12. #輸入回車
device.press('KEYCODE_ENTER')
13. #記錄和回放
*記錄:
直接在命令行中輸入:monkeyrunner monkey_recorder.py
在界面上操作然後將腳本保存爲 monkey_test.mr
*回放:
運行保存的腳本,然後你就看到模擬器進行你剛纔一樣的操作:
monkeyrunner monkey_playback.py monkey_test.mr
注:monkey_recorder.py,monkey_test.mr,monkey_playback.py都應放在..\android-sdk-windows\tools目錄下。
14. #產生help文件並保存
monkeyrunner help.py <format> <outfile> //format可以是text或html,outfile是包含路徑的輸出文件名。
15.圖片對比sameAs
imageB=device.takeSnapshot();
imageB.writeToFile('./imageB.png','png');
flag = imageB.sameAs(imageA,0.5)
經過試驗此函數在win7;tools工具16以上的版本好用;受JAVA庫的音響容易出問題
v1:isSame=imgOld.sameAs(imgNew,0.9)
at com.android.monkeyruner.MonkeyImage.sameAs(MonkeyImage.java:138)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
java.lang.ClassCastException:java.lang.ClassCastException:org.python.core.PySigleton cannot be cast to com.android.monkeyrunner.core.IMonkeyImage
字面上是類轉換異常,而這兩個類一個是python標準包中的類PySigleton,一個是android的類IMonkeyImage,我們在什麼地方調用過它們,就是MokneyImage.sameAs()這個方法,但是這個方法不是由我們實現的。所以,這個問題可以大膽的肯定是歸結於系統的庫(jar包)的問題。
這個庫在哪兒呢,就在<SDK>/tools/lib下面的jython.jar和monkeyrunner.jar。
可以查看一下自己的tools版本,如果是12的話,就可能出現這個問題。
解決方法:升級tools包到15以上,當然如果用到eclipse的話,也需要升級ADT。
v2:有童鞋使用MonkeyImage的sameAs方法老是出錯,我自己試了試,確實要出錯,錯誤提示是:不能將IChimpImage對象轉 換爲IMonkeyImage對象時要出錯。再次查看源碼,MonkeyImage.java中的sameAs函數有這麼一個註釋:// TODO: check if thisconversion works
IChimpImage ther = (IChimpImage) otherObject.__tojava__(IChimpImage.class);看來明顯google的工程師還沒有驗證過這個轉換的正確性,並且很杯具地失敗了。哎,真是天意弄人。幸好,有萬能的python在,我們還是有辦法滴。建議大家使用python的PIL庫進行圖片比較,一樣可以達到非常好的效果並且要穩定很多。
16.ImageCompare()圖片對比
imageB=device.takeSnapshot();
imageB.writeToFile('./imageB.png','png');
if True == ImageCompare("480x800.png","imageB.png",20,120,240,165):
這個在XP上適合較低版本的tools工具;在win7較高版本容易出問題;