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; 用于波形 ...
随机推荐
- selenium获取Cookie操作
直接贴代码: Set cookies = dr.manage().getCookies(); for (Cookie cookie : cookies) { System.out.println(&q ...
- 在 Delphi 中判断一个字符是中文的方法
http://blog.163.com/l1_jun/blog/static/143863882011741124581/ 由于 Delphi2005 支持中文标识符,在编写 PASCAL 词法分析器 ...
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
- bzoj 3507: [Cqoi2014]通配符匹配
Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(“”’),可以匹配0个及以上的任意字符:另一个是问号(“?”),可 ...
- 面试中常问的有关随机选取k个数的总结
1.在半径为1的圆中随机选取一点. 2.给定一个未知长度的整数流,如何随机选取一个数 3.给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字).如何才能从这个无穷尽的流 ...
- JS操作Json
因为我水啊 所以我就要手打一下 熟悉一下 ===== JSON 全称 JavaScript Object Notation(标记) 一种轻量级的数据交互格式,采用完全独立于语言的文本格式 同事JSON ...
- bzoj3673可持久化线段树实现可持久化数组实现可持久化并查集(好长)
线段树只用叶子节点感觉莫名浪费,,, 感觉真好写(刚从未来程序逃回来的人) #include <cstdio> #define mid ((l+r)>>1) ,ca,x,y; ...
- tungsten抽取和应用mysql binlog
首先举例说明 api的基本使用方式 首先进行配置 , 可以看到源数据库和目的数据库 TungstenProperties tp=new TungstenProperties(); tp.setStri ...
- C++:一般情况下,设计函数的形参只需要两种形式
C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const ...
- python RecursionError: maximum recursion depth exceeded in comparison错误
处理快速排序,递归深度可能非常大,而系统默认的深度可能没有这么大 需要设置最大递归深度 import sys sys.setrecursionlimit(100000) # 这个值的大小取决你自己,最 ...