J'ai essentiellement une coutume IdlingResource
qui prend un View
un argument constructeur. Je ne trouve aucun endroit qui parle réellement de la façon de le mettre en œuvre.
J'essaie d'utiliser cette réponse: https://stackoverflow.com/a/32763454/1193321
Comme vous pouvez le constater, il faut une ViewPager
, mais lorsque j'inscris IdlingResource
dans ma classe de test, je ne sais pas comment obtenir mon point de vue.
J'ai essayé findViewById()
et j'ai essayé d'obtenir l'activité en cours puis d'appeler findViewById()
à ce sujet, sans succès.
Quelqu'un sait quoi faire dans ce scénario?
Deviner. Pour que la vue passe dans une ressource inactive, il vous suffit de prendre la variable membre de votre ActivityTestRule.
Par exemple:
@Rule
public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>(
MainActivity.class);
puis appelez simplement getActivity().findViewById(R.id.viewId)
Le résultat final est donc:
activityTestRule.getActivity().findViewById(R.id.viewId);
La réponse acceptée fonctionne tant qu'un test est en cours dans la même activité. Cependant, si le test passe à une autre activité, activityTestRule.getActivity()
renverra la mauvaise activité (la première). Pour résoudre ce problème, on peut créer une méthode d'assistance renvoyant une activité réelle:
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];
}
Et puis, il pourrait être utilisé comme suit:
Activity currentActivity = getCurrentActivity();
if (currentActivity != null) {
currentActivity.findViewById(R.id.viewId);
}
Je n'ai pas encore utilisé IdilingResources
dans Espresso
, mais avez-vous vu ces articles:
Consultez également les documents Android officiels: Idling Resources (référence)
Pour répondre à ta question,
la meilleure façon de le faire est de passer une instance d'une des vues dans le constructeur de la classe. Vérifier: Appel de findViewById () de l'extérieur d'une activité
une autre façon consiste à obtenir une vue par contexte. Check Android - Comment obtenir une vue du contexte?
Voici un exemple tiré d'un lien ci-dessus:
En commençant par un contexte, la vue racine du fichier activité associée peut être eu par
View rootView = ((Activity)_context).Window.DecorView.FindViewById(Android.Resource.Id.Content);
Dans Raw Android, cela ressemblerait à quelque chose comme:
View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(Android.R.id.content)
Ensuite, appelez simplement findViewById sur cette
View v = rootView.findViewById(R.id.your_view_id);
Cela pourrait aussi être utile: Comment appeler getResources () depuis une classe qui n’a pas de contexte?
J'espère que ça aide