import android.support.test.uiautomator.UiDevice;
做用:设备封装类,测试过程当中获取设备信息和设备交互。java
import android.support.test.uiautomator.UiObject;
做用:全部控件抽象,用于表示一个Android控件。android
import android.support.test.uiautomator.UiObjectNotFoundException;
做用:异常处理机制,在预期控件不存在时抛出。git
import android.support.test.uiautomator.UiSelector;
做用:控制选择器,利用控制属性描述目标控件,用于控件匹配使用。app
import android.support.test.uiautomator.Configurator;
所用:配置基类,用以控制测试过程的事件等超时、控件可见超时等。ide
import android.support.test.uiautomator.UiCollection;
做用:控件集合,用于控件遍历。测试
import android.support.test.uiautomator.UiScrollable;
做用:滚动控件,当目标控件存在于屏幕以外时使用。ui
import android.support.test.uiautomator.UiWatcher;
做用:界面观察者,用于处理弹窗中断逻辑。code
import android.support.test.uiautomator.By; 做用:能够更简洁的方式使用ByScelector 选择器。 用法: findObject(By.text(“text”)) import android.support.test.uiautomator.BySelector; 做用: BySelector 调用findObject 时匹配UI 元素 用法: findObject(new BySelector().text(“text”))
/** * 经过文本 text 定位控件 * 例如: text = "hello world" */ device.findObject(By.text("text")); device.findObject(By.textContains("llo wor")); device.findObject(By.textStartsWith("hello")); device.findObject(By.textEndsWith("world")); /** * 经过内容描述 content-dec 定位控件 * 例如: desc = "content-dec" */ device.findObject(By.desc("content-dec")); device.findObject(By.descContains("tent")); device.findObject(By.descStartsWith("content")); device.findObject(By.descEndsWith("-dec")); /** * 经过包名package定位控件 * 例如: package = "com.android.calculator2" */ device.findObject(By.pkg("com.android.calculator2")); /** * 经过资源名 resource 定位控件 * 例如: resource = "com.android.calculator2:id/digit_0" */ device.findObject(By.res("com.android.calculator2:id/digit_0")); /** * 经过类名 class定位控件 * 例如: class = "android.widget.Button" */ device.findObject(By.clazz("android.widget.Button"));
// home键 device.pressHome(); // back 键 device.pressBack(); // 显示最近打开并置于后台的App device.pressRecentApps(); // 快速设置键 device.openQuickSettings(); // 打开通知 device.openNotification(); // 虚拟键盘,参考appium device.pressKeyCode(17); // 得到屏幕高度和宽度 int x = device.getDisplayWidth(); int y = device.getDisplayHeight(); String xs =String.valueOf(x); String ys =String.valueOf(y); Log.e("xxxxxxxxxx", xs); Log.e("yyyyyyyyyy", ys); // 向下滑显示通知栏 device.swipe(200,0,200, 300,180); // 向左滑显示右一屏 device.swipe(20,400,460, 400,180); // 获取当前应用活动名 和 包名 String activity = device.getCurrentActivityName(); String packagea = device.getCurrentPackageName(); Log.e("activity", activity); Log.e("packagea", packagea); // 休眠屏幕 device.sleep(); // 若是屏幕熄灭,点亮 device.wakeUp();
UiObject2 element = device.findObject(By.text("text")); //清除元素,针对输入框 element.clear(); // 点击 element.click(); // 长按 element.longClick(); // 获取元素文本 element.getText(); //设置元素文本,至关于输入 element.setText("new text"); //获取元素scrollable属性,判断是否可滚动 element.isScrollable(); // 判断两个对象是否一致 UiObject2 element2 = device.findObject(By.text("text")); element.equals(element2); //获取元素content_desc属性 element.getContentDescription(); // 获取包名 package 属性 element.getApplicationPackage(); // 获取元素的子元素集合 element.getChildren(); // 获取元素的子元素的个数 element.getChildCount(); // 获取元素的class属性 element.getClassName(); // 获取元素的 resource-id 属性 element.getResourceName(); // 将元素拖动到指定位置 Point desPoint = new Point(); desPoint.x = 200; desPoint.y = 20; element.drag(desPoint, 2000); // 点击并等待新窗口 element.clickAndWait(Until.newWindow(), 2000);
Configurator configurator = Configurator.getInstance(); //动做,设置延时, 默认3s configurator.setActionAcknowledgmentTimeout(1000); //键盘输入,设置延时,默认0s configurator.setKeyInjectionDelay(1500); // 滚动,设置延时, 默认200ms configurator.setScrollAcknowledgmentTimeout(2000); // 空闲,设置延时,默认10s configurator.setWaitForIdleTimeout(2500); // 组件查找, 设置延时, 默认10s configurator.setWaitForSelectorTimeout(3000);
final UiObject2 ui = mDevice.findObject(By.text("Messenger")); //注册监听器 mDevice.registerWatcher("testWatcher", new UiWatcher() { @Override public boolean checkForCondition() { if(mDevice.hasObject(By.text("Contact"))){ ui.click(); Log.i("testWatcher", "监听器被触发了"); return true; } Log.i("testWatcher", "监听器未被触发"); return false; } }); //重置监听器 mDevice.resetWatcherTriggers(); //移除监听器 mDevice.removeWatcher("testWatcher"); //运行全部的监听器 mDevice.runWatchers();
UiScrollable scroll = new UiScrollable( new UiSelector() .scrollable(true)); // 以步长为5快速向后滑动 scroll.flingBackward(); //以步长为5快速向前滑动 scroll.flingForward(); // 是否容许滚动获取具有UiSelector条件元素集合后, 再以text属性的查找对象 scroll.getChildByText( new UiSelector().resourceId("android:id/title"), "About emulated device", true); // 是否容许滚动获取具有UiSelector条件元素集合后, 再以content-desc属性搜索子元素 scroll.getChildByDescription(new UiSelector().text("text"), "content-desc", true); //经过实例查找子元素,资源id为"android:id/title"下的第1个实例 scroll.getChildByInstance(new UiSelector().resourceId("android:id/title"),0); // 获取执行搜索滑动过程当中的最大滑动次数,默认常量为30 scroll.getMaxSearchSwipes(); //设置最大可扫动次数 scroll.setMaxSearchSwipes(50); /** * 设置listview校准常量为0.15,即距离listview顶部15%和底部15%的区域不可滑动,只有控件中部70%的区域可滑动。 * 当校准常量设置为0.5时,控件的可滑动区域为0,滑动的动做效果将和单击的效果同样。 */ scroll.setSwipeDeadZonePercentage(0.15); // 得到校准常量,校准常量默认值为0.1(10%) scroll.getSwipeDeadZonePercentage(); //设置滚动方向设置为水平滚动 scroll.setAsHorizontalList(); // 设置滚动方向设置为纵向滚动 scroll.setAsVerticalList(); // 滚动到某个元素上 scroll.scrollIntoView(new UiSelector().text("abc")); //滚动到文本对象所在位置 scroll.scrollTextIntoView("abc"); //自定义最大滚动次数,滚动到开始/结束位置 scroll.scrollToBeginning(30); scroll.scrollToEnd(30); //以步长(速率)5滚动到列表底部,最多滚动10次。 scroll.scrollToEnd(10, 5);
UiCollection coll = new UiScrollable(new UiSelector() .resourceId("android:id/title")); // 查找元素下面子元素的数量 coll.getChildCount(); // 获取元素集合,再以text属性的查找对象 coll.getChildByText(new UiSelector().text("Display"), "Display"); // 获取元素集合,再查找其下面第1个元素 coll.getChildByInstance(new UiSelector().text("Display"), 0); // 获取元素集合,再以content_desc属性的查找对象 coll.getChildByDescription(new UiSelector().text("Display"), "content_desc"); // 得到指定的子元素 coll.getChild(new UiSelector().text("aaa"));