文章目录
- 一、引言
- 二、了解(Android官方文档)
- 1、UiDevice 类
- 2、UI Automator API
- 3、UI Automator 查看器
- 三、使用
- 1、依赖
- 2、代码
一、引言
- 描述:UI Automator 是一个界面测试框架,适用于整个系统上以及多个已安装应用间的跨应用功能界面测试。这里我将会拿QQ软件的说说模块进行测试。
- 知识点:Ui Automator
- 难度:初级
- 效果
二、了解(Android官方文档)
1、UiDevice 类
用于在运行目标应用的设备上访问和执行操作,同时还能进行以下操作:
- 改变设备的旋转。
- 按硬件键,如“音量调高按钮”。
- 按返回、主屏幕或菜单按钮。
- 打开通知栏。
- 截取当前窗口的屏幕截图。
2、UI Automator API
- UiCollection:枚举容器的界面元素,目的是为了计数,或者按可见文本或内容说明属性来定位子元素。
- UiObject:表示设备上可见的界面元素。
- UiScrollable:支持搜索可滚动界面容器中的项目。
- UiSelector:表示对设备上的一个或多个目标界面元素的查询。
- Configurator:可让您设置用于运行 UI Automator 测试的关键参数。
3、UI Automator 查看器
查看器是非常重要的工具,主要作用:获取控件ID、Class等信息,用于配合UiDevice 类来进行测试。
Ui Automator Viewer 工具位于 android-sdk/tools/bin 目录中。
三、使用
1、依赖
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
2、代码
如第一章效果图,给出代码
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
UiDevice device;
@Before
public void init() {
// 初始化UiDevice实例
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
// 从主屏幕开始获取软件包名
device.pressHome();
//depth(0) 跳转到主屏幕
String launcherPackage = device.getLauncherPackageName();
device.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)),
1000);
//获取Context 跳转到com.example.xch.android001包,进入android001软件
Context context = ApplicationProvider.getApplicationContext();
Intent intent = context.getPackageManager().getLaunchIntentForPackage("com.tencent.mobileqq");
// Intent intent = context.getPackageManager().getLaunchIntentForPackage("com.sankuai.meituan"); // 美团测试
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
device.wait(Until.hasObject(By.pkg("com.tencent.mobileqq").depth(0)),0);;
}
@Test
public void test() throws InterruptedException {
//自动化发表说说4
device.findObject(By.text("动态")).click(); // 通过文字点击控件
device.findObject(By.res("com.tencent.mobileqq","uae")).click(); // 通过id点击控件
Thread.sleep(200); // 延迟,给onCreate时间
device.findObject(By.res("com.tencent.mobileqq","dsj")).click();
Thread.sleep(200);
device.findObject(By.res("com.tencent.mobileqq","hkl")).click();
Thread.sleep(200);
device.findObject(By.res("com.tencent.mobileqq","itv")).setText("云端new守夜人\nAndroid uiautomator 测试");
device.findObject(By.res("com.tencent.mobileqq","ivTitleBtnRightText")).click();
}
}