我有一个启动第二个活动的第一个活动,在第二个活动中我有一个加载对话框(不是 AsyncTask),我需要让 Espresso 等到对话框消失后再继续测试。
我必须在哪里实现 IdlingResource?我怎样才能让它等待dismissDialog()函数?
这是我尝试做的:
class DocumentLoadingIdlingResource implements IdlingResource {
private ResourceCallback callback;
@Override
public String getName() {
return "Documnet loading idling resource";
}
@Override
public boolean isIdleNow() {
Activity activity;
try {
activity = getCurrentActivity();
} catch (Throwable e) {
return false;
}
if(activity.getClass().getName().equals(EditorActivity.class.getName())
&& activity.loadingDialogShowing() == false) {
return false;
}
return true;
}
@Override
public void registerIdleTransitionCallback(ResourceCallback callback) {
this.callback = callback;
}
}
Activity getCurrentActivity() throws Throwable {
getInstrumentation().waitForIdleSync();
final Activity[] activity = new Activity[1];
runTestOnUiThread(new Runnable() {
@Override
public void run() {
java.util.Collection<Activity> activites = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
activity[0] = com.google.common.collect.Iterables.getOnlyElement(activites);
}});
return activity[0];
}
该类在测试类中实现。
这里有几个问题:
- isIdleNow() 调用 getCurrentActivity(),后者调用 waitForIdleSync() 和 runTestOnUiThread()。 isIdleNow Javadoc 说:“Espresso 将always从主线程调用此方法,因此它应该是非阻塞的并立即返回。”因此这不会按原样工作,但您可以直接从 isIdleNow 调用 getActivitiesInStage。
- 您的另一个问题是您存储对 ResourceCallback 的引用,但从不调用 onTransitionToIdle,您还应该允许注册多个 ResourceCallback 的可能性,并对所有回调调用 onTransitionToIdle。
您可以执行以下操作:
- 复制粘贴闲置资源 https://android-test-kit.googlecode.com/git/espresso/lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/IdlingResource.java into your app作为 com.mycompany.IdlingResource。
- 然后让您的 Activity 实现该接口,并确保在对话框消失时调用 onTransitionToIdle,并确保当对话框显示时 isIdleNow 返回 false。
- 在您的测试代码中,编写一个“IdlingResourceAdapter”,它包装 com.mycompany.IdlingResource 并将其转换为 Espresso IdlingResource 并将其注册到 Espresso。
一旦实现这个问题,这将变得更简单:https://code.google.com/p/android-test-kit/issues/detail?id=71 https://code.google.com/p/android-test-kit/issues/detail?id=71
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)