Uiautomator 2.0之UiDevice新增API学习小记
1. InstrumentationRegistry类
1.1. 类说明:
一个暴露的注册实例,持有instrumentation运行的进程和参数,还提供了一种简便的方法调用instrumentation, application context和instrumentation参数。
1.2 相关API
| 返回类型 | API |
| static Bundle | getArguments(): 返回一个instrumentation参数副本 |
| static Context | getContext(): 返回instrumentation对应包的Context |
| static Instrumentation | getInstrumentation(): 返回当前运行的instrumentation |
| static Context | getTargetContext(): 返回一个目标应用程序的Context |
| static void |
registerInstance(Instrumentation instrumentation, Bundle arguments): 记录或暴露当前instrumentation运行和instrumentation参数包的副本,存储在注册中心 |
1.3 简单示例
1.3.1 测试代码
package com.test.tommyxie.hellouiautomator; import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.UiDevice; import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith; import java.io.IOException; /**
* Created by tommyxie on 16/3/3.
*/ @RunWith(AndroidJUnit4.class)
public class TestClass01 {
public UiDevice mDevice;
public Instrumentation instrumentation; @Before
public void setUp(){
instrumentation = InstrumentationRegistry.getInstrumentation();
mDevice = UiDevice.getInstance(instrumentation);
} @Test
public void testCase01() throws IOException {
//获取运行时的参数
Bundle args = InstrumentationRegistry.getArguments();
//输出到运行报告中
instrumentation.sendStatus(100, args); //获取测试包的Context
Context testContext = InstrumentationRegistry.getContext();
//获取被测应用的Context
Context testedContext = InstrumentationRegistry.getTargetContext(); //通过Context来启动一个Activity,e.g.浏览器
String url = "https://www.baidu.com";
Intent i1 = new Intent(Intent.ACTION_VIEW);
i1.setData(Uri.parse(url));
i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
testContext.startActivity(i1); //通过目标Context来启动拨号功能
Intent i2 = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + 10086));
i2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
testedContext.startActivity(i2); Bundle inputBundle = new Bundle();
inputBundle.putString("key", "value");
//注入一个Bundle
InstrumentationRegistry.registerInstance(instrumentation, inputBundle);
//获取运行参数
Bundle outBundle = InstrumentationRegistry.getArguments();
//输出到结果报告中
instrumentation.sendStatus(110,outBundle); } }
1.3.2 运行结果

2. UiDevice新增API
2.1 API 介绍
| 返回类型 | API |
| void | dumpWindowHierarchy(OutPutStream out): 获取当前页面层级到输出流 |
| String | executeShellCommand(String cmd): 执行一个shell命令。备注:此方法只支持api21以上,手机需要5.0系统以上 |
| UiObject2 | findObject(BySelector selector): 返回第一个匹配条件的对象 |
| UiObject | findObject(UiSelector selector): 返回一个匹配条件的代表视图的UiObject对象 |
| List<UiObject2> | findObjects(BySelector selector): 返回所有匹配条件的对象 |
| <R> R | wait(SearchCondition<R> condition, long timeout): 等待的条件得到满足 |
2.2 代码示例
package com.test.tommyxie.hellouiautomator; import android.app.Instrumentation;
import android.os.Bundle;
import android.os.Environment;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.UiObjectNotFoundException;
import android.support.test.uiautomator.UiSelector;
import android.support.test.uiautomator.Until;
import android.widget.TextView; import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List; /**
* Created by tommyxie on 16/3/3.
*/ @RunWith(AndroidJUnit4.class)
public class TestClass01 {
public UiDevice mDevice;
public Instrumentation instrumentation; @Before
public void setUp(){
instrumentation = InstrumentationRegistry.getInstrumentation();
mDevice = UiDevice.getInstance(instrumentation);
} @Test
public void testCase01() throws IOException, UiObjectNotFoundException { //dumpWindowHierarchy(OutPutStream out)
File file = new File(Environment.getExternalStorageDirectory()+File.separator+"dump.xml");
if(file.exists()){
file.delete();
}
file.createNewFile();
OutputStream outputStream = new FileOutputStream(file);
mDevice.dumpWindowHierarchy(outputStream); //executeShellCommand(String cmd)
mDevice.executeShellCommand("am start -n com.tencent.mobileqq/.activity.SplashActivity "); //findObject(BySelector selector)
mDevice.wait(Until.findObject(By.text("联系人")),2000);
UiObject2 uiObject2 = mDevice.findObject(By.text("联系人"));
uiObject2.click(); //findObject(UiSelector selector)
UiObject uiObject = mDevice.findObject(new UiSelector().text("短信"));
uiObject.click(); //findObjects(BySelector selector)
List <UiObject2> uiObject21 = mDevice.findObjects(By.clazz(TextView.class));
Bundle bundle = new Bundle();
for (UiObject2 a:uiObject21) {
bundle.putString("TextView", a.getText());
}
instrumentation.sendStatus(123,bundle); } }
原创:http://blog.csdn.net/swordgirl2011/article/details/50941555
Uiautomator 2.0之UiDevice新增API学习小记的更多相关文章
- NSData所有API学习
www.MyException.Cn 网友分享于:2015-04-24 浏览:0次 NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上 ...
- 从零开始搭建.NET Core 2.0 API(学习笔记一)
从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...
- Uiautomator - 6.0 以上权限受限问题
问题:在android studio中使用UiAutomator 2.0 编写测试用例时,要实现截图(非命令方式),写入文件时出现权限被拒绝的提示.例如: java.io.FileNotFoundEx ...
- Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...
- Openstack python api 学习文档 api创建虚拟机
Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...
- Windows录音API学习笔记(转)
源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- Windows录音API学习笔记
Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { WORD wMid; 用于波形 ...
- Windows录音API学习笔记--转
Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { WORD wMid; 用于波形 ...
随机推荐
- 国外程序员整理的Java资源大全分享
Java 几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言.国外程序员 Andreas Kull 在其 Github 上整理了非常优秀的 Java 开发资源,推荐给大家. 译文由 Imp ...
- continue语句在for语句和while语句中的区别
while语句的形式: while( expression ) statement for语句的形式: for( expression1; expression2;expression3 ) // ...
- Android 开源项目及其学习
Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...
- Mybatis总结
jdbc.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/testdb username=root pa ...
- nandaom
this python</div><div><br></div><div>hahah</div><div> 来自为知 ...
- 免费制作gif图片工具
怎样制作gif图片在你的blog里面呢? 今天给大家推荐一款免费的gif制作软件:GifCam 上面用到的下载地址: http://downloads.tomsguide.com/GifCam,030 ...
- oracle 字符串分割
); create or replace function strsplit2(p_value varchar2, p_split varchar2 := ',') return str_split ...
- 第一次IT技术面试经历
一.技术总监面试问题: 1.Hibernate的应用项目例举 2.jsp标签库例举 3.oracle的增删改查 4.关系型数据库的关联关系 5.数据库分页操作 二.技术总监面试问题: 1.for循环中 ...
- HUAS_ACM 个人训练#4
A 题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=117542#problem/A 题意:给出n个单词(字符串),选出最长的字符 ...
- 李洪强经典面试题152-Runtime
李洪强经典面试题152-Runtime Runtime Runtime是什么 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码, ...