Как получить представление из эспрессо, чтобы перейти в IdlingResource?
У меня, по сути, есть пользовательский IdlingResource, который принимает аргумент "Просмотр конструктора". Я не могу найти нигде, что действительно говорит о том, как его реализовать.
Я пытаюсь использовать этот ответ: qaru.site/info/385318/...
Как вы можете видеть, требуется ViewPager, но когда я регистрирую IdlingResource в своем тестовом классе, я не уверен, как я могу получить свое представление.
Я пробовал findViewById(), и я попытался получить текущую активность, а затем вызвал findViewById(), но не повезло. Кто-нибудь знает, что делать в этом сценарии?
Ответы
Ответ 1
Выяснил это. Чтобы получить представление для перехода в ресурс бездействия, все, что вам нужно сделать, это взять переменную-член вашей ActivityTestRule
Например:
@Rule
public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>(
MainActivity.class);
а затем просто вызовите getActivity().findViewById(R.id.viewId)
Итак, конечный результат:
activityTestRule.getActivity().findViewById(R.id.viewId);
Ответ 2
Принимаемый ответ работает до тех пор, пока тест работает в одном и том же действии. Однако, если тест переходит к другой активности activityTestRule.getActivity()
вернет неправильное действие (первое). Чтобы решить эту проблему, можно создать вспомогательный метод, возвращающий действительную активность:
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];
}
И тогда он может использоваться как следующий:
Activity currentActivity = getCurrentActivity();
if (currentActivity != null) {
currentActivity.findViewById(R.id.viewId);
}
Ответ 3
Я еще не использовал IdilingResources
в Espresso
, но вы видели эти статьи:
Также ознакомьтесь с официальными документами Android: Ресурсы холостого хода (ссылка)
Чтобы ответить на ваш вопрос,
Здесь приведен пример из ссылки выше:
Начиная с контекста, корневой вид связанная с ней деятельность может выполняться
View rootView = ((Activity)_context).Window.DecorView.FindViewById(Android.Resource.Id.Content);
В Raw Android он выглядит примерно так:
View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content)
Затем просто вызовите findViewById на этом
View v = rootView.findViewById(R.id.your_view_id);
Это также может быть полезно: Как вызвать getResources() из класса, который не имеет контекста?
Надеюсь, что это поможет