Android monkeyrunner自動化測試
monkeyrunner測試主要是通過編寫一個Python程序去安裝一個Android應用程序或測試包,運行它,向它發送模擬擊鍵,截取它的用戶界面圖片,並將截圖存儲於工作站上。由於SDK是舊版本,暫時無法獲取自定義屏幕上的組件焦點,所以通過截取屏幕的方式獲取組件的位置座標,然後利用觸摸的方式點擊組件。
關於monkeyrunner自動化測試網上的例子太多了,而且都是轉載的,基本上都是對官方文檔的翻譯,所以遇到很多問題都無法解決。下面附上一些簡單的例子。
- #導入程序測試所需要的模塊
- from com.android.monkeyrunnerimport MonkeyRunner, MonkeyDevice
- #連接當前對象,返回一個MonkeyDevice對象
- device = MonkeyRunner.waitForConnection()
- #安裝所要測試的android應用程序或測試包
- device.installPackage('*******.apk')
- #運行指定的Activity
- device.startActivity(component='com.mzba.test.TestActivity')
- #觸摸自動登錄複選框
- device.touch(222,388,'DOWN_AND_UP')
- #觸摸記住密碼複選框
- device.touch(37,421,'DOWN_AND_UP')
- #觸摸登錄按鈕
- device.touch(271,475,'DOWN_AND_UP')
- #測試暫停3秒鐘
- MonkeyRunner.sleep(3.0)
- #截取屏幕截圖
- result = device.takeSnapshot()
- #將截圖保存至文件
- result.writeToFile('login.png','png')
不過更新了sdk以後,發現press方法無法使用了,報錯如下:
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP') TypeError: press: The 3rd argument is required
所以要換成另一種方法:
- device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)
更新了SDK的版本,增加了EasyMonkeyDevice的相關類,已經可以利用控件的id來進行交互。
- from com.android.monkeyrunnerimport MonkeyRunner, MonkeyDevice
- from com.android.monkeyrunner.easyimport EasyMonkeyDevice
- from com.android.monkeyrunner.easyimport By
- device = MonkeyRunner.waitForConnection()
- easy_device = EasyMonkeyDevice(device)
- easy_device.startActivity(component='com.xuanwu.etion/.SplashActivity')
- #輸入用戶名
- device.type('mzba')
- #觸摸密碼框,相當於獲取焦點
- easy_device.touch(By.id('id/login_edit_pwd'), MonkeyDevice.DOWN_AND_UP)
- #輸入密碼
- device.type('888888')
- #按下返回鍵,相當於關閉輸入法的彈出框
- device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)
- #easy_device.touch(By.id('id/login_edit_account'), MonkeyDevice.DOWN_AND_UP)
- #點擊登錄按鈕
- easy_device.touch(By.id('id/login_btn'), MonkeyDevice.DOWN_AND_UP)
附上官方文檔: