在做 android 前端性能自動(dòng)化測(cè)試時(shí),你是否經(jīng)歷過(guò)這樣的場(chǎng)景:依次啟動(dòng) A、B、C 三個(gè) app,其中 C 是被測(cè) app, 當(dāng)當(dāng)前屏幕切換到 B 進(jìn)行相關(guān)操作后,如何通過(guò)封裝方法實(shí)現(xiàn)自動(dòng)切換會(huì)已經(jīng)處于后臺(tái)進(jìn)程模式的被測(cè) app 進(jìn)程 C 呢?
我的實(shí)現(xiàn)思路大體是這樣的。
1
首先封裝點(diǎn)擊鍵盤 menu 鍵操作,代碼如下所示:
public static void tapDeviceMenu(String udid){String cmdMenu = "adb -s "+udid+" shell input keyevent KEYCODE_MENU";CmdUtils.executeCmd(cmdMenu);}
2
當(dāng)前界面處于進(jìn)程切換情況下,可以通過(guò)點(diǎn)當(dāng)前屏幕的中點(diǎn)實(shí)現(xiàn)切換到進(jìn)程 C 的預(yù)期效果,封裝點(diǎn)擊當(dāng)前屏幕中點(diǎn)方法,代碼如下所示:
public static void screenTapCenter(String udid){List<String> list = AppiumUtil.getResolution(udid);if(list.size() == 2){String width = list.get(0);String height = list.get(1);String cmdTapCenter = "adb -s "+udid+" shell input tap "+(Integer.valueOf(width)/2)+" "+(Integer.valueOf(height)/2);CmdUtils.executeCmd(cmdTapCenter);} }
3
不同的手機(jī)設(shè)備屏幕分辨率是不同的,如何兼容不同手機(jī)獲取中點(diǎn)坐標(biāo)呢?封裝方法如下:
public static List<String> getResolution(String udid){String cmdStr = "adb -s "+ udid +" shell wm size";List<String> strList = CmdUtils.executeCmd(cmdStr);List<String> list = new ArrayList<String>();for( int i = 0; i< strList.size(); i++){if( strList.get(i)!=null && !strList.get(i).isEmpty() ){list = StringMatchUtils.getMatchers("Physical size: (\\d{1,})x(\\d{1,})", strList.get(i),2);} }return list; }
4
對(duì)應(yīng)的 adb 命令有哪些呢?
>adb shell input keyevent KEYCODE_MENU>adb shell input tap 中點(diǎn)橫坐標(biāo)中點(diǎn)縱坐標(biāo)Ⅴ注意,該方法僅適用于安卓設(shè)備啟動(dòng) 3 個(gè)應(yīng)用,并且啟動(dòng)順序是 A、B、C,并且 B 這個(gè) App處于當(dāng)前界面情況下如何切換到 C 情況下。這里還涉及到獲取 dos 命令返回結(jié)果以及正則匹配指定字符串,這兩個(gè)方法封裝較常見,在這里就不再贅述了。
作 者:Testfan 恨水
出 處:微信公眾號(hào):自動(dòng)化軟件測(cè)試平臺(tái)
版權(quán)說(shuō)明:歡迎轉(zhuǎn)載,但必須注明出處,并在文章頁(yè)面明顯位置給出文章鏈接
(正文已結(jié)束)
推薦閱讀:oppo夢(mèng)境版
免責(zé)聲明及提醒:此文內(nèi)容為本網(wǎng)所轉(zhuǎn)載企業(yè)宣傳資訊,該相關(guān)信息僅為宣傳及傳遞更多信息之目的,不代表本網(wǎng)站觀點(diǎn),文章真實(shí)性請(qǐng)瀏覽者慎重核實(shí)!任何投資加盟均有風(fēng)險(xiǎn),提醒廣大民眾投資需謹(jǐn)慎!