1. 程式人生 > >UiAutomator筆記之UiObject API(四)

UiAutomator筆記之UiObject API(四)

一、UiObject 功能

UiObject用來代表一個元件物件,它提供一系列方法和屬性來模擬在手機上的實際操作。如:文字的輸入和清除、點選、長按、拖動、滑動,也可獲取元件的屬性、判斷元件物件是否存在等。


二、API詳細介紹

1、點選與長按

(1)相關API

返回值 API 說明
boolean click() 點選物件
boolean clickAndWaitForNewWindow(long timeout) 點選物件,等待新窗口出現,引數為等待超時時長
boolean clickAndWaitForNewWindow() 點選物件,等待新窗口出現
boolean
clickBottomRight() 點選物件的右下角
boolean clickTopLeft() 點選物件的左上角
boolean longClick() 長按物件,對物件執行長按操作
boolean longClickBottomRight() 長按物件的右下角
boolean longClickTopLeft() 長按物件的左上角

(2)示例

new UiObject(new Selector().resourceId("xxxxx")).click();//對指定資源id的元件執行點選操作

2、拖拽與滑動
(1)區別
拖拽:將控制元件從當前位置移動到指定位置
滑動:向某一方向(上、下、左、右)移動一小段距離

(2)相關API
返回值 API 說明
boolean dragTo(UiObject destObj, int steps) 拖拽物件到另一個物件位置上,步長可設定拖動的速度
boolean dragTo(int destX, int destY, int steps) 拖拽物件到螢幕某個座標位置上,步長可設定拖動速度
boolean swipeDown(int steps) 拖動物件往下滑動
boolean swipeLeft(int steps) 拖動物件往左滑動
boolean swipeRight(int steps) 拖動物件往右滑動
boolean swipeUp(int steps)
拖動物件往上滑動

3、輸入文字與清除文字

(1)相關API
返回值 API 說明
boolean setText(String text) 在物件中輸入文字(實現方式:先清除文字再輸入)
void clearTextField() 清除編輯框中的文字(實現方式:長按再清除)

(2)補充說明

clearTextField()的內部實現方式是先長按文字框然後全選刪除,導致有些編輯框無法通過呼叫該方法清除文字內容。這時最好自己寫程式碼實現清除文字功能。

示例程式碼:

//將游標移動到行尾,使用backspace進行逐個刪除

UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_MOVE_END);

//判斷條件中w是編輯框為空時所顯示的hint文字物件;當hint出現時,說明該編輯框內的文字已清空

while(!w.exists()){
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_DEL);
}

4、獲取物件的屬性與屬性的判斷

(1)獲取物件的屬性-相關API
返回值 API 說明
Rect getBounds() 獲得物件矩形座標,矩形左上角座標與右下角座標
int getChildCount() 獲得下一級子類數量
String getClassName() 獲得物件類名屬性的類名文字
String getContentDescription() 獲得物件的描述屬性的描述文字
String getPackageName() 獲得物件包名屬性的包名文字
String getText() 獲得物件的文字屬性中的文字
Rect getVisibleBounds() 返回可見檢視的範圍,如果檢視的部分是可見的,只有可見部分報告的範圍

(2)獲取父類與子類節點-相關API
返回值 API 說明
UiObject getChild(UiSelector selector) 獲得物件的子類物件,可以遞迴獲取子孫當中某個物件
UiObject getFromParent(UiSelector selector) 從父類獲取子類,按照UiSeletor獲取兄弟類(遞迴)
(3)屬性的判斷-相關API
返回值 API 說明
boolean isCheckable() 檢查物件的checkable屬性是否為true
boolean isChecked() 檢查物件的checked屬性是否為true
boolean isClickable() 檢查物件的clickable屬性是否為true
boolean isEnabled() 檢查物件的enabled屬性是否為true
boolean isFocusable() 檢查物件的focusable屬性是否為true
boolean isFocused() 檢查物件的focused屬性是否為true
boolean isLongClickable() 檢查物件的longclickable屬性是否為true
boolean isScrollable() 檢查物件的scrollable屬性是否為true
boolean isSelected() 檢查物件的selected屬性是否為true

5、手勢的操作

(1)手勢相關操作
兩指平移 
多指平移 
兩指合攏o---> <---o
兩指擴張<---oo--->

(2)相關API
返回值 API 說明
boolean performMultiPointerGesture(PointerCoords[]... touches) 執行單手指觸控手勢,可定義任意手勢,與形狀

boolean

performTwoPointerGesture(Point startPoint1, Point startPoint2, 
Point endPoint1, Point endPoint2, int steps)

執行任意兩個手指觸控手勢,模擬兩個手指手勢
boolean pinchIn(int percent, int steps) 手勢操作,兩點向內收縮
boolean pinchOut(int percent, int steps) 手勢操作,兩點向外張開

6、判斷物件是否存在

(1)相關API

返回值 API 說明
boolean waitForExists(long timeout) 等待物件出現
boolean waitUntilGone(long timeout) 等待物件消失
boolean exists() 檢查物件是否存在