前言
几年前做Android的测试时,常用Google官方的UiAutomator框架,记得那时候用的是Eclipse写脚本,用Ant编译Jar包,再推到手机中执行。后来Google更新了UiAutomator框架,Api有了很大的改变,那时候我和同事们都称作其为UiAutomator2.x,使用Android Studio写脚本,编译成一个apk文件,推到手机中执行,脚本也有了很大的权限,我们还做了一个项目,去测试点击获取验证码到收到短信的时间。最近想整理一下用过的技术,发现以前整理的随笔已经过时,想着来回顾一下。
(时间:2020年12月01日)
安装Android Studio
地址:https://developer.android.google.cn/studio
真是好呀,Google还在国内建了中文开发者网站,记得那个时候还需要FQ,搞个环境有的折腾呢!安装好之后,安装Android SDK,现在AS现在SDK也是相当的丝滑啊。
这里就不多废话了,很简单。
版本
Android Studio 3.5.2
Build #AI-191.8026.42.35.5977832, built on October 31, 2019
JRE: 1.8.0_202-release-1483-b49-5587405 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.7
UiAutomator支持的设备系统版本,Android 4.3(API 级别 18)或更高版本。
DEMO
创建AS项目,我们在引导页选择不新增Activity。
命名、选择api级别
根据文档https://developer.android.google.cn/training/testing/ui-automator这里API要大于18
在src/androidTest中写代码
package com.example.myui2demo;
import android.content.Context;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import androidx.test.filters.SdkSuppress;
import androidx.test.uiautomator.UiDevice;
/**
* Demo
*/
@RunWith(AndroidJUnit4.class)
@SdkSuppress(minSdkVersion = 18)
public class ExampleInstrumentedTest {
@Test
public void uiD2emo() {
// 获取Android context对象 可以调用系统相关的资源
Context appContext = getInstrumentation().getTargetContext();
// 获取UiDevice对象 操作设备 例如点击、Home、滑动等
UiDevice mDevice = UiDevice.getInstance(getInstrumentation());
//点击home键
mDevice.pressHome();
}
}
在App/build.gradle文件中添加UiAutomator依赖:
在AS中运行测试,点击AS代码编辑窗口左侧的绿色按钮即可
通过打印的执行记录可以看出UiAutomator是通过am执行的
adb shell am instrument -w -r -e debug false -e class 'com.example.myui2demo.ExampleInstrumentedTest#uiD2emo' com.example.myui2demo.test/androidx.test.runner.AndroidJUnitRunner
后记
现在配置安装环境都很简单,没有以前的障碍了,文档获取也很方便。
现在UiAutomator被放在androidx.test
中,没有以前的兼容包乱七八糟的了,新手应该很快能上手。
后面会深入在看看这个。