https://developer.android.com/reference/android/support/test/uiautomator/UiObject2.html
回傳值 | 方法名 | 說明 |
void | clear() | 清除物件的文字 [物件必須是editable的(屬性會有focusble)] |
void | click() | 點擊物件 [不會等待畫面更新 會立即執行下一步] |
<R> R | clickAndWait(EventCondition<R> condition, long timeout) | 點擊後等待條件觸發 [若條件一直不觸發則使用設置的等待秒數] |
void | drag(Point dest) | 拖曳物件到指定座標 |
void | drag(Point dest, int speed) | 拖曳物件到指定座標 [速度:每秒移動像素] [越大越快] |
boolean | equals(Object object) | 物件是否相同 |
UiObject2 | findObject(BySelector selector) | 找尋物件 [UiObject2] |
List<UiObject2> | findObjects(BySelector selector) | 找尋同一種多項物件 [UiObject2] |
boolean | fling(Direction direction, int speed) | 滾動 [方向/速度:每秒移動像素] [越大越快] |
boolean | fling(Direction direction) | 滾動 [方向] |
String | getApplicationPackage() | 取得套件名 [來自指定物件] |
int | getChildCount() | 取得子物件數 |
List<UiObject2> | getChildren() | 取得子物件群 |
String | getClassName() | 取得物件的類別名 |
String | getContentDescription() | 取得物件的特殊敘述 |
UiObject2 | getParent() | 取得物件的父物件 |
String | getResourceName() | 取得資源名 [resource-id] |
String | getText() | 取得物件的文字內容 |
Rect | getVisibleBounds() | 取得物件長寬 |
Point | getVisibleCenter() | 取得物件中心點 |
boolean | hasObject(BySelector selector) | 找到指定物件時 |
int | hashCode() | 物件的哈希碼 |
boolean | isCheckable() | 是否可以被勾選 |
boolean | isChecked() | 是否被勾選 |
boolean | isClickable() | 是否可以被點擊 |
boolean | isEnabled() | 是否開啟狀態 [如果是關閉的會顯示但是灰色字樣] |
boolean | isFocusable() | 是否可以被聚焦 [文字框常有此屬性] |
boolean | isFocused() | 是否被聚焦 [文字聚焦時會跳出虛擬鍵盤] |
boolean | isLongClickable() | 是否可以被長按 |
boolean | isScrollable() | 是否可以滾動 |
boolean | isSelected() | 是否可以被選擇 |
void | longClick() | 長按物件 |
void | pinchClose(float percent) | 縮小畫面的手勢 [百分比] |
void | pinchClose(float percent, int speed) | 縮小畫面的手勢 [百分比/ 速度:每秒移動像素] [越大越快] |
void | pinchOpen(float percent) | 放大畫面的手勢 [百分比] |
void | pinchOpen(float percent, int speed) | 放大畫面的手勢 [百分比/ 速度:每秒移動像素] [越大越快] |
void | recycle() | 回收物件 [被回收的物件 不能再使用 除非再一次重新找取] |
boolean | scroll(Direction direction, float percent, int speed) | 滾動 [方向/百分比/速度:每秒移動像素] [越大越快] |
boolean | scroll(Direction direction, float percent) | 滾動 [方向/百分比] |
void | setText(String text) | 對此物件設定文字 [有時候不能執行 需要點擊後使用KeyCode] |
void | swipe(Direction direction, float percent, int speed) | 滑動 [方向/百分比/速度:每秒移動像素] [越大越快] [此指手勢 如果向下 畫面會往上] |
void | swipe(Direction direction, float percent) | 滑動 [方向/百分比] [此指手勢 如果向下 畫面會往上] |
<R> R | wait(SearchCondition<R> condition, long timeout) | 等待某些條件達成 [條件/設定最長等待時間] |
<R> R | wait(UiObject2Condition<R> condition, long timeout) | 等待某些條件達成 [條件/設定最長等待時間] |
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
// 初始化/實例化(重要)
UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
final String mtag="mtag";
@Test
public void apitest() throws UiObjectNotFoundException, InterruptedException {
//在Settings找到WLAN的文字點擊後 事件新的window觸發 直接往下一步 (不會等待20秒)
uiDevice.findObject(By.text("WLAN")).clickAndWait(Until.newWindow(), 20000);
//在Settings找到WLAN的文字點擊後 會等待20秒才會執行下一步 (因為是等待滾動結束的事件發生 但是根本不會發生)
uiDevice.findObject(By.text("WLAN")).clickAndWait(Until.scrollFinished(Direction.DOWN), 20000);
//選擇可以滾動的物件且向下滾一次 (模擬滑手機一次)
uiDevice.findObject(By.scrollable(true)).fling(Direction.DOWN, 100);
//和fling不同於並非像是用手勢滑 有可能一次到最後 這裡滑多少百分比 畫面就會向下多少百分比 (所以1代表剛好一頁的距離)
uiDevice.findObject(By.scrollable(true)).scroll(Direction.DOWN, 0.5f);
//取得物件長寬和中心點
Rect rect = uiDevice.findObject(By.res("res")).getVisibleBounds();
Point center = uiDevice.findObject(By.res("res")).getVisibleCenter();
Log.i(mtag, "apitest: 長=" + rect.height() + " 寬=" + rect.width());
Log.i(mtag, "apitest: 中心點(" + center.x + "," + center.y + ")");
//判斷是有指定的物件且符合有"被聚焦"的屬性接著對此輸入文字
if (uiDevice.hasObject(By.desc("description"))) {
if (uiDevice.findObject(By.desc("description")).isFocusable()) {
uiDevice.findObject(By.desc("description")).setText("test");
}
}
//蒐集相同指定的物件且都給予點擊
List<UiObject2> list=uiDevice.findObjects(By.text("test"));
for(UiObject2 ui:list){
ui.click();
}
}
}