AndroidEspresso-等待对话框显示
创始人
2024-10-07 16:30:50
0

可以使用Espresso的IdlingResource API来等待对话框的出现。下面是示例代码:

首先,创建一个名为DialogUtils的工具类,用于等待对话框的出现:

import android.app.Activity;
import android.app.Dialog;
import androidx.test.espresso.IdlingResource;
import androidx.test.espresso.IdlingResource.ResourceCallback;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
import androidx.test.runner.lifecycle.Stage;
import java.util.Collection;
import java.util.concurrent.atomic.AtomicBoolean;

public class DialogUtils {

private static final String DIALOG_FRAGMENT_TAG = "androidx.fragment.app.DialogFragment";
private static final String DIALOG_TAG = "android.app.Dialog";

public static IdlingResource waitForDialogToBeDisplayed() {
return new WaitDialogIdlingResource();
}

private static class WaitDialogIdlingResource implements IdlingResource {
private final AtomicBoolean mIsIdleNow = new AtomicBoolean(true);
private ResourceCallback mResourceCallback;

@Override
public String getName() {
return WaitDialogIdlingResource.class.getName();
}

@Override
public boolean isIdleNow() {
boolean isIdle = isDialogDisplayed();

if (isIdle) {
mIsIdleNow.set(true);

if (mResourceCallback != null) {
mResourceCallback.onTransitionToIdle();
}
}
else {
mIsIdleNow.set(false);
}

return mIsIdleNow.get();
}

@Override
public void registerIdleTransitionCallback(ResourceCallback callback) {
mResourceCallback = callback;
}

private boolean isDialogDisplayed() {
Collection resumedActivities =
ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);

for (Activity activity : resumedActivities) {
if (activity != null) {
if (activity instanceof androidx.fragment.app.FragmentActivity) {
androidx.fragment.app.FragmentManager fragmentManager = ((androidx.fragment.app.FragmentActivity)activity)
.getSupportFragmentManager();
if (fragmentManager.findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
return true;
}
}

if (activity.getWindow() != null) {
Dialog dialog = activity.getWindow().peekDecorView() instanceof Dialog ? (Dialog) activity.getWindow().peekDecorView() : null;

if (dialog != null && dialog.isShowing()) {
return true;
}

if (activity.getFragmentManager() != null) {
DialogFragment dialogFragment = (DialogFragment) activity.getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG);

if (dialogFragment != null && dialogFragment.getShowsDialog() && dialogFragment.getDialog().isShowing()) {
return true;
}
}

}
}
}

return false;
}
}
}

然后,在测试代码中,使用以下代码等待对话框出现:

@Test
public void testDialogDisplayed() {
//点击一个按钮打开一个对话框
Es

相关内容

热门资讯

据统计!pokemomo辅助软... 据统计!pokemomo辅助软件,八张透视辅助,演示教程(有挂细节)1、全新机制【八张透视辅助ai辅...
明白辅助挂!红龙poker作弊... 明白辅助挂!红龙poker作弊指令,奇迹脚本辅助,大纲教程(有挂方针)1、游戏颠覆性的策略玩法,独创...
目前!德州圈脚本,德普之星辅助... 目前!德州圈脚本,德普之星辅助器,积累教程(真的有挂)1、操作简单,无需德普之星辅助器手机版透视脚本...
相较于以往!智星菠萝有挂吗,来... 相较于以往!智星菠萝有挂吗,来来拼十辅助免费辅助,方针教程(存在有挂)1、首先打开来来拼十辅助免费辅...
据通报!德扑之心免费透视,广东... 据通报!德扑之心免费透视,广东雀神挂机怎么样,步骤教程(有挂方略)1、该软件可以轻松地帮助玩家将广东...
有玩家发现!aapoker真的... 有玩家发现!aapoker真的假的,闲聚辅助器,绝活儿教程(讲解有挂)1)闲聚辅助器免费钻石:进一步...
方法辅助挂!德州局脚本,博雅红... 方法辅助挂!德州局脚本,博雅红河西元红河挂,方式教程(有挂讲解)1、博雅红河西元红河挂免费辅助多个强...
有玩家发现!扑克之星辅助,jj... 有玩家发现!扑克之星辅助,jj斗地主外卦,讲义教程(有挂分析)1、进入到jj斗地主外卦是否有挂之后,...
黑科技辅助挂!hhpoker辅... 黑科技辅助挂!hhpoker辅助,陕麻圈辅助开挂软件,妙招教程(有挂详情);1、下载好陕麻圈辅助开挂...
为切实保障!epoker透视底... 为切实保障!epoker透视底牌,哈局八张辅助,总结教程(有挂方略)1、该软件可以轻松地帮助玩家将哈...