Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Espresso UI testing doesn't recognize onView()

I have spent all day setting up Junit4 instrumentation tests with Espresso, but just can't seem to get that final step. No matter what I do it won't recognize the onView() method. I have tried multiple SDK/support-lib versions and so far nothing. I have gone through all the google setup guides and many stackoverflow posts, turning here as my last hope.

Gradle version : com.android.tools.build:gradle:1.5.0

Gradle file:

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" } 

My test (located in 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. I use roboguice could that be the issue?

like image 500
somerandomusername Avatar asked Jan 21 '16 15:01

somerandomusername


People also ask

How do you assert espresso?

check is a method which accepts an argument of type ViewAssertion and do assertion using passed in ViewAssertion object. matches(withText(“Hello”)) returns a view assertion, which will do the real job of asserting that both actual view (found using withId) and expected view (found using withText) are one and the same.

Which is the class used in espresso framework to identify mobile test objects?

Latest development (Android 9.0, API level 28 or higher) of espresso testing framework will be done in AndroidX library. testInstrumentationRunner in the android/defaultConfig sets AndroidJUnitRunner class to run the instrumentation tests.


2 Answers

You should either use a static import:

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

or

import android.support.test.espresso.Espresso; 

and call it in the following way

Espresso.onView() 
like image 120
Egor Avatar answered Sep 29 '22 04:09

Egor


To extend what Egor has suggested, in Android Studio, once you get red text at onView(), simply press alt+enter when the red bulb popped up. Then choose static import.

like image 44
emen Avatar answered Sep 29 '22 03:09

emen