robotium集成instrumentation
Android測試環境的核心是Instrumentation框架,Instrumentation框架通過將主程序和測試程序在同一個進程來實現這些功能。在測試工程的manifest文件中添加<Instrumentation>元素來指定要測試的應用程序。官網api:http://developer.android.com/reference/android/app/Instrumentation.html
Android的Instrumentation對某個監控程序進行交互時:
1.啓動時將項目配置文件AndroidManifest.xml文件中的instrumentation標籤中的內容進行初始化(標明瞭所使用的測試運行類,目標項目包名)。
2.執行測試時(可用adb命令觸發),將啓動目標應用的Activity,同時將待測試ActivityThread作爲一個引用進行初始化。
3.在測試時測試項目的任何對目標項目進行的操作,都會採用異步的方式,將消息體放在目標程序的MessageQueue中,這樣目標程序在看到自己的MessageQueue中有內容時就會執行。
InstrumentationTestRunner繼承Instrumentation部署在android設備上,Messager service也部署在android設備上用於接收消息調用合適的processer,processer會啓運行相應app的ActivitiyInstrumentationTestCase2實現類的setUp方法,首先啓動目標app的入口activity,每一個test測試類都放在MessageQueue中,solo實例通過Instrumentation來真正控制目標app的行爲。整個控制過程中用例放在消息體中通過Instrumentation進行通信,而且沒完成一個testcase都會重新拉起應用跑下一個testcase。
原理參閱網址:http://www.apmbe.com/robotium
robotium如何定位控件?
search類獲取當前所有的view,然後根據類型或者文本去篩選,找到view後獲取座標,然後點擊座標。本質都是通過座標點擊。solo.clickonScreen方法,底層調用MotionEvent類。
MotionEvent,android.view中的類,Objectused to report movement (mouse, pen, finger, trackball) events
定位webview?
nativedriver,selenium的android版本,通過js腳本控制webview,在webview注入js腳本,然後調用nativedriver操作。
簽名加上包名,確定唯一app
簽名一致,兩個app進程可以進行通信。