主要类:

import android.support.test.uiautomator.UiDevice;

作用:设备封装类,测试过程中获取设备信息和设备交互。

import android.support.test.uiautomator.UiObject;

作用:所有控件抽象,用于表示一个Android控件。

import android.support.test.uiautomator.UiObjectNotFoundException;

作用:异常处理机制,在预期控件不存在时抛出。

import android.support.test.uiautomator.UiSelector;

作用:控制选择器,利用控制属性描述目标控件,用于控件匹配使用。

import android.support.test.uiautomator.Configurator;

所用:配置基类,用以控制测试过程的事件等超时、控件可见超时等。

import android.support.test.uiautomator.UiCollection;

作用:控件集合,用于控件遍历。

import android.support.test.uiautomator.UiScrollable;

作用:滚动控件,当目标控件存在于屏幕之外时使用。

import android.support.test.uiautomator.UiWatcher;

作用:界面观察者,用于处理弹窗中断逻辑。

### 定位控件
```Java
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”))

<br>
### By类常用定位方法 ```Java
/**
* 通过文本 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"));

### UiDevice类常用方法

// 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类常用方法

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 = Configurator.getInstance();

//动作,设置延时, 默认3s
configurator.setActionAcknowledgmentTimeout(1000); //键盘输入,设置延时,默认0s
configurator.setKeyInjectionDelay(1500); // 滚动,设置延时, 默认200ms
configurator.setScrollAcknowledgmentTimeout(2000); // 空闲,设置延时,默认10s
configurator.setWaitForIdleTimeout(2500); // 组件查找, 设置延时, 默认10s
configurator.setWaitForSelectorTimeout(3000);

###UiWatcher 类用法

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 类的常用方法

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 类的常用方法

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

UI Automator 常用 API 整理的更多相关文章

  1. Go语言中使用K8s API及一些常用API整理

    Go Client 在进入代码之前,理解k8s的go client项目是对我们又帮助的.它是k8s client中最古老的一个,因此具有很多特性. Client-go 没有使用Swagger生成器,就 ...

  2. iOS ReactiveCocoa 最全常用API整理(可做为手册查询)

    本文适合有一定RAC基础的童鞋做不时的查询,所以本文不做详细解释. 一.常见类 1.RACSiganl 信号类. RACEmptySignal :空信号,用来实现 RACSignal 的 +empty ...

  3. ehcache常用API整理

    鉴于csdn的blog的不稳定, 及混乱的编辑器, 和无上传功能, 遂决定彻底投诚javaeye的blog. 数月前整理的一个东西, 作为cache的扫盲文档.参考了它的官方文档. 对ehcache感 ...

  4. 【原创】大数据基础之ElasticSearch(2)常用API整理

    Fortunately, Elasticsearch provides a very comprehensive and powerful REST API that you can use to i ...

  5. hutool工具类常用API整理

    0.官网学习地址 https://www.hutool.cn/ 1.依赖 <dependency> <groupId>cn.hutool</groupId> < ...

  6. seajs常用API整理

    本文来自于https://github.com/seajs/seajs/issues/266

  7. Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...

  8. node.js整理 02文件操作-常用API

    NodeJS不仅能做网络编程,而且能够操作文件. 拷贝 小文件拷贝 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync ...

  9. OpenLayers API整理

    整理的Openlayers 的知识笔记,随着运用不断加深理解,也会不断更新. 本文链接:Openlayers API整理 作者:狐狸家的鱼 GitHub:八至 一.创建地图 1.地图Map 创建地图底 ...

随机推荐

  1. centos6.5-vsftp搭建

    我的机子是默认是没有的vsftp. yum install -y vsftp 创建账户专为ftp而生.useradd ftp01 更改账户不可登录系统.usermod -s /sbin/nologin ...

  2. CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警

    11月4日,阿里云安全首次捕获PHPCMS 2008版本的/type.php远程GetShell 0day利用攻击,攻击者可以利用该漏洞远程植入webshell,导致文件篡改.数据泄漏.服务器被远程控 ...

  3. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(8)- 从Raw NAND启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Raw NAND启动. 前面铺垫了七篇启动系列文章,终于该讲具体Boot Device了,我们知道i. ...

  4. 史上最走心webpack4.0中级教程——配置之外你应该知道的事

    <webpack4.0各个击破系列>适合不满足于只会配置webpack但一时间又看不懂源码的中级读者.我没法保证这个系列是最好的,但至少能保证每一篇博文都跟那些Ctrl+C和Ctrl+V的 ...

  5. Redis in python

    什么是Redis 数据库类型分为两种,关系型和非关系型,Redis是一个非常重要的非关系型数据库. 既然是数据库,就是存储数据的一个空间,或者说是一个软件,非关系就是不再按照一对一多对多等结构进行外键 ...

  6. 【设计原则和编程技巧】单一职责原则 (Single Responsibility Principle, SRP)

    单一职责原则 (Single Responsibility Principle, SRP) 单一职责原则在设计模式中常被定义为“一个类应该只有一个发生变化的原因”,若我们有两个动机去改写一个方法,那这 ...

  7. 2-SAT速成

    本文只做总结性说明 2-SAT 2-SAT是k-SAT问题的一种,k-SAT问题在\(k>=3\)时已经被证明是NP完全问题 2-SAT问题定义比较简单 有n个布尔变量\(x_1-x_n\).给 ...

  8. SVN系列操作(一)

    SVN是什么? SVN是Subversion的简称,是一个开放源代码的版本控制系统,常用于软件开发项目中,实现代码.文档等的历史版本保存.共享和权限管理. 进入SVN本地目录,第一步操作就是updat ...

  9. 广州.NET微软技术俱乐部 微信群有用信息集锦

    考虑到广州.NET微软技术俱乐部 微信群 十分活跃. 有用信息很有可能被淹没. 所以建立此贴. 首先群的活跃是十分重要的. 所以我是不可能把群搞得像技术论坛和github一样, 因为微信群的定位我在& ...

  10. 学习安卓开发[3] - 使用RecyclerView显示列表

    在上一篇学习安卓开发[2] - 在Activity中托管Fragment中了解了使用Fragment的好处和方法,本次记录的是在进行列表展示时RecyclerView的使用. RecyclerView ...