当前位置:  开发笔记 > 编程语言 > 正文

如何从Espresso中获取视图以传递到IdlingResource?

如何解决《如何从Espresso中获取视图以传递到IdlingResource?》经验,为你挑选了2个好方法。

我基本上是有一个自定义IdlingResource,需要一个View构造函数的参数.我找不到真正谈论如何实现它的任何地方.

我正在尝试使用这个答案:https://stackoverflow.com/a/32763454/1193321

正如你所看到的,它需要一个ViewPager,但是当我IdlingResource在我的测试课程中注册时,我不确定如何获得我的观点.

我已经尝试了findViewById(),我已经尝试了当前正在运行的活动然后调用findViewById()它,没有运气.

任何人都知道在这种情况下该怎么做?



1> EGHDK..:

弄清楚了.要使视图传递到空闲资源,您所要做的就是获取ActivityTestRule的成员变量

例如:

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

然后打电话 getActivity().findViewById(R.id.viewId)

所以最终的结果是:

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



2> Anatolii..:

只要测试在同一活动中运行,接受的答案就会起作用.但是,如果测试导航到另一个活动activityTestRule.getActivity()将返回错误的活动(第一个).要解决这个问题,可以创建一个返回实际活动的辅助方法:

public Activity getCurrentActivity() {
    final Activity[] currentActivity = new Activity[1];
    InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
        @Override
        public void run() {
            Collection 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);
}

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有