使用UI Automator实现Android UI的自动化测试
    
  
      
      
      
      
    
    
      
          
        0x01 概述
UI Automator测试框架提供了一组API来构建UI测试,用于在用户应用和系统应用中执行交互。UI Automator测试框架非常适合编写黑盒自动化测试,其中的测试代码不依赖于目标应用的内部实现详情。
0x02 使用uiautomatorviewer工具获取Android应用的控件信息
uiautomatorviewer 工具提供了方便的GUI,可以扫描和分析Android设备上当前显示的UI组件。您可以使用此工具检查布局层次结构,并查看在设备前台显示的UI组件属性。利用此信息,可以使用UI Automator创建控制更加精确的测试。
uiautomatorviewer 工具位于<android-sdk>/tools/目录中。

0x03 在Android项目中添加依赖
| 1
 | androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
 | 
0x04 创建单元测试类

0x05 创建测试用例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 
 | @RunWith(AndroidJUnit4.class)
 public class UiTest {
 
 
 
 
 private Instrumentation mInstrumentation;
 
 
 private UiDevice mUiDevice;
 
 
 @Before
 public void setUp() {
 mInstrumentation = InstrumentationRegistry.getInstrumentation();
 mUiDevice = UiDevice.getInstance(mInstrumentation);
 }
 
 
 @Test
 public void testAdd() {
 
 UiObject2 digit9 = mUiDevice.findObject(By.res("com.android.calculator2:id/digit_9"));
 
 UiObject2 digit8 = mUiDevice.findObject(By.res("com.android.calculator2:id/digit_8"));
 
 UiObject2 opMul = mUiDevice.findObject(By.res("com.android.calculator2:id/op_mul"));
 
 UiObject2 opEq = mUiDevice.findObject(By.res("com.android.calculator2:id/eq"));
 
 UiObject2 result = mUiDevice.findObject(By.res("com.android.calculator2:id/result"));
 
 
 
 
 
 
 digit9.click();
 opMul.click();
 digit8.click();
 opEq.click();
 
 
 String resultValue = result.getText();
 
 
 Assert.assertEquals(72, Integer.parseInt(resultValue));
 }
 
 
 @After
 public void tearDown() {
 }
 }
 
 | 

0x06 执行测试用例

0x07 相关API介绍
常见组件操作,类-UiObject2
| 功能 | 方法 | 
| 点击 | public boolean click() | 
| 长按 | public boolean longClick() | 
| 拖动 | public void drag(Point dest) | 
| 输入 | public boolean setText(String text) | 
常见设备操作,类-UiDevice
| 功能 | 方法 | 
| 点击坐标 | public void click(int x, int y) | 
| 按键 | public void pressKeyCode(int keyCode) | 
| 滑动 | public boolean swipe(int startX, int startY,int endX,int endY,int steps)// 1个步长表示5ms | 
0x08 其他用途
自动化是用于解放双手,将机械化的重复操作交由程序。UIAutomator可以用于进行重复的UI测试,也可以用于完成其他的类似转发链接给通讯录里的所有好友。
参考链接
- 测试支持库
- Android白盒测试之Instrumentation初探(一)