您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源功能測(cè)試工具 >
Robotium跨應(yīng)用處理方法
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/5/8 11:17:37 ] 推薦標(biāo)簽:

  相信用過(guò)一段時(shí)間Robotium的同學(xué)一般都遇到過(guò)如下情況:界面跳轉(zhuǎn)到被測(cè)程序外以后,Robotium毫無(wú)對(duì)策了,這也是Instrumentation框架致命的一個(gè)缺點(diǎn);然而領(lǐng)導(dǎo)是不會(huì)管你這些很“充分”的理由的…

  Ok,既然我們有這樣的需求,還是想辦法解決吧。調(diào)研了幾天終還是實(shí)現(xiàn)了一個(gè)曲線救國(guó)的方法:

  實(shí)現(xiàn)原理:編寫一個(gè)程序A,用于接收CASE中發(fā)送的指定廣播,當(dāng)程序A接收到指定的廣播后會(huì)響應(yīng)你注入的動(dòng)作事件。

  準(zhǔn)備工作:

  熟悉Service 、BoradCastReceiver、input keyevent, 有不清楚的同學(xué)可以先百度下以上知識(shí)模塊。

  具體實(shí)現(xiàn):

  1、首先為了方便我們使用,我們可以設(shè)置為程序A為開(kāi)機(jī)啟動(dòng)一個(gè)Service,該Service中注冊(cè)一個(gè)BoardCastReceiver用于接收一個(gè)特定action的廣播,設(shè)置一個(gè)IntentFilter:IntentFilter mIntentFilter=new IntentFilter(); mIntentFilter.addAction(“android.zered.action”);然后在BoardCastReceiver的OnReceive方法中使用Runtime.getRuntime.exec(cmdB)執(zhí)行我們Case中發(fā)送過(guò)來(lái)的指令(input keyevent xx 當(dāng)然也可以是其他的一些shell命令)。注意:關(guān)于設(shè)置程序開(kāi)機(jī)啟動(dòng),3.1以后Android系統(tǒng)對(duì)廣播接收做了安全處理——未啟動(dòng)過(guò)的程序是不能接收廣播的,當(dāng)然我們還是有方法解決:即把該程序設(shè)置為系統(tǒng)級(jí)應(yīng)用即可,然后把該程序push到system/app下重啟手機(jī);

  2、步驟1的完成已經(jīng)為我們完成了一個(gè)命令執(zhí)行端(可以理解為CS的server端),現(xiàn)在我們需要做的是發(fā)送這個(gè)廣播,發(fā)送廣播的方法為context.sendbroadcast,所以我們?cè)贑ase中可以使用solo.getCurrentActivity.sendbroadcast發(fā)送廣播;

  剩下的是我們要把這個(gè)命令行cmdB封裝到廣播中,Intent intent=new Intent();intent.setAction(“android.zered.action”);intent.putExtra(TAG,cmdB);solo.getCurrentActivity.sendbroadcast(intent);

  Ok,這樣以來(lái)一個(gè)帶有命令行的廣播算是發(fā)送出去了。

  3、以上步驟完成以后,步驟1啟動(dòng)的程序A中的Service接收到步驟2發(fā)送的廣播以后,會(huì)執(zhí)行我們發(fā)送的命令行指令cmdB了:Runtime.getRuntime.exec(intent.getStringExtra(TAG))

  以上是Robotium跨應(yīng)用的一種處理方法,歡迎大家拍磚。

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd