UiAutomator筆記之UiObject API(四)
阿新 • • 發佈:2019-02-18
一、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獲取兄弟類(遞迴) |
返回值 | 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, |
執行任意兩個手指觸控手勢,模擬兩個手指手勢 |
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() | 檢查物件是否存在 |