在Android Studio环境下建立UiAutomator环境

简介: 顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。

以前开发UiAutomator都是在Eclipse环境下进行的,最近经朋友介绍,由于UiAutomator2的出现,开发平台如果能够移植到AndroidStudio会变得非常的容易。在平台移植过程中参考了网上许多资料,都不太系统,现在我将如何在Android Studio环境下建立UiAutomator环境给大家做个详细的介绍。


1、  JDK的安装


Android Studio也是基于JAVA开发的,所以同样要下载JDK版本,由于这里我们需要使用UiAutomator2,所以建议大家安装JDK8.0。安装后JDK完毕需要配置环境变量,首先建立%JAVA_HOME%、然后在PATH中加入:


JAVA_HOME%\jre\bin;%JAVA_HOME%\bin\;”,最后在CLASSPATH 中加入:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;”。


环境设置完毕,打开cmd,输入:java -version命令,如果在返回页面出现如下内容:


C:\Users\Jerry>java-version

java version"1.8.0_131"

Java(TM) SE RuntimeEnvironment (build 1.8.0_131-b11)

Java HotSpot(TM) 64-BitServer VM (build 25.131-b11, mixed mode)


说明配置正确。


2、  SDK安装


下载SDK文件,配置环境变量。首先建立%ANDROID_HOME%,然后在PATH中加入“%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;,运行命令adb devices检查是否配置正确。


利用Android Studio环境下建立UiAutomator环境,需要升级sdk中的tools目录,升级方法如下:


  • cd %ANDROID_HOME%
  • 把目录名tools改为tool
  • cd tool/bin
  • 执行:sdkmanager –update
  • update工程中,在%ANDROID_HOME%目录下产生新的文件夹tools
  • update完毕把新产生的tools目录下所有文件拷贝到tool下;
  • 删除tools目录,把tool目录改名为tools
  • cd %ANDROID_HOME%/tools/bin
  • 执行:sdkmanager----licenses


在这里,我特别提醒,如果你还是不改用AndroidStudioSDK update后,使用Eclipse是会有问题的。


3、  建立Android Studio的SDK


打开Android Studio,通过菜单"File"->"OtherSettings"->"Default Project Structure",选择刚才下载的SDK路径。

image.png


4、  建立测试工程


通过菜单"File"->"New"->"NewProject",如图建立如下Add No Activity

image.png


进入下一步,进行如下图配置:

image.png


在这里需要注意Minimum API level不要小与18.接下来配置成功,把项目格式改为按Android视图模式查看,然后打开build.gradle。发现文件最后有如下配置:


dependencies {
    implementation fileTree(dir: 'libs',  include: ['*.jar'])
    implementation  'com.android.support:appcompat-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation  'com.android.support.test:runner:1.0.2'
    androidTestImplementation  'com.android.support.test.espresso:espresso-core:3.0.2'
}


image.png


Android Studio的类配置通过这里进行配置。一个Android Studio项目分层三个区域:普通单元测试区、Android单元测试区以及Android产品代码区;命令androidTestImplementation '包名'只能在Android单元测试区使用,testImplementation '包名'可以在“普通单元测试区”和“Android单元测试区”使用;而命令implementation '包名'只能在Android产品代码区使用。(如果你使用的是Android Studio 2.X版本,这里的Implementation都要改为Compile,即androidTestCompile '包名'testCompile '包名'compile '包名')。因为我们的UiAutomation是属于Android单元测试的,所以通过命令:


androidTestImplementation'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'加在命令最后,即:


dependencies {
    implementation fileTree(dir: 'libs',  include: ['*.jar'])
    implementation  'com.android.support:appcompat-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation  'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation  'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}


如果你希望把你加入的与系统生成的独立开来,下面写法也是正确的:


dependencies {
    implementation fileTree(dir: 'libs',  include: ['*.jar'])
    implementation  'com.android.support:appcompat-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation  'com.android.support.test:runner:1.0.2'
androidTestImplementation  'com.android.support.test.espresso:espresso-core:3.0.2'
}
dependencies  {
      androidTestImplementation  'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}


同步完成,切换到Project视图模式,你会在External Libraries 中找到相应的类。

image.png


最后我们在Android单元测试区建立我们的测试代码myclass。(androidTestAndroid单元测试区、test普通测试区、mainAndroid代码开发区)


image.png


如下是一个最简单的UiAutomator测试程序。


package com.example.myapptest;
import android.app.Instrumentation;
import android.support.test.runner.AndroidJUnit4;
import android.test.InstrumentationTestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class myclass extends InstrumentationTestCase {
    public UiDevice mDevice;
    public Instrumentation  instrumentation;
    @Test
    public void testHome()
    {
        instrumentation =  InstrumentationRegistry.getInstrumentation();
         UiDevice.getInstance(instrumentation).pressHome();
    }


5、UiAutomator2.0 与UiAutomator1.0区别


  • UiAutomator2.0采用JUnit4测试框架。在这里特别注意:

  • UiAutomator1.0中继承的是UiAutomatorTestCase,而2.0继承的是InstrumentationTestCase

  • UiAutomator1.0中使用getUiDevice()方法获得UiDevice对象,而在2.0中已经不再存在getUiDevice()方法了,而2.0采用instrumentation = InstrumentationRegistry.getInstrumentation();UiDevice  mdevice = UiDevice.getInstance(instrumentation)获得UiDevice对象。

  • UiAutomator2.0中添加了By Selector类、By类和UiObject2类对象,UiObject2类作用如同UiObjectBy Selector类、By类一般配合UiObject2获取对象使用。类似UiSelector类的作用。但是UiObject2类对于SDK一些虚拟设备中的控件的操作会出现一些意想不到的空指针异常,估计是这个类还不太完善,我在近期是不会使用的。

  • 2.0UiDevice 类增加了如下的方法:

返回值

方法名

描述

void

dumpWindowHierarchy(OutPutStream  out)

获取当前页面层级到输出流

String

executeShellCommand(String  cmd)

执行一个shell命令。备注:此方法只支持api21以上,手机需要5.0系统以上

UiObject2

findObject(BySelector  selector)

返回第一个匹配条件的对象

UiObject

findObject(UiSelector  selector)

 返回一个匹配条件的代表视图的UiObject对象

List<UiObject2>

findObjects(BySelector  selector)

返回所有匹配条件的对象

<R>  R

wait(SearchCondition<R>  condition, long timeout)

等待的条件得到满足


对于UiAutomator类的介绍网上的资料已经很全了,我不做更多的介绍。


星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net


顾翔凡言:

      软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。

目录
相关文章
|
2月前
|
SQL 人工智能 Dart
Android Studio的插件生态非常丰富
Android Studio的插件生态非常丰富
150 1
|
2月前
|
Ubuntu Linux Android开发
Android Studio支持多种操作系统
Android Studio支持多种操作系统
134 1
|
4月前
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
246 2
|
5月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
423 1
|
2月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
74 8
|
2月前
|
数据可视化 开发工具 Android开发
Android Studio
Android Studio
181 1
|
3月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
461 2
|
3月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性对比:哪个更适合企业环境?
在数字化时代,移动设备已成为企业日常运营不可或缺的一部分。选择合适的操作系统对于保障企业数据安全至关重要。本文深入分析了Android和iOS两大主流操作系统的安全性,从系统架构、安全功能、应用生态及更新频率四个维度进行全面比较,旨在为企业提供一个清晰的决策依据,帮助企业在Android的开放性与iOS的封闭性之间找到最适合自身需求的平衡点。
72 6
|
4月前
|
Dart 开发工具 Android开发
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
|
4月前
|
XML IDE 开发工具
🔧Android Studio高级技巧大公开!效率翻倍,编码不再枯燥无味!🛠️
【9月更文挑战第11天】在软件开发领域,Android Studio凭借其强大的功能成为Android开发者的首选IDE。本文将揭示一些提升开发效率的高级技巧,包括自定义代码模板、重构工具、高级调试技巧及多模块架构。通过对比传统方法,这些技巧不仅能简化编码流程,还能显著提高生产力。例如,自定义模板可一键插入常用代码块;重构工具能智能分析并安全执行代码更改;高级调试技巧如条件断点有助于快速定位问题;多模块架构则提升了大型项目的可维护性和团队协作效率。掌握这些技巧,将使你的开发之旅更加高效与愉悦。
90 5

热门文章

最新文章