Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Current Activity in Espresso android

In case of a test that crosses multiple activities, is there a way to get current activity?

getActivtiy() method just gives one activity that was used to start the test.

I tried something like below,

public Activity getCurrentActivity() {     Activity activity = null;     ActivityManager am = (ActivityManager) this.getActivity().getSystemService(Context.ACTIVITY_SERVICE);     List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);     try {         Class<?> myClass = taskInfo.get(0).topActivity.getClass();         activity = (Activity) myClass.newInstance();     }     catch (Exception e) {      }     return activity; } 

but I get null object.

like image 552
fenrigne123 Avatar asked Jul 01 '14 18:07

fenrigne123


2 Answers

In Espresso, you can use ActivityLifecycleMonitorRegistry but it is not officially supported, so it may not work in future versions.

Here is how it works:

Activity getCurrentActivity() throws Throwable {   getInstrumentation().waitForIdleSync();   final Activity[] activity = new Activity[1];   runTestOnUiThread(new Runnable() {     @Override     public void run() {       java.util.Collection<Activity> activities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);       activity[0] = Iterables.getOnlyElement(activities);   }});   return activity[0]; } 
like image 183
lacton Avatar answered Oct 07 '22 22:10

lacton


If all you need is to make the check against current Activity, use may get along with native Espresso one-liner to check that expected intent was launched:

intended(hasComponent(new ComponentName(getTargetContext(), ExpectedActivity.class))); 

Espresso will also show you the intents fired in the meanwhile if not matching yours.

The only setup you need is to replace ActivityTestRule with IntentsTestRule in the test to let it keep track of the intents launching. And make sure this library is in your build.gradle dependencies:

androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1' 
like image 38
riwnodennyk Avatar answered Oct 07 '22 22:10

riwnodennyk