最近在使用UIautomator完成公司的一個主流程的自動化,因為不適用H5和IOS所以會放棄這個工具的使用,現在記錄在使用uiautomator的一些問題:
案列1:使用命令去啟動要運用的apk包
使用命令方式啟動,可以使用SDK中自帶的aapt工具,路徑是在E:\Soft\JAVA\adt-bundle-windows-x86_64-20131030\sdk\build-tools\android-4.4,使用時,需要在我的電腦中去配置,配置百度能解決
1..驗證aapt是否可用,如下,驗證aapt的包名
命令行:aapt dump badging 安裝包地址,如果能出現包名而不是報錯的提示,則aapt能夠使用
2.Uiautomator中使用aapt的方式啟動進程:
am start -n com.hzins.mobile / com.hzins.mobile
Am start -n 包名/啟動的activity
如果不知道啟動的進程,在aapt中單獨使用命令,查看里面的activity,如下圖所示


測試代碼:Runtime.getRuntime().exec("am start -n com.xxxxx.mobile(packgename)/com.hxx.xxx.act.ACT_Splash(stactivity) ");
案列2,在登錄控件中,登錄框和密碼框,是相同resouceid,class,並且密碼框沒有文本標識是哪一個文本框,
解決辦法:可用“insrance”標識定位,相同控件中
instance(0)表示第一個,instance(1)表示第二個
不寫instance就默認是instance(0)
3.案列:在提交登錄時,某些控件的clickables是為flase這樣是就不能使用點擊如:
1.提交訂單,有提示未登錄
2.控件的點擊的屬性不可用,怎么獲取

解決辦法:獲取外層可用的控件,注意標識
3.捕獲異常監聽,如啟動時升級提醒和顯示框

解決:uiwatcher結構應該是這樣: main(){ 注冊watcher 一個uiselector相關操作 刪除watcher } 還需要注意:swipe(startX, startY, endX, endY, steps) --在手機上滑動,從(startX,startY)到(endX,endY)。steps表示滑動的這個距離分為幾步完成,數目越少,滑動幅度越大。
String watcherName = "watcher1";
getUiDevice().getInstance().registerWatcher(watcherName, new UiWatcher(){//android.widget.ImageView是導航頁第一個頁面的控件
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", "成功了點擊");
return true;
}
});
//去判定首頁任意一個控件
UiObject runte=new UiObject(new UiSelector().className("android.widget.ImageView").resourceId("com.hzins.mobile:id/bt_ok"));
runte.clickAndWaitForNewWindow();
// 刪除watcher
getUiDevice().removeWatcher(watcherName);
