uiautomator的坑和AAPT命令方式启动一个应用程序
最近在使用UIautomator完成公司的一個(gè)主流程的自動(dòng)化,因?yàn)椴贿m用H5和IOS所以會(huì)放棄這個(gè)工具的使用,現(xiàn)在記錄在使用uiautomator的一些問題:
案列1:使用命令去啟動(dòng)要運(yùn)用的apk包
使用命令方式啟動(dòng),可以使用SDK中自帶的aapt工具,路徑是在E:\Soft\JAVA\adt-bundle-windows-x86_64-20131030\sdk\build-tools\android-4.4,使用時(shí),需要在我的電腦中去配置,配置百度能解決
1..驗(yàn)證aapt是否可用,如下,驗(yàn)證aapt的包名
?命令行:aapt?dump?badging?安裝包地址,如果能出現(xiàn)包名而不是報(bào)錯(cuò)的提示,則aapt能夠使用
2.Uiautomator中使用aapt的方式啟動(dòng)進(jìn)程:
am?start?-n?com.hzins.mobile?/?com.hzins.mobile
Am?start?-n?包名/啟動(dòng)的activity
如果不知道啟動(dòng)的進(jìn)程,在aapt中單獨(dú)使用命令,查看里面的activity,如下圖所示
?
?
測(cè)試代碼:Runtime.getRuntime().exec("am?start?-n?com.xxxxx.mobile(packgename)/com.hxx.xxx.act.ACT_Splash(stactivity)?");
?
案列2,在登錄控件中,登錄框和密碼框,是相同resouceid,class,并且密碼框沒有文本標(biāo)識(shí)是哪一個(gè)文本框,
解決辦法:可用“insrance”標(biāo)識(shí)定位,相同控件中
instance(0)表示第一個(gè),instance(1)表示第二個(gè)?
不寫instance就默認(rèn)是instance(0)?
3.案列:在提交登錄時(shí),某些控件的clickables是為flase這樣是就不能使用點(diǎn)擊如:
1.提交訂單,有提示未登錄
2.控件的點(diǎn)擊的屬性不可用,怎么獲取
?
解決辦法:獲取外層可用的控件,注意標(biāo)識(shí)
3.捕獲異常監(jiān)聽,如啟動(dòng)時(shí)升級(jí)提醒和顯示框
?
解決:uiwatcher結(jié)構(gòu)應(yīng)該是這樣: main(){ 注冊(cè)watcher 一個(gè)uiselector相關(guān)操作 刪除watcher } 還需要注意:swipe(startX,?startY,?endX,?endY,?steps) --在手機(jī)上滑動(dòng),從(startX,startY)到(endX,endY)。steps表示滑動(dòng)的這個(gè)距離分為幾步完成,數(shù)目越少,滑動(dòng)幅度越大。
??String?watcherName?=?"watcher1";
?getUiDevice().getInstance().registerWatcher(watcherName,?new?UiWatcher(){//android.widget.ImageView是導(dǎo)航頁第一個(gè)頁面的控件
?UiObject?runte=new?UiObject(new?UiSelector().className("android.widget.ImageView"));
@Override
public?boolean?checkForCondition()?{
//?TODO?Auto-generated?method?stub
if(runte.exists())
{
?
int?x=getUiDevice().getInstance().getDisplayWidth();
int?y=getUiDevice().getInstance().getDisplayHeight();
//getUiDevice().swipe(startX,?startY,?endX,?endY,?steps)
?getUiDevice().swipe(600,?y/2,x/4,y/2,5);
}
Log.d("tag",?"成功了點(diǎn)擊");
return?true;
?
}
?});
?//去判定首頁任意一個(gè)控件
UiObject?runte=new?UiObject(new?UiSelector().className("android.widget.ImageView").resourceId("com.hzins.mobile:id/bt_ok"));
runte.clickAndWaitForNewWindow();
// 刪除watcher
getUiDevice().removeWatcher(watcherName);
?
轉(zhuǎn)載于:https://www.cnblogs.com/chongyou/p/5125499.html
總結(jié)
以上是生活随笔為你收集整理的uiautomator的坑和AAPT命令方式启动一个应用程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用FTP命令 1. 连接ftp服务器
- 下一篇: Divide and conquer:D