android.support.test.espresso.PerformException:在视图上执行“加载适配器数据”时出错

2023-12-20

我正在使用 Espresso 来测试在搜索项目(例如自动完成)时出现的列表视图。直到用户在 SearchView 中输入内容后,列表视图才会出现。即我将 ListView 设置为View.VISIBLE仅当用户在 SearchView 中输入内容时

当我尝试单击列表视图中的文本时,出现此错误。android.support.test.espresso.PerformException: Error performing 'load adapter data' on view 'with id:'。使用 onData 不起作用。

添加人为延迟是可行的,但我不确定这是否是不好的做法,因为它似乎违背了诸如onData etc.

我尝试过的:

  • 我尝试查看 Espresso 测试记录器的功能,但是当我使用测试记录器的代码时,出现上述错误。我相信这是因为录音机引入了一些延迟。

  • 我通读了这些 StackOverflow 问题,但它们没有解决我的问题:

    • 浓咖啡。执行“加载适配器数据”时出错 https://stackoverflow.com/questions/37030336/espresso-error-performing-load-adapter-data
    • Espresso onData 在视图上执行“加载适配器数据”时出错 https://stackoverflow.com/questions/37184933/espresso-ondata-error-performing-load-adapter-data-on-view

My Code

这段代码可以工作,但我不想引入人为的延迟。

public pickSuggestion(int index){

    /** artificial delay to allow list to appear. 
    This works but I shouldn't have to do this right? **/

    SystemClock.sleep(1000);

    onData(anything())
        .inAdapterView(withId(R.id.list))
        .atPosition(index)
        .onChildView(withId(R.id.mTextView))
        .perform(click());
}

添加人为延迟是可行的,但我不确定这是否不好 实践,因为它似乎违背了诸如此类的方法的目的 onData 等

Your error设有Espresso局限性。该框架需要在 UI 线程上运行,并且它会“等待”直到空闲。它不等待加载适配器数据,而是等待获取空闲资源

Check: http://dev.jimdo.com/2014/05/09/wait-for-it-a-deep-dive-into-espresso-s-idling-resources/ http://dev.jimdo.com/2014/05/09/wait-for-it-a-deep-dive-into-espresso-s-idling-resources/

空闲资源参考:https://developer.android.com/reference/android/support/test/espresso/IdlingResource.html https://developer.android.com/reference/android/support/test/espresso/IdlingResource.html

IdlingResource 文档:https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html

计数空闲资源:https://developer.android.com/reference/android/support/test/espresso/idling/CountingIdlingResource.html https://developer.android.com/reference/android/support/test/espresso/idling/CountingIdlingResource.html

代码如下SystemClock.sleep(1000) or Thread.sleep(1000)这是一种不好的做法,因为更好的设备不需要这么多时间,而旧设备需要更多时间,因此您的代码可能不稳定,而不是快速和灵活。

解决方案是创建自己的Espresso IdlingResource告诉 Espresso 何时可以执行测试而不会丢失数据和时间。

希望这会有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android.support.test.espresso.PerformException:在视图上执行“加载适配器数据”时出错 的相关文章

  • Android:每次单击导航抽屉项时创建一个新片段更好,还是加载以前创建的片段更好?

    我正在为 Android 实现标准导航抽屉模式 用户可以从抽屉中导航到大约 10 个片段 目前 每次单击不同的导航抽屉项目时 我都会创建一个新的片段 如下所示 When a new navigation item at index is c
  • com.android.ddmlib.AdbCommandRejectedException:设备离线(即使设备已连接)

    将 Android Studio 更新到 2 1 2 后 当我进行更改时 我多次收到以下错误 com android ddmlib AdbCommandRejectedException 设备离线 安装 APK 时出错 问题是设备从未连接且
  • 使用 Android WebViewClient 启用特定 SSL 协议

    我的应用程序使用WebViewClient与服务器建立 SSL 连接 服务器配置为仅接受 TLSv1 1 及以上协议 使用 Android 时 如何检查哪些 SSL 协议是 a 支持的和 b 默认启用的WebViewClient在设备上 如
  • 对齐卡片视图中的项目

    我希望我的卡片如下所示 我保持这样的布局
  • 如何在默认浏览器或webview中打开按钮点击url

    我怎样才能打开一个网址webview或者点击按钮后在默认浏览器中 目前 当我单击btn1按钮 它提示我从手机中选择一个浏览器 我想在默认浏览器或其他浏览器中打开此网址webview 这是我的java代码 public class myact
  • AdMob 插页式广告仅显示一次

    当广告在一个会话内第二次或第三次打开时 LogCat 会显示错误消息 尝试使用不同的广告管理器启动新的 AdActivity 我通过应用程序主屏幕的 on resume 方法中的意图启动插页式广告 Override public void
  • 防止 FragmentPagerAdapter 中的 WebView 重新加载?

    我有一个 FragmentPagerAdapter 用于显示大约 6 个选项卡 所有选项卡都从 Web 服务器加载数据 其中一个选项卡包含一个从我的服务器加载图像的 WebView 生成图像的服务器端成本很高 因此我想减少重新加载 WebV
  • 屏幕滚动时 GridView 内的项目会重复

    我使用 GridView 来显示一组用户可以选择的类别 网格的每个项目都由一个 ImageView 和一个 TextView 组成 两者都是从服务器检索的 当触摸一个项目时 另一个活动就会启动 我以为一切都很顺利 直到我注意到当我滚动屏幕时
  • EditText 中的双光标用于输入类型号码/电话(RTL 阿拉伯语)

    我将 EditText 设置为 重力右 以便如果语言是阿拉伯语 则文本从右侧开始 注意 我的应用程序支持 RTL 并且我没有为 EditText 设置 TextDirection 因为这会出现相同的问题 将重力设置为 右 可以完美完成这项工
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI
  • Android系统每个应用程序的通知限制

    这可能偏离主题 但我找不到任何相关内容 Android应用程序可以显示的通知数量有限制吗 我在收到 100 条通知后遇到问题 没有文件明确说明这一点 注意 显示 100 条通知并不是一个好主意 但由于某些原因这是必需的 In API23 包
  • 检查应用程序是否首次运行[重复]

    这个问题在这里已经有答案了 我是 Android 开发新手 我想根据应用程序安装后首次运行来设置一些应用程序的属性 有什么方法可以发现应用程序是第一次运行 然后设置其首次运行属性吗 下面是一个使用的例子SharedPreferences实现
  • Facebook Android 意图

    我对这个意图有疑问 这个意图是发送文本类型的消息 一切正常 电子邮件 短信 推特以及手机上的任何内容 但唯一有问题的是facebook 它会尝试以链接而不是文本的形式发布 Intent s new Intent android conten
  • Android - 主页按钮发出什么意图?

    我想知道设备的主页按钮到底执行什么操作 即 当您单击主页按钮时会发出什么意图 意图类别和操作 回到空白的主屏幕 我想知道在单击我自己的自定义按钮时实现此操作涉及什么 谢谢 PS我知道这不是标准的 但我的设备也不是 如果您想显示主屏幕 可以通
  • 在哪里可以获得用于导入 libcore.io 的 JAR?

    我想处理一个GaiException在我的应用程序中 调试器告诉我 它位于 libcore io 包中 但导入它会产生错误 我想我需要向我的项目添加一个额外的 JAR 才能正确解析此类型 我在我的 android sdk 文件夹中进行了一些
  • jQuery mobile - 仅在侧面板关闭时才允许滚动?

    我不希望用户在任何侧边栏打开时滚动 一旦关闭 他们应该滚动 我使用了下面的代码 但它不适用于 Android 移动设备 document bind panelopen function e data body css overflow hi
  • 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

    我正在使用 Xamarin Forms 构建 iOS Android 应用程序 并有一个 TabbedPage 如果用户已经在选项卡 2 上 并且单击了选项卡 2 并且我希望刷新选项卡 2 或者运行我自己的函数 以便我可以自己刷新它 有没有
  • 使用 qbs 构建 qt 应用程序

    我想知道在 Linux 上使用 qbs 编译 构建和创建 Android Qt 应用程序的步骤 我拥有所有必要的工具 目前我可以使用 qmake 创建 apk Qbs 目前不支持构建 Qt Android 应用程序 Qbs v1 4 中引入
  • Google Place Api:来自此 Android 客户端应用程序 com.package.name 的请求被阻止

    我在用PlaceAutocompleteFragment当我单击搜索字段 PlaceAutocompleteFragment 对话框消失时 我收到此错误 errors domain global re ason forbidden mess
  • 如何检测用户是否禁用 GPS(Android - Play 服务)

    我使用 gms location LocationListener Google Play 服务 来获取用户的位置 它工作正常 但我想检测用户何时禁用或启用他 她的 GPS 就像这张照片一样 当我打开 关闭位置时 不会调用任何方法 当我切换

随机推荐