UIAutomator2.0详解(UIDevice篇----获取UIDevice对象)

UIAutomator2.0在UIDevice类中,提供了两个静态方法,用于获取UIDevice对象。

(1)static UIDevice getInstance()
(2)static UIDevice getInstance(Instrumentation instrumentation)

方法(1)可以不用关注,官方已将该方法废弃。即,方法(2)是唯一获取UIDevice对象的方法。

Instrumentation mInstrumentation=InstrumentationRegistry.getInstrumentation();
UIDevice mDevice=UiDevice.getInstance(mInstrumentation);

从方法(2)中可以看到,要获取UIDevice对象,需要提供Instrumentation对象作为输入参数。

Instrumentation是移动测试的白盒框架,类似于window系统的hook程序,从系统层面实现对APP的监听。而UIAutomator2.0框架,正是基于Instrumentation框架。简单来说,Instrumentation对象可以看做一个通过监听获取信息的通道。而通过该通道获取的设备信息,即是UIDevice。

InstrumentationRegistry可以看做是Instrumentation的工厂类,通过工厂类获取Instrumentation的单例。

我们先简单理解Instrumentation,之后将用单独的篇幅介绍Instrumentation框架,这里不再啰嗦。

这里,我们用简单的例子来测试UIDevice是否获取成功。

代码如下:

package com.breakloop.u2demo;

import android.support.test.InstrumentationRegistry;
import android.support.test.uiautomator.UiDevice;
import android.util.Log;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

/**
 * Created by user on 2017/10/31.
 */
@RunWith(JUnit4.class)
public class UIDeviceTest {

    private final String TAG=getClass().getName();

    @Test
    public void getDevice() {
        UiDevice mUIDevice=UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
        if(mUIDevice!=null){
            Log.i(TAG, "get Device successfully");
        }else {
            Log.i(TAG, "get Device failed");
        }

    }
}

运行结果如下:

UIAutomator2.0详解(UIDevice篇----获取UIDevice对象)_第1张图片

UIAutomator2.0详解(UIDevice篇----获取UIDevice对象)_第2张图片

你可能感兴趣的:(android测试,Android自动化测试)