在多项活动中使用 Espresso 空闲资源

2024-01-16

我有一个启动第二个活动的第一个活动,在第二个活动中我有一个加载对话框(不是 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];
  }

该类在测试类中实现。


这里有几个问题:

  1. isIdleNow() 调用 getCurrentActivity(),后者调用 waitForIdleSync() 和 runTestOnUiThread()。 isIdleNow Javadoc 说:“Espresso 将always从主线程调用此方法,因此它应该是非阻塞的并立即返回。”因此这不会按原样工作,但您可以直接从 isIdleNow 调用 getActivitiesInStage。
  2. 您的另一个问题是您存储对 ResourceCallback 的引用,但从不调用 onTransitionToIdle,您还应该允许注册多个 ResourceCallback 的可能性,并对所有回调调用 onTransitionToIdle。

您可以执行以下操作:

  1. 复制粘贴闲置资源 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。
  2. 然后让您的 Activity 实现该接口,并确保在对话框消失时调用 onTransitionToIdle,并确保当对话框显示时 isIdleNow 返回 false。
  3. 在您的测试代码中,编写一个“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(使用前将#替换为@)

在多项活动中使用 Espresso 空闲资源 的相关文章

  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Android 如何更改 OnTouchListener 上的按钮背景

    你好 我在 xml 中有一个按钮 我正在使用OnTouchListener在我的活动中获得button按下并释放 但问题是 当我按下按钮时背景颜色没有改变 当我延长可能的活动时OnClickListener背景正在改变 任何人都可以告诉我的
  • 使用 ADB 命令获取 IMEI 号码 Android 12

    对于 11 之前的 Android 版本 我使用以下命令从我的设备获取 IMEI 号码 adb shell service call iphonesubinfo 4 cut c 52 66 tr d space or adb shell s
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 如何在android线性布局上获得阴影? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在android中为View设置阴影 https stackoverflow com questions 4406524 how to set shadow to a view in androi
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • Android 应用程序中的 Eszett (ß)

    我的 res layout activity 文件中的德语 字符在我的应用程序中自动转换为 ss 即使我将语言和键盘设置为德语 它仍然不会显示 Android 中可以显示 吗 edit
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • 如何检查用户在EditText中输入自己的电话号码?

    用户将在我的 Android 应用程序的注册页面上的编辑文本中输入手机号码 如何检查用户输入的是他 她的手机号码而不是其他人的 我试过这个 TelephonyManager tMgr TelephonyManager mAppContext
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

    我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角 如此处所述https developer android com guide topics sensors sensors position https
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 如何在 Viewpager 中禁用预加载下一页? [复制]

    这个问题在这里已经有答案了 如何在 Viewpager 中禁用页面预加载 I tried viewPager setOffscreenPageLimit 0 但它不起作用 用这个viewPager setOffscreenPageLimit
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android

随机推荐

  • MSTest 在错误位置查找 DLL

    我正在运行一个测试工具 但由于类型未解析而无法运行 更具体地说 是错误绑定上的 SerializationException 我使用fuslogvw来追踪它在哪里寻找DLL 但没有找到它 我很困惑为什么它在它所在的位置寻找 Pre bind
  • 适用于 Google 云端硬盘的 Android API?

    目前发布的 API 似乎主要针对 Chrome 商店应用程序 是否会有适用于 Android 的 API 或者是否可以使用现有的 API 例如 Google 文档列表数据 如果是这样 应该使用哪个 URL 来列出 访问文件 编辑 随着文档列
  • Item PropertyChanged 不适用于 observableCollection。为什么?

    我到处寻找解决方案 但似乎没有深入了解 就像网上的许多帖子一样 我似乎没有让我的 itemPropertyChanged 工作 编辑集合中的项目时它不会触发 为什么 有点长 但这是我整理的一个例子 我有一个客户 ViewModel 其中包含
  • 如何以编程方式“打开”Material-UI Select 字段?

    选择字段可以在这里找到 在 Material UI 演示中 http www material ui com components select field 它的方法似乎是从菜单 弹出窗口类继承的 但我无法弄清楚如何在 onFocus 事件
  • while 循环的 Python 枚举

    Python 有一种优雅的方式自动生成计数器变量for循环 enumerate功能 这节省了初始化和递增计数器变量的需要 计数器变量也很丑陋 因为一旦循环完成它们通常就没用了 但它们的作用域不是循环的作用域 因此它们不需要占用命名空间 尽管
  • 如何将指定字段中的隐私政策添加到Chrome扩展程序中?

    是否有任何密钥或属性或其他方式可以将指定字段中的附加信息添加到 Chrome 扩展程序 Note 我们正在尝试在 Chrome 扩展程序下载 UI 中添加附加信息字段作为开发者隐私链接 但无法添加字段 您能否帮助我们了解如何在指定字段中添加
  • Spring自定义AuthenticationFailureHandler

    我已经尝试了一整天 让我的自定义身份验证失败处理程序与 Spring 3 1 3 一起使用 我认为配置正确
  • 使用 HTML 表单作为 powershell 的 GUI

    我有一个 powershell 脚本 我想使用 html 表单运行它 我所拥有的只是一些表单字段和一个按钮 当我运行 powershell 脚本时 它会打开一个新的 ie 窗口 然后导航到包含表单的正确页面 如何收集用户单击按钮后在表单中填
  • Delphi/Pascal 有静态代码分析工具吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Delphi Pascal 有静态代码分析工具吗 我见过很多 C 和 NET 的选项 但没有看到 De
  • java中如何将字符串转换为比特流

    如何将字符串转换为位 0 和 1 的流 我做了什么我采取了一个字符串 然后将其转换为一个字符数组 然后我使用了方法 称为 forDigit char int 但它没有给我作为 0 和 1 流的字符 你能帮忙吗 另外我怎样才能从位到字符进行相
  • 如何使用selenium获取td元素的文本?

    我有一个 html 表格 我需要用硒获取 td 元素的文本 html结构 table tbody tr td b Success b You have transferred 1 000 00 USD to DIST2 Your balan
  • 从 iPhone 发送 UDP 数据包

    有人有关于从 iPhone SDK 发送 UDP 数据包的好教程吗 EDIT 事实上 做到这一点真的很容易 RTFM 包含 AsyncUdpSocket 后 只需在标头中添加以下内容 AsyncUdpSocket socket 主要是 NS
  • Python Rich 表中的列表列表

    鉴于以下内容 我怎样才能将动物 年龄和性别放入每个表格单元格中 目前 所有数据最终都存储在一个单元格中 谢谢 from rich console import Console from rich table import Table lis
  • Appium Send keys() 函数发送中文字符作为英文字符串的一部分

    使用appium时send keys 函数在文本字段中发送名称 除了名称之外 文本字段中还会出现一些随机的汉字 我们在能力中使用 capabilities setCapability unicodeKeyboard true 甚至认为我们无
  • 基于行中的值的“开始”和“结束”日期

    我有一个可以找到的输入数据示例here https github com veronique ka tests blob master input xlsx input 我需要根据每行中的数据添加两列 开始日期 和 结束日期 开始日期 当所
  • 无法从 PATH 环境变量中删除 cygwin

    我最近不得不重新安装 Cygwin 在这样做时 我遇到了某些应用程序的问题 因为 Cygwin 似乎已附加到我的 PATH 环境变量中 我尝试按照这些说明删除它https www java com en download help path
  • 如何使用 SSMS 中的表值参数执行存储过程

    当我右键单击存储过程并选择执行存储过程命令时 我应该将什么作为值传递给表值参数 我不是在谈论 SSMS 查询 窗口 我说的是当您右键单击 SP 时显示的 执行过程 对话框 我可以通过此屏幕直接向 SP 提供参数值吗 这是可以做到的 例如 假
  • 如何在 Ruby 中将字符串转换为常量?

    如何转换字符串 User to User Object const get User 无需 ActiveSupport
  • PyGTK中动态修改/刷新菜单内容

    我正在尝试在我用 PyGTK 编写的 GUI 的菜单中实现最近打开的项目列表 我像这样初始化菜单 self filemenu gtk Menu self init file menu self fileitem gtk MenuItem F
  • 在多项活动中使用 Espresso 空闲资源

    我有一个启动第二个活动的第一个活动 在第二个活动中我有一个加载对话框 不是 AsyncTask 我需要让 Espresso 等到对话框消失后再继续测试 我必须在哪里实现 IdlingResource 我怎样才能让它等待dismissDial