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学习小记的更多相关文章

  1. NSData所有API学习

      www.MyException.Cn  网友分享于:2015-04-24  浏览:0次   NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上 ...

  2. 从零开始搭建.NET Core 2.0 API(学习笔记一)

    从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...

  3. Uiautomator - 6.0 以上权限受限问题

    问题:在android studio中使用UiAutomator 2.0 编写测试用例时,要实现截图(非命令方式),写入文件时出现权限被拒绝的提示.例如: java.io.FileNotFoundEx ...

  4. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  5. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  6. Windows录音API学习笔记(转)

    源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...

  7. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

  8. Windows录音API学习笔记

    Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { WORD      wMid; 用于波形 ...

  9. Windows录音API学习笔记--转

    Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { WORD      wMid; 用于波形 ...

随机推荐

  1. selenium获取Cookie操作

    直接贴代码: Set cookies = dr.manage().getCookies(); for (Cookie cookie : cookies) { System.out.println(&q ...

  2. 在 Delphi 中判断一个字符是中文的方法

    http://blog.163.com/l1_jun/blog/static/143863882011741124581/ 由于 Delphi2005 支持中文标识符,在编写 PASCAL 词法分析器 ...

  3. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

  4. bzoj 3507: [Cqoi2014]通配符匹配

    Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(“”’),可以匹配0个及以上的任意字符:另一个是问号(“?”),可 ...

  5. 面试中常问的有关随机选取k个数的总结

    1.在半径为1的圆中随机选取一点. 2.给定一个未知长度的整数流,如何随机选取一个数 3.给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字).如何才能从这个无穷尽的流 ...

  6. JS操作Json

    因为我水啊 所以我就要手打一下 熟悉一下 ===== JSON 全称 JavaScript Object Notation(标记) 一种轻量级的数据交互格式,采用完全独立于语言的文本格式 同事JSON ...

  7. bzoj3673可持久化线段树实现可持久化数组实现可持久化并查集(好长)

    线段树只用叶子节点感觉莫名浪费,,, 感觉真好写(刚从未来程序逃回来的人) #include <cstdio> #define mid ((l+r)>>1) ,ca,x,y; ...

  8. tungsten抽取和应用mysql binlog

    首先举例说明 api的基本使用方式 首先进行配置 , 可以看到源数据库和目的数据库 TungstenProperties tp=new TungstenProperties(); tp.setStri ...

  9. C++:一般情况下,设计函数的形参只需要两种形式

    C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const ...

  10. python RecursionError: maximum recursion depth exceeded in comparison错误

    处理快速排序,递归深度可能非常大,而系统默认的深度可能没有这么大 需要设置最大递归深度 import sys sys.setrecursionlimit(100000) # 这个值的大小取决你自己,最 ...