2017年6月21日 星期三

UiCollection / UiWatcher / Configurator APIs






回傳值 方法名 說明
UiCollection:
UiObject getChildByDescription(UiSelector childPattern, String text) 在群集中找尋符合條件的子物件 [特殊描述]
UiObject getChildByInstance(UiSelector childPattern, int instance) 在群集中找尋符合條件的子物件 [同一種物件中第幾個物件]
UiObject getChildByText(UiSelector childPattern, String text) 在群集中找尋符合條件的子物件 [文字內容]
UiObject getChild(UiSelector childPattern) 在群集中找尋符合條件的子物件 [自訂條件]
int getChildCount(UiSelector childPattern) 取得群集中的指定子物件個數
int getChildCount() 取得群集中的子物件個數
UiWatcher:
boolean checkForCondition() 檢查條件
boolean hasAnyWatcherTriggered () 是否有監聽器觸發過
boolean hasWatcherTriggered (String watcherName) 是否有指定的監聽器觸發過
void registerWatcher (String name, UiWatcher watcher) 設置監聽器 [名字]
void removeWatcher (String name) 移除指定監聽器 [名字]
void resetWatcherTriggers () 重置所有監聽器 [消除所有觸發過的紀錄]
void runWatchers () 強制執行所有監聽器
 
Configurator:
long getActionAcknowledgmentTimeout() 取得動作與動作的時間間隔 [默認3秒]
Configurator getInstance() Configurator實例化
long getKeyInjectionDelay() 取得輸入文字內容的時間間隔 [默認0秒]
long getScrollAcknowledgmentTimeout() 取得每次滾動的時間間隔 [默認0.2秒]
int getToolType() 取得使用的工具類型 [0/1/2/3/4 unknown/finger/stylus/mouse/eraser ]
long getWaitForIdleTimeout() 取得等待空閒的所需時間 [默認10秒]
long getWaitForSelectorTimeout() 取得尋找物件時的所需時間 [默認10秒]
Configurator setActionAcknowledgmentTimeout(long timeout) 設定動作與動作的時間間隔
Configurator setKeyInjectionDelay(long delay) 設定輸入文字內容的時間間隔
Configurator setScrollAcknowledgmentTimeout(long timeout) 設定每次滾動的時間間隔
Configurator setToolType(int toolType) 設定使用的工具類型 [0/1/2/3/4 unknown/finger/stylus/mouse/eraser ]
Configurator setWaitForIdleTimeout(long timeout) 設定等待空閒的所需時間
Configurator setWaitForSelectorTimeout(long timeout) 設定尋找物件時的所需時間


@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    // 初始化/實例化(重要)
    UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    final String mTag="mtag";

    @Test
    public void apitest() throws UiObjectNotFoundException {

       //UiCollection相關
        UiCollection uiCollection=new UiCollection(new UiSelector().text("test"));
       //在群集中找尋符合條件的子物件 (雙重條件)
       uiCollection.getChildByText(new UiSelector().className("testClass"),"text").click();
       //在群集中找尋符合條件的子物件 (自訂條件)
       uiCollection.getChild(new UiSelector().text("SUBtest")).click();
       //取得子物件個數
        int count=uiCollection.getChildCount();

        
       //UiWatcher相關
        UiWatcher uiWatcher = new UiWatcher() {
            @Override
            public boolean checkForCondition() {
                if (uiDevice.hasObject(By.text("test"))) {
                    uiDevice.pressBack();
                    return true;
                }
                return false;
            }
        };

       uiDevice.registerWatcher("debug",uiWatcher);
       //這裡強制讓它執行 (一般會是在執行腳本時 如果找不到物件時即會觸發)
       uiDevice.runWatchers();

       //Log會印出False (如果將上述返回值設定相反 會印出True)
       if(uiDevice.hasWatcherTriggered("debug"))
           Log.i(mTag, "deugtest: has true");
       else
           Log.i(mTag, "deugtest: has false");
       if(uiDevice.hasAnyWatcherTriggered())
           Log.i(mTag, "deugtest: has any true");
       else
           Log.i(mTag, "deugtest: has any false");


       //Configurator相關
        Configurator configurator=Configurator.getInstance();
       //一般都會是1 (模擬手指) 但是設定別種依然不影響畫面滑動和選取
        configurator.getToolType();
       //取得各種時間 (毫秒)
       long a=configurator.getActionAcknowledgmentTimeout();
       long b=configurator.getKeyInjectionDelay();
       long c=configurator.getScrollAcknowledgmentTimeout();
       long d=configurator.getWaitForIdleTimeout();
       long e=configurator.getWaitForSelectorTimeout();
       Log.i(mTag, "apitest: "+a+" "+b+" "+c+" "+d+" "+e);
        
    }
}