使用AndroidStudio执行UI Automator 自动化测试

时间:2021-10-30 09:20:16

摘要

最近在网上看到UIAutomator 2.0版本,并且貌似使用的框架都改变了,所以今天就抽空试了下

We’re pleased to announce the release of UIAutomator 2.0! This version is a significant update from the previous release. Most importantly, UI Automator is now based on Android Instrumentation and you can build and run tests with the ‘./gradlew connectedCheck’ command.

大体的意思就是UIAutomator2.0基于的框架改成了android的instrumentatioin的框架。并且可以通过gradle进行配置了,虽然说实话不太清楚为什么要将UiAutomator的框架改成instrumentation,但是我们先试试大概答题的环境出来吧。

下来我们就来试试通过Android Studio 来进行UiAutomator的配置吧

UiAutomator2.0的jar包并不是在以前SDK/platforms/android-19/下。现在我们要这么做

  1. 通过Android SDK Manager中的 Android Support Repository 项进行安装
  2. 下载下来的jar包的路径为/extras/android/m2repository
  3. 新建一个android项目,编写一个简单的应用
  4. 在build.gradle中配置依赖项:

    dependencies {
    androidTestCompile 'com.android.support.test:runner:0.3'
    // Set this dependency to use JUnit 4 rules
    androidTestCompile 'com.android.support.test:rules:0.3'
    // Set this dependency to build and run Espresso tests
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
    // Set this dependency to build and run UI Automator tests
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
    }

    设置AndroidJunitRunner为默认的testInstrumentationRunner

    android {
    defaultConfig {
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    }

    下来就编写属于你自己的测试代码了,在androidTest目录下面新建测试类

/**
* Created by cvtpc on 2015/9/14.
*/

public class LoginTest extends InstrumentationTestCase {

protected UiDevice device = null;
protected String appName = "magicCard";

public void runApp(String appName) throws UiObjectNotFoundException, RemoteException {
device = UiDevice.getInstance(getInstrumentation());
device.pressHome();
device.waitForWindowUpdate("", 2000);

UiObject2 allAppsButton = device.findObject(By.desc("Apps"));
allAppsButton.click();
device.waitForWindowUpdate("", 2000);

UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
appViews.setAsHorizontalList();

UiObject settingsApp = appViews.getChildByText(new UiSelector().className(TextView.class.getName()), appName);
settingsApp.clickAndWaitForNewWindow();

assertTrue("Unable to detect app", settingsApp != null);
}

@Override
public void setUp() throws RemoteException, UiObjectNotFoundException {
this.runApp(appName);
}

@Override
public void tearDown() throws RemoteException, UiObjectNotFoundException {
//Empty for the moment
}

public void testUS1() {
UiObject2 usernameLabel = device.findObject(By.clazz(TextView.class.getName()).text("Username"));
assertTrue("Username label not found", usernameLabel != null);
}
}

基于Instrument的方便一点就是不需要remote debug的方式进行调试。并且做参数化之类的也方便了很多。