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

相关内容

热门资讯

玩家必看教程!wepoker私... 玩家必看教程!wepoker私人局有透视吗,hhpoker软件安装包,解密教程(有挂技巧)这是由厦门...
透视苹果版"wepo... 透视苹果版"wepoker买脚本靠谱吗"详细辅助科技教程(果然是真的有挂);大神普及一款德州ai内幕...
必备辅助推荐!wepoker底... 必备辅助推荐!wepoker底牌透视脚本,wepoker模拟器哪个好用,AI教程(有挂攻略)这是由厦...
透视真的"wepok... 透视真的"wepoker怎么获得好牌"详细辅助AI教程(起初真的是有挂)1、玩家可以在wepoker...
玩家必备科普!wepoker插... 《玩家必备科普!wepoker插件辅助,wepoker轻量版辅助,必备教程(有挂神器)》 wepok...
透视透视挂"hhpo... 1、透视透视挂"hhpoker德州牛仔视频"详细辅助安装教程(往昔真的有挂)(UU poker、hh...
总算了解!hhpoker破解工... 总算了解!hhpoker破解工具,wepoker插件功能辅助器,AI教程(有挂辅助)是一款可以让一直...
透视神器"wepok... 透视神器"wepoker透视脚本下载"详细辅助AI教程(好像是真的有挂);建议优先通过wepoker...
推荐一款!拱趴大菠萝作弊方法,... 推荐一款!拱趴大菠萝作弊方法,拱趴大菠萝万能辅助器,靠谱教程(有挂软件);致您一封信;亲爱拱趴大菠萝...
透视系统"poker... 透视系统"poker红龙辅助"详细辅助必赢方法(最初有挂);建议优先通过poker红龙辅助透明挂内置...