Espresso(

Stella981
• 阅读 570

(注意:本文针对Android Studio)

Espresso简介

1、Espresso是google发布的一款针对android UI进行测试的框架。

Espresso is targeted at developers, who believe that automated testing is an integral part of the development lifecycle.

2、Espresso支持的android版本如下:

Codename

API

Froyo

8

Gingerbread

10

Ice Cream Sandwich

15

Jelly Bean

16, 17 ,18

KitKat

19

Lollipop

21

参考地址:https://google.github.io/android-testing-support-library/docs/espresso/index.html

3、Espresso官网地址:

https://google.github.io/android-testing-support-library/docs/espresso/index.html

4、Espresso的学习经过总结

    关于环境搭建的过程中,我遇到了好几个问题也耗费了很长的时间。不过这一次总结的经验教训就是下一次如果有对应的sample project的时候,在我遇到困难的时候。一定要先download。对照sample 进行modify.这样会加快我解决问题的速度。

Espresso环境搭建的过程

1、组建测试环境

    关闭测试机三个选项。具体操作步骤如下:

On your device, under _Settings_->Developer options disable the following 3 settings:

  • Window animation scale

  • Transition animation scale

  • Animator duration scale

2、配置./app/build.gradle文件。下载Espresso相对应的依赖jar包

    第一步:确定SDK中已经下载了最新版的 Android Support Repository

                如下图所示:

        Espresso(

    第二步:直接修改app下面的build.gradle文件,下载需要的jar包

        下面的build.gradle文件,是我的项目中的,其中标注-----Espresso中要求添加的部分

        就是Espresso需要添加的jar包。其中分为了必选项和可选项。根据需要进行选择添加

apply plugin: 'com.android.application'
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    defaultConfig {
        applicationId "com.collection.self.com.espressotest"
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        //-----Espresso中要求添加的部分(必选项)
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
//    testCompile 'junit:junit:4.12'----这个一定要删除,否则AndroidJUnit4无法下载下来
    androidTestCompile 'com.android.support:support-annotations:23.1.1'
    compile 'com.android.support:appcompat-v7:23.1.1'
// Android JUnit Runner-----Espresso中要求添加的部分(必选项)
    androidTestCompile 'com.android.support.test:runner:0.4.1'
    // JUnit4 Rules-----Espresso中要求添加的部分(必选项)
    androidTestCompile 'com.android.support.test:rules:0.4.1'
    // Espresso core-----Espresso中要求添加的部分(必选项)
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    // Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource
    //-----Espresso中要求添加的部分(可选项)
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1'
    // Espresso-web for WebView support-----Espresso中要求添加的部分(可选项)
    androidTestCompile 'com.android.support.test.espresso:espresso-web:2.2.1'
    // Espresso-idling-resource for synchronization with background jobs-----Espresso中要求添加的部分(可选项)
    androidTestCompile 'com.android.support.test.espresso:espresso-idling-resource:2.2.1'
}
3、也可以直接在以下的路径中直接下载对应的jar包。添加到项目中去

https://github.com/googlesamples/android-testing/tree/master/ui/espresso/BasicSampleBundled/libs

参考地址:https://google.github.io/android-testing-support-library/downloads/index.html

Espresso环境搭建过程中遇到的问题已经解决方案

【问题一】

报错内容如下:

 Error:Conflict with dependency 'com.android.support:support-annotations'.
 Resolved versions for app (23.1.1) and test app (23.0.1) differ.
 See http://g.co/androidstudio/app-test-app-conflict for details.

解决方案如下:

 在app/build.gradle中添加一个设置就可以了
 androidTestCompile 'com.android.support:support-annotations:23.1.1'

 这个在上面给出的build.gradle文件中已经贴出来了。

下面是对这个问题的英文解释:

Resolving conflicts between main and test APK

When instrumentation tests are run, both the main APK and test APK share the same classpath.
Gradle build will fail if the main APK and the test APK use the same library (e.g. Guava) but in different versions.
If gradle didn't catch that, your app could behave differently during tests and during normal run (including crashing in one of the cases).

To make the build succeed, just make sure both APKs use the same version.
If the error is about an indirect dependency (a library you didn't mention in your build.gradle),
just add a dependency for the newer version to the configuration ("compile" or "androidTestCompile") that needs it.
 You can also use Gradle's resolution strategy mechanism.
 You can inspect the dependency tree by running ./gradlew :app:dependencies and ./gradlew :app:androidDependencies.

(英文不是很好,就不翻译了)

【问题二】

报错内容如下:

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebugAndroidTest'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException:
Duplicate files copied in APK META-INF/maven/com.google.guava/guava/pom.properties
 File1: F:\workspace\UnitTestProject\app\build\intermediates\exploded-aar\com.android.support.test.espresso\espresso-web\2.2.1\jars\classes.jar
 File2: F:\workspace\UnitTestProject\app\build\intermediates\exploded-aar\com.android.support.test.espresso\espresso-core\2.2.1\jars\classes.jar

解决方案如下:

在app/build.gradle文件中添加如下配置:

packagingOptions {
      exclude 'META-INF/maven/com.google.guava/guava/pom.properties'
      exclude 'META-INF/maven/com.google.guava/guava/pom.xml'
    }

参考地址:

http://stackoverflow.com/questions/33800924/espresso-web-import-causes-duplicatefileexception
    https://github.com/googlesamples/android-testing/blob/master/ui/espresso/WebBasicSample/app/build.gradle

【问题三】

Espresso无法import AndroidJUnit4

解决方案如下:

app/build.gradle文件中不可出现如下配置项

  testCompile 'junit:junit:4.12'

必须添加如下红色部分标出的配置项

dedefaultConfig {
    applicationId "com.collection.self.com.espressotest"
    minSdkVersion 9
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    //-----Espresso中要求添加的部分(必选项)
    }
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这