關於Uiautomator的學習歷程(2)
阿新 • • 發佈:2019-01-07
package com.example.xiaofeng.uiautotest; import android.content.Context; import android.support.test.espresso.InjectEventSecurityException; import android.support.test.runner.AndroidJUnit4; import android.support.test.uiautomator.By; import android.support.test.uiautomator.Configurator; import android.support.test.uiautomator.StaleObjectException; importandroid.support.test.uiautomator.UiObject2; import android.support.test.uiautomator.UiObjectNotFoundException; import android.support.test.uiautomator.UiSelector; import android.support.test.uiautomator.Until; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; importorg.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import java.util.List; import java.util.Random; /** * Created by datou on 17/5/3.用於建立包含物流的訂單貸運單 */ @RunWith(AndroidJUnit4.class) public class TmsOrder extends BaseTest{ @Test public void test1() throws UiObjectNotFoundException,InjectEventSecurityException{ openApp(APP); //開啟APP waitUpdate(); //等待頁面載入 Configurator.getInstance().setActionAcknowledgmentTimeout(3000).setKeyInjectionDelay(300); /*-------第一次進入app需要通過引導頁----------*/ firstEntrance(); /*---------點選訂單寶---------*/ getUiByText("訂單寶",30000).click(); //點選訂單寶 getUiByText("申請").click(); //進入訂單寶列表後點擊申請按鈕 // getUiByText("訂單備註",2000).setText("測試單" + new Random().nextInt(200)); // getUiByText("借款總額",2000).setText("180000"); getUiById("order_name").setText("測試單" + new Random().nextInt(200)); //設定訂單備註+0-10000之間的一個整數 getUiById("order_money").setText("200000"); //設定訂單金 getUiById("rl_addcar",2000).click(); //點選車輛資訊按鈕,進入新增車輛資訊頁面 getUiById("tv_model").click(); //點選車型,進入車型選擇頁面 getUiByText("中規/國產",30000).click(); //選擇車規為中規 getUiByText("奧迪",1000000).click(); //選擇品牌為奧迪 getUiByText("奧迪A3",30000).click(); //選擇車系為奧迪A3 getUiByText("奧迪A3 2017款 Sportback 35 TFSI 進取型").click(); //選擇車型 getUiById("ed_car_num").setText("1"); //由於指導價會自動帶入,所以僅需要錄入車輛數量 getUiByText("確認新增",3000).click(); //點選確認新增按鈕 getUiByText("提交").click(); //此時頁面自動返回申請訂單寶頁面,點選提交按鈕 // getUiByText("確定").click(); // getUiByText("完善資料").click(); waitUpdate(); mUIDevice.wait(Until.findObject(By.clazz(Button.class).textContains("確定")),2000).click(); //頁面彈框提示是否確認提交訂單,點選確定按鈕 waitUpdate(); mUIDevice.wait(Until.findObject(By.clazz(Button.class).textContains("完善資料")),2000).click(); //頁面彈框提示是否前往完善資料,點選完善資料 waitUpdate(); getUiByText("去繫結",3000).click(); //完善完畢後進入訂單寶詳情頁面,點選"去繫結"進入物流繫結頁面 getUiByText("繫結物流",3000).click(); //物流資訊頁面,點選繫結物流 getUiByText("起始地").click(); //選擇起始地 getUiByText("合肥市").click(); getUiByText("目的地").click(); //選擇目的地 getUiByText("杭州市").click(); getUiById("cb_select_all").click(); //點選全選按鈕,選定全部車輛 getUiByText("查詢運價",50000).click(); //點選查詢運價 getUiByText("下單",50000).click(); //詢價結果頁面點選下單按鈕,頁面如果有多個下單按鈕,會預設點選第一個 getUiByText("發運時間").click(); //點擊發運時間 getUiByText("三天後").click(); //彈框中選擇三天後 getUiByText("發車人姓名").setText("大頭娃娃"); getUiByText("發貨人電話").setText("17778073065"); int height = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight() ; mUIDevice.swipe(0,height - 100,0,0,100) ; //滑動頁面,分別是起始點位置和終點位置以及滑動的速度 getUiById("ed_detail").setText("我是訂單貸運單詳細地址"); getUiByText("提交運單",3000).click(); //點選提交運單按鈕 // UiObject2 leftBtn = getUiById("left_btn", 2000); // Assert.assertNull("物件為空",leftBtn); // leftBtn.click(); //因為後來事實證明這段原始碼有問題,就是無法定位到左上角的返回按鈕,所以修改路線為確定物流,因為確定物流後頁面會自動返回訂單寶詳情頁面。哈哈哈! getUiById("btn_binding",5000).click(); //點選確認物流 getUiByText("確定").click(); waitUpdate(); // try { // Thread.sleep(5 * 1000); //執行緒睡眠10s // } catch (InterruptedException e) { // e.printStackTrace(); //如果沒有停留10s中就列印丟擲的異常 // } boolean swipe = mUIDevice.swipe(0, height - 100, 0, 0, 100); //再次滑動頁面至下方 // getUiByText("採購合同照片").click(); // mUIDevice.wait(Until.findObject(By.desc("採購")), delayTime).click(); /*----------上傳採購合同照片----------*/ getUiByText("待上傳").click(); //點選待上傳進入採購合同照片上傳頁面 getUiById("iv_photo").click(); getPhoto(); getUiByText("提交",3000).click(); /*--------上傳支付定金照片------------*/ getUiByText("待上傳").click(); getUiById("iv_photo").click(); getPhoto(); getUiByText("提交",3000).click(); /*-------------上傳保證金照片------------*/ getUiByText("待上傳").click(); getUiById("iv_photo").click(); getPhoto(); getUiByText("提交",3000).click(); //停留5秒鐘 try { Thread.sleep(5 * 1000); //執行緒睡眠10s } catch (InterruptedException e) { e.printStackTrace(); //如果沒有停留10s中就列印丟擲的異常 } } //遞迴,如果報錯就進行右上角的匯入按鈕重複多次點選 // private void daoRuClick() { // try { // getUiById("title_icon_right").click(); // }catch (StaleObjectException e){ // e.printStackTrace(); // daoRuClick(); // } // } private void getPhoto() { List<UiObject2> photoWallGrid = getUiById("photo_wall_grid").findObjects(By.clazz(ImageView.class)); for (int i = 0 ; i < photoWallGrid.size() ; i++){ if (i != 0){ photoWallGrid.get(i).click(); break; } } getUiById("title_icon_right").click(); }
}
下面我準備總結下學習到的小技巧,哈哈。
1.一般類、方法、物件、屬性的命名規則都是首字母小寫(eg.addCar)
2.封裝方法:
前提:如果有幾行程式碼需要在後面重復使用,則為了避免程式碼的重複性可以考慮將這個方法封裝起來,後面直接呼叫
步驟:選中要封裝的那個方法的程式碼段——右鍵,refactor——Extract——Method——錄入方法名(按照方法命名規則)——OK啦
後面可以直接呼叫,比如我有個新增車輛的方法叫做addCar,直接呼叫的時候就addCar();
3.建立物件:
背景:獲取某個物件對它進行重新命名,方便後面直接使用使用:
步驟:選中getUiById——alt+return——Introuduce...——enter——命名這個物件的新名字——enter就好了
4.通過座標定位:
5.滑動頁面:
int height = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight() ; mUIDevice.swipe(0,height - 100,0,0,100) ; //swip方法是整個螢幕滑動的方法,裡面的五個引數分別是起始點的座標和終點的座標以及滑動的速度。因為x座標是相對不動的,所以相對座標都選為0
6.在當前頁面停留:
try{ Thread.sleep(5 * 1000); //執行緒睡眠10s } catch (InterruptedException e) { e.printStackTrace(); //如果沒有停留10s中就列印丟擲的異常 }
7.遞迴對某個點選事件進行反覆點選:
//遞迴,如果報錯就進行右上角的匯入按鈕重複多次點選 private void daoRuClick() { try { getUiById("title_icon_right").click(); //點選這個按鈕對動作 }catch(StaleObjectException e){ //如果抓取StaleObjectException這個異常 e.printStackTrace(); //打印出來這個異常 daoRuClick(); //反覆執行這個方法 } }8.斷言(本段用於檢視那個按鈕到底有沒有獲取到)
UiObject2 leftBtn = getUiById("left_btn", 2000);//定義這個定位的內容為一個物件 // Assert.assertNull("物件為空",leftBtn); //判斷這個物件是否為空 // leftBtn.click(); //點選這個按鈕
今天好像就學了這些,明天繼續學習哈!~