2017年6月19日 星期一

UiObject API





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);
        
    }
}