tutorial test support not medium instrumented found example activitytestrule java android android-studio android-espresso espresso

java - support - test ui android



¿Cómo obtener una vista desde Espresso para pasar a un IdlingResource? (3)

La respuesta aceptada funciona siempre que una prueba se ejecute en la misma actividad. Sin embargo, si la prueba navega a otra actividad, activityTestRule.getActivity() devolverá la actividad incorrecta (la primera). Para solucionar esto, uno puede crear un método auxiliar que devuelva una actividad real:

public Activity getCurrentActivity() { final Activity[] currentActivity = new Activity[1]; InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { Collection<Activity> allActivities = ActivityLifecycleMonitorRegistry.getInstance() .getActivitiesInStage(Stage.RESUMED); if (!allActivities.isEmpty()) { currentActivity[0] = allActivities.iterator().next(); } } }); return currentActivity[0]; }

Y luego podría ser utilizado como el siguiente:

Activity currentActivity = getCurrentActivity(); if (currentActivity != null) { currentActivity.findViewById(R.id.viewId); }

Básicamente, tengo un IdlingResource personalizado que toma un argumento View un constructor. No puedo encontrar ningún lugar que realmente hable sobre cómo implementarlo.

Estoy tratando de usar esta respuesta: https://stackoverflow.com/a/32763454/1193321

Como puede ver, se necesita un ViewPager , pero cuando estoy registrando el IdlingResource en mi clase de prueba, no estoy seguro de cómo puedo obtener mi vista.

He intentado findViewById() y he intentado obtener la actividad actualmente en ejecución y luego llamar a findViewById() sobre eso, sin suerte.

¿Alguien sabe qué hacer en este escenario?


Lo averigué. Para que la vista pase a un recurso inactivo, todo lo que tiene que hacer es tomar la variable miembro de su ActivityTestRule

Por ejemplo:

@Rule public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>( MainActivity.class);

y luego simplemente llame a getActivity().findViewById(R.id.viewId)

Entonces el resultado final es:

activityTestRule.getActivity().findViewById(R.id.viewId);


No he usado IdilingResources en Espresso , pero viste estos artículos:

También por favor verifique los documentos oficiales de Android: Recursos de ralentí (referencia)

Para responder tu pregunta,

Aquí hay un ejemplo tomado de un enlace de arriba:

A partir de un contexto, la vista raíz de la actividad asociada se puede tener por

View rootView = ((Activity)_context).Window.DecorView.FindViewById(Android.Resource.Id.Content);

En Raw Android se vería algo así como:

View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content)

Entonces simplemente llame al findViewById en este

View v = rootView.findViewById(R.id.your_view_id);

Esto también podría ser útil: ¿Cómo llamar a getResources () desde una clase que no tiene contexto?

Espero te ayude