https://developer.android.com/reference/android/support/test/uiautomator/UiObject.html
回傳值 | 方法名 | 說明 |
void | clearTextField () | 清除物件的文字 [物件必須是editable的(屬性會有focusble)] |
void | click () | 點擊物件 [不會等待畫面更新 會立即執行下一步] |
boolean | clickAndWaitForNewWindow () | 點擊物件 [會等待畫面更新] |
boolean | clickAndWaitForNewWindow (long timeout) | 點擊物件 [設定最長等待時間] |
boolean | dragTo (UiObject destObj, int steps) | 拖曳物件到目標物件的位置 [設定拖曳過去需要的步數] |
boolean | dragTo (int destX, int destY, int steps) | 拖曳物件到指定座標 [設定拖曳過去需要的步數] |
boolean | exists () | 物件是否存在 |
Rect | getBounds () | 取得物件界限 [長/寬] |
UiObject | getChild (UiSelector selector) | 取得物件的子物件 [選擇子物件的條件] |
int | getChildCount () | 取得物件的子物件數量 |
String | getClassName () | 取得物件的類別名 |
String | getContentDescription () | 取得物件的特殊敘述 |
UiObject | getFromParent (UiSelector selector) | 取得物件的父物件 |
String | getPackageName () | 取得物件的套件名 |
UiSelector | getSelector () | 取得選擇的物件 |
String | getText () | 取得物件的文字內容 |
boolean | isCheckable () | 是否可以被勾選 |
boolean | isChecked () | 是否被勾選 |
boolean | isClickable () | 是否可以被點擊 |
boolean | isEnabled () | 是否開啟狀態 [如果是關閉的會顯示但是灰色字樣] |
boolean | isFocusable () | 是否可以被聚焦 [文字框常有此屬性] |
boolean | isFocused () | 是否被聚焦 [文字聚焦時會跳出虛擬鍵盤] |
boolean | isLongClickable () | 是否可以被長按 |
boolean | isScrollable () | 是否可以滾動 |
boolean | isSelected () | 是否可以被選擇 |
boolean | longClick () | 長按物件 |
boolean | performTwoPointerGesture (Point startPoint1, Point startPoint2, Point endPoint1, Point endPoint2, int steps) | 模擬雙手指滑動 |
boolean | pinchIn (int percent, int steps) | 縮小畫面的手勢 [百分比/需要的步數] |
boolean | pinchOut (int percent, int steps) | 放大畫面的手勢 [百分比/需要的步數] |
boolean | setText (String text) | 對此物件設定文字 [有時候不能執行 需要點擊後使用KeyCode] |
boolean | swipeDown (int steps) | 畫面往下滑 [需要的步數] |
boolean | swipeLeft (int steps) | 畫面往左滑 [需要的步數] |
boolean | swipeRight (int steps) | 畫面往右滑 [需要的步數] |
boolean | swipeUp (int steps) | 畫面往上滑 [需要的步數] |
boolean | waitForExists (long timeout) | 等待物件到出現 [設定最長等待時間] |
boolean | waitUntilGone (long timeout) | 等待物件到消失 [設定最長等待時間] |
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
// 初始化/實例化(重要)
UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
@Test
public void apitest() throws IOException, UiObjectNotFoundException, RemoteException, InterruptedException {
//找尋物件
UiObject uiObject=uiDevice.findObject(new UiSelector().text("test"));
//取得物件長和寬
Rect rect=uiObject.getBounds();
int h=rect.height();
int w=rect.width();
//假設物件是可被聚焦or存在 則輸入內容or點擊等待新畫面 (一般可被聚焦就代表是可輸入的文字框)
if(uiObject.isFocusable() || uiObject.exists())
uiObject.setText("text");
else
uiObject.clickAndWaitForNewWindow();
//拖曳物件到指定座標/物件的位置
UiObject uiObject2=uiDevice.findObject(new UiSelector().text("test2"));
uiObject.dragTo(uiObject2,20);
uiObject.dragTo(500,500,20);
//取得物件的子物件接著長按(指定子物件條件)
UiObject uiObject3=uiObject.getChild(new UiSelector().text("testChild"));
uiObject3.longClick();
//取得可以滾動的物件接著往下滑
UiObject uiObject4=uiDevice.findObject(new UiSelector().scrollable(true));
uiObject4.swipeDown(20);
//取得屬於ImageView的物件接著模擬兩指頭的動向
UiObject uiObject5=uiDevice.findObject(new UiSelector().className("android.widget.ImageView"));
Point []points=new Point[4];
points[0].x=100;
points[0].y=100;
points[1].x=200;
points[1].y=200;
points[2].x=300;
points[2].y=300;
points[3].x=400;
points[3].y=400;
uiObject5.performTwoPointerGesture(points[0],points[1],points[2],points[3],10);
}
}