UI Automator 常用 API 整理

主要类:

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;

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

定位控件

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”))

By类常用定位方法

/**
 * 通过文本 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"));

原文地址:https://www.cnblogs.com/fnng/p/9291855.html

时间: 2024-08-29 17:41:39

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

iOS ReactiveCocoa 常用API整理

声明:本文转载自王隆帅 一.常见类 1.RACSiganl 信号类. RACEmptySignal :空信号,用来实现 RACSignal 的 +empty 方法: RACReturnSignal :一元信号,用来实现 RACSignal 的 +return: 方法: RACDynamicSignal :动态信号,使用一个 block - 来实现订阅行为,我们在使用 RACSignal 的 +createSignal: 方法时创建的就是该类的实例: RACErrorSignal :错误信号,用来

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

本文适合有一定RAC基础的童鞋做不时的查询,所以本文不做详细解释. 一.常见类 1.RACSiganl 信号类. RACEmptySignal :空信号,用来实现 RACSignal 的 +empty 方法: RACReturnSignal :一元信号,用来实现 RACSignal 的 +return: 方法: RACDynamicSignal :动态信号,使用一个 block - 来实现订阅行为,我们在使用 RACSignal 的 +createSignal: 方法时创建的就是该类的实例: R

ehcache常用API整理

博客分类: java CacheXMLLinuxEclipsejunit 鉴于csdn的blog的不稳定, 及混乱的编辑器, 和无上传功能, 遂决定彻底投诚javaeye的blog. 数月前整理的一个东西, 作为cache的扫盲文档.参考了它的官方文档. 对ehcache感兴趣的兄台可以参考. 附件为eclipse项目, 直接导入, 运行test目录下的junit testcase, 可一目了然. 一 ehcache API: 1: Using the CacheManager 1.1所有ehc

Selenium Web 自动化 - Selenium常用API

Selenium Web 自动化 - Selenium常用API 2016-08-01 1 WebElement相关方法2 iFrame的处理3 操作下拉选择框4 处理Alert5 处理浏览器弹出的新窗口6 执行JS脚本7 等待元素加载8 模拟键盘操作9 设置浏览器窗口大小10 上传文件11 Selenium处理HTML5 1 WebElement相关方法 Method   Summary void clear() If   this element is a text entry elemen

DIP常用资源整理

Deep Learning(深度学习): ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):二 Bengio团队的deep learning教程,用的theano库,主要是rbm系列,搞python的可以参考,很不错. deeplearning.net主页,里面包含的信息量非常多,有software, reading list, research lab, dataset, demo等,

工作流,WEB框架,UI组件网络收集整理

工作流,WEB框架,UI组件网络收集整理 在博客园上逛了好多年,随手收录了一些工作流,WEB开发框架,UI组件,现在整理一下与大家分享. 由于个人能力与精力有限,望各位园友在评论中补充,我将全部整理到正文: ? 工作流篇 RoadFlow工作流(收费):                  http://www.cqroad.cn/WorkFlow 驰骋工作流引擎 ccflow                       https://www.oschina.net/p/ccflow YbSof

【repost】Javascript操作DOM常用API总结

Javascript操作DOM常用API总结 文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前,首先我们来复习一下一些基本概念,这些概念是掌握api的关键,必须理解它们. Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现.这个Node接口在JS中是作为Node类型实现的.在IE9以下版本无法访问到这个类型,JS中所有

【转载】Git 常用命令整理

Git 常用命令整理 博客分类: Ubuntu / Mac / Github / Aptana / Nginx / Shell / Linux 初始化配置 C代码   #配置使用git仓库的人员姓名 git config --global user.name "Your Name Comes Here" #配置使用git仓库的人员email git config --global user.email [email protected] #配置到缓存 默认15分钟 git config

javascript DOM常用API总结

作者:狼狼的蓝胖子 网址:http://www.cnblogs.com/lrzw32/p/5008913.html 文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前,首先我们来复习一下一些基本概念,这些概念是掌握api的关键,必须理解它们. Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现.这个Node接口在JS中是