Espresso IdlingResource: 如何在布局显示后执行操作
要使用Espresso的IdlingResource来判断当布局R.id.container显示时才执行操作,您需要按照以下步骤进行操作:\n\n1. 创建一个自定义的IdlingResource类,实现IdlingResource接口。例如:\n\njava\npublic class LayoutIdlingResource implements IdlingResource {\n private ResourceCallback resourceCallback;\n private final int targetViewId;\n\n public LayoutIdlingResource(int targetViewId) {\n this.targetViewId = targetViewId;\n }\n\n @Override\n public String getName() {\n return LayoutIdlingResource.class.getName();\n }\n\n @Override\n public boolean isIdleNow() {\n boolean isIdle = checkLayoutVisibility();\n if (isIdle && resourceCallback != null) {\n resourceCallback.onTransitionToIdle();\n }\n return isIdle;\n }\n\n @Override\n public void registerIdleTransitionCallback(ResourceCallback callback) {\n this.resourceCallback = callback;\n }\n\n private boolean checkLayoutVisibility() {\n View targetView = getViewFromHierarchy(targetViewId);\n return targetView != null && targetView.getVisibility() == View.VISIBLE;\n }\n\n private View getViewFromHierarchy(int targetViewId) {\n // 根据targetViewId从布局层级中查找目标View\n // 返回目标View或者null\n }\n}\n\n\n2. 在测试方法中使用IdlingRegistry来注册和注销IdlingResource。例如:\n\njava\nimport androidx.test.espresso.Espresso;\nimport androidx.test.espresso.IdlingRegistry;\nimport androidx.test.espresso.IdlingResource;\n\n@Test\npublic void testLayoutVisibility() {\n // 创建IdlingResource并注册\n IdlingResource idlingResource = new LayoutIdlingResource(R.id.container);\n IdlingRegistry.getInstance().register(idlingResource);\n\n // 执行操作(例如点击按钮)\n onView(withId(R.id.button)).perform(click());\n\n // 注销IdlingResource\n IdlingRegistry.getInstance().unregister(idlingResource);\n}\n\n\n请注意,您需要根据您的布局层级结构和目标View的ID来实现getViewFromHierarchy方法。此方法应该返回目标View或者null。\n\n以上代码将在isIdleNow方法中检查布局中指定的目标View的可见性。如果目标View可见,则表示布局已经显示完毕,isIdleNow方法将返回true并调用onTransitionToIdle方法通知Espresso。\n\n这样,您就可以在测试中使用IdlingResource来判断布局是否显示,并在布局显示后执行操作。
原文地址: https://www.cveoy.top/t/topic/pLmv 著作权归作者所有。请勿转载和采集!