• 0
  • 0
分享

以前开发UiAutomator都是在Eclipse环境下进行的,最近经朋友介绍,由于UiAutomator2的出现,开发平台如果能够移植到Android Studio会变得非常的容易。在平台移植过程中参考了网上许多资料,都不太系统,现在我将如何在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 Runtime Environment (build 1.8.0_131-b11)

Java HotSpot(TM) 64-Bit Server 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目录,升级方法如下:

1)cd %ANDROID_HOME%;

2)把目录名tools改为too;l

3)cd tool/bin;

4)执行:sdkmanager –update;

5)在update工程中,在%ANDROID_HOME%目录下产生新的文件夹tools;

6)update完毕把新产生的tools目录下所有文件拷贝到tool下;

7)删除tools目录,把tool目录改名为tools;

8)cd %ANDROID_HOME%/tools/bin;

9)执行:sdkmanager ----licenses。

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


3、建立Android Studio的SDK

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

1.png


4、建立测试工程

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

2.png

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

3.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'  
 }

4.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 中找到相应的类。

5.png

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

6.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区别

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

2)在UiAutomator1.0中继承的是UiAutomatorTestCase,而2.0继承的是InstrumentationTestCase

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

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

5)在2.0中UiDevice 类增加了如下的方法:

7.png

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


本文未经授权禁止转载,如需转载请于51Testing小编联系。


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   移动端版本更新升级是一个比较重要的功能点,主要分为强制更新和非强制更新。  强制更新  强制升级是否可以升级成功  从老版本的包升级到新版本的包是否可以升级成功。  升级后的数据是否正常  查看老账户升级后是否可以正常使用;  查看老账户升级后的老数据是否丢失或异常;  检查新功能替换老功能是否按最新的逻辑执行;  检查旧版本上去掉或者隐藏的功能对新版本有没有影响。  强制升级的弹窗是否可以关闭  检查强制更新窗口有没有其他可以关闭的按钮或功能,比如弹框右上方的关闭按钮没有隐藏,点击背景阴影弹框消失等。  提示强制更新的提示  配置升级功能后是否一打开应用就提示升级;多次打开应用是否强制弹...
            0 0 1171
            分享
          • 自从写了几篇简历相关的文章,不少同学都找我帮忙修改简历。大部分同学发给我之前都看过系列文章,需要修改的地方就很少了,但是也有没看完所有文章就直接丢给我简历的,建议把之前写过的都看看哈。今天我按照简历从上到下的顺序,逐一提供推荐的格式,并简单说明下原因,希望大家能保持频调一致,理解简历的真正目的。一、个人信息简历开头是个人信息,这个大家都没有异议的吧?但是个人信息应该包含哪些内容,每个人理解都不一样,我的建议是:1、要包含:姓名、性别、学历、工作年限、电话、邮箱地址;2、不包含:照片(对自己特自信的除外)、毕业学校(特知名的除外)、专业(特自豪的除外);原因:咱们是技术岗,一切以技术优先;学校和...
            2 3 1470
            分享
          • 前言:MySQL越学越多,你的头有越来越秃么?1、MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联;主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;从:sql执行线程——执行relay log中的语句;2、MySQL中myisam与innodb的区别,至少5点问5点不同?1>.InnoDB支持事物,而MyISAM不支持事物2>.InnoDB支持行级锁,而MyISAM支持表级锁3>.In...
            0 0 1049
            分享
          • 一、pytest简介pytest是一个非常成熟的全功能的Python测试框架。pytest框架特点:简单灵活,非常容易上手支持参数化支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等测试用例的skip和xfail处理可以与jen...
            1 2 2745
            分享
          • 金三银四是跳槽的高峰期,我也加入了跳槽的大军中,当准备写简历时,我陷入了彷徨,因为我没有任何亮点可以在简历中体现。应该有不少人跟我有同样的迷茫吧,所以我就来说说我对这一行的理解,希望能跟我有相似经历的童鞋们有一点点的指引作用,不要再陷入我这同样的深坑。1、首先来说说我的经历。大学期间校企合作培训.NET开发工程师,培训期间很幸运进入了一家物联网公司开始了我的码农生活,在码农的生活中比较累,自觉无法胜任软件开发职位,由于是女孩子,觉得软件测试更适本人一点,毕业后就开始找软件测试相关的工作,当时的愿望还是很美好的,先学习软件的基本理论知识再深入到白盒测试,找了一份软件测试的工作,就这样进入了软件测...
            0 0 942
            分享
      • 51testing软件测试圈微信