Espresso UI 测试无法识别 onView()。

43

我花了一整天的时间使用Espresso来设置Junit4测试,但就是无法完成最后一步。不管我怎么做,它都无法识别onView()方法。我尝试了多个SDK/支持库版本,但到目前为止仍然没有进展。我已经查看了所有Google的设置指南和许多Stackoverflow帖子,现在来到这里,希望能得到帮助。

Gradle版本:com.android.tools.build:gradle:1.5.0

Gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    useLibrary  'org.apache.http.legacy'

    defaultConfig {
        applicationId "lv.my.android"
        minSdkVersion 9
        targetSdkVersion 22
        testApplicationId "lv.my.android.tests"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    packagingOptions {
        exclude 'LICENSE.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }

    compileOptions {
        sourceCompatibility = 'VERSION_1_7'
        targetCompatibility = 'VERSION_1_7'
    }

    signingConfigs {
        beta {
            storeFile file("beta.keystore")
            storePassword "betabuild"
            keyAlias "key"
            keyPassword "betabuild"
        }
        release
    }

    buildTypes {
        debug {
            debuggable true
            applicationIdSuffix '.debug'
            versionNameSuffix '-DEV'
            minifyEnabled false
        }

        beta {
            debuggable true
            applicationIdSuffix '.beta'
            versionNameSuffix '-BETA'
            signingConfig signingConfigs.beta
            minifyEnabled false
        }

        release {
            minifyEnabled false
        }
    }
}

dependencies {
    compile files('src/main/libs/guice-3.0-no_aop.jar')
    compile files('src/main/libs/javax.inject-1.jar')
    compile files('src/main/libs/roboguice-2.0.jar')
    compile files('src/main/libs/junit-4.11.jar')
    compile files('src/main/libs/hamcrest-core-1.3.jar')
    compile files('src/main/libs/GeoLib.jar')
    compile files('src/main/libs/GeoPolygons.jar')
    compile files('src/main/libs/universal-image-loader-1.9.4.jar')
    compile files('src/main/libs/javax.annotation-3.2-b06-sources.jar')
    compile 'uk.co.chrisjenx:calligraphy:2.1.0'
    compile 'com.squareup:otto:1.3.5'
    compile 'com.google.android.gms:play-services:6.5.87'
    compile 'com.android.support:support-annotations:23.0.1'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:support-v4:23.0.1'
    compile 'com.android.support:palette-v7:23.0.1'
    compile 'com.google.code.findbugs:jsr305:2.0.1'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'pl.charmas.android:android-reactive-location:0.4@aar'
    compile 'io.reactivex:rxjava:1.0.3'
    compile files('src/main/libs/FlurryAnalytics-6.1.0.jar')
    compile 'com.github.castorflex.smoothprogressbar:library:1.1.0'



    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile'com.android.support.test:runner:0.4.1'
    // Set this dependency to use JUnit 4 rules
    androidTestCompile'com.android.support.test:rules:0.4'
    // Set this dependency to build and run Espresso tests
    androidTestCompile'com.android.support.test.espresso:espresso-core:2.2.1'
    testCompile 'junit:junit:4.12'
    testCompile "org.mockito:mockito-core:1.9.5"
}

我的测试(位于src/androidTest/java/lv/my/test

package lv.my.test;

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest;
import lv.my.android.activities.LoginActivity;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class LoginActivityTest {

    private String mStringToBetyped;

    @Rule
    public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule<>(LoginActivity.class);

    @Before
    public void initValidString() {

    }

    @Test
    public void changeText_sameActivity() {
//        onView not recognized here

    }
}

PS. 我使用Roboguice,这可能是问题所在吗?


4
尝试添加导入语句:import static android.support.test.espresso.Espresso.onView; - Raghunandan
5个回答

88

你应该使用静态导入:

import static android.support.test.espresso.Espresso.onView;
或者
import android.support.test.espresso.Espresso;

并以以下方式调用

Espresso.onView()

20
哇,它起作用了。没有任何示例或教程提到过这一点,它只是显示应该开箱即用。所以我让它运行了 Espresso.onView(ViewMatchers.withId(R.id.registerButton)) - somerandomusername
4
为什么这个网页:http://developer.android.com/training/testing/ui-testing/espresso-testing.html#build 上没有提到这个问题呢? - somerandomusername
4
我们应该自己想出来吗?!!Android文档中都没有提到,我不知道为什么。 - Muhammed Refaat
2
以下是其他要导入的函数。Espresso.onView(ViewMatchers.withId(R.id.uname_edt))ViewActions.typeText("aaaa")ViewActions.click())ViewAssertions.matches(ViewMatchers.withText("bbb")ViewActions.closeSoftKeyboard() - Ashok Reddy Narra

20

除了Egor提到的方法,如果在Android Studio中看到onView()出现红色文本,只需等待红色气泡出现,然后按下alt+enter,选择静态导入即可。


4
+1 这行得通。一个迷人的按键组合。我也遇到了与 withId 相关的问题,就像你提到的那样去做,它建议使用静态导入 matchers.ViewMatchers。非常感谢! - Neon Warge

9

对于 AndroidX,请使用以下内容

import androidx.test.espresso.Espresso.onView

2

继续编写。Android Studio将从“内部向外部”建议所需的Espresso导入。 例如:onView(withId())首先会检测withId(),然后是onView()


0
如果您的测试文件位于test文件夹中而不是androidTest文件夹中,则在Gradle文件中的依赖项中,使用“test…”而不是“androidTest…”来引用此依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接