使用 Android Espresso 从仅包含图标的 TabLayout 中单击 Tab 后检查片段可见性

2023-12-13

我正在尝试从已使用视图寻呼机设置的 tabLayout 中单击选项卡后检查我的片段是否可见。

这是我的实际活动代码,位于我的活动 onCreate 方法中:

mViewPager = findViewById(R.id.contentFrameLayout);
mViewPager.setAdapter(mSectionPageAdapter);
mViewPager.setPagingEnabled(false);

//Set up the tab layout to display tabs
tabLayout = findViewById(R.id.homeTabs);
tabLayout.setupWithViewPager(mViewPager);

for (int i = 0; i< tabLayout.getTabCount(); i++) {
        TabLayout.Tab mTab = tabLayout.getTabAt(i);
        if (mTab != null) {
            switch (i){
                case 0:
                    mTab.setTag(WFragment.class.toString());
                    mTab.setIcon(R.drawable.home_icon_svg);
                    break;
                case 1:
                    mTab.setTag(MFragment.class.toString());
                    mTab.setIcon(R.drawable.l_svg);
                    break;
                case 2:
                    //etc..
            }
        }
    }

这是我的仪器测试:

@Test
public void checkIfMFragmentIsVisible() {
    Matcher<View> matcher = allOf(withTagValue(is((Object) MFragment.class.toString())),
            isDescendantOfA(withId(R.id.homeTabs)));
    onView(matcher).perform(click());
    onView(withId(R.id.mFragmentLayout)).check(matches(isCompletelyDisplayed()));
}

我使用的信息来自this链接帮助我开始创建匹配器并执行单击。但是,我的测试失败并出现以下错误:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: (with tag value: is "class com.test.solution.fragments.MFragment" and is descendant of a: with id: 2131296345)
If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:com.google.maps.api.android.lib6.impl.ce{d55b63a G.ED..C.. ......I. 0,0-0,0}

成功的仪器测试:

我通过添加以下内容尝试了虚拟测试我的活动中的选项卡:

TabLayout.Tab mTab = tabLayout.getTabAt(i);
            if (mTab != null) {
                switch (i){
                    case 0:
                        mTab.setText("case 0");
                        //etc..
                    case 1:
                        mTab.setText("case 1");
                        //etc..
                    case 2:
                        //etc..

在我的仪器测试中:

@Test
public void checkIfMFragmentIsVisible() {
    Matcher<View> matcher = allOf(withText("case 1"),
                isDescendantOfA(withId(R.id.homeTabs)));
        onView(matcher).perform(click());
        onView(withId(R.id.mFragmentLayout)).check(matches(isCompletelyDisplayed()));
}

该测试成功,但是,我不想在我的活动中使用文本,但我想使用标签或其他东西。


我的测试通过执行以下操作:

我在下面创建一个 id 文件分辨率/值 named ids.xml我在其中创建了以下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tab_h_id" type="id"/>
    <item name="tab_m_id" type="id"/>
</resources>

然后在我的实际活动我在我的下面添加了以下内容Tablayout:

for (int i = 0; i< tabLayout.getTabCount(); i++) {
        TabLayout.Tab mTab = tabLayout.getTabAt(i);
        if (mTab != null) {
            switch (i){
                case 0:
                    View tabViewH = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(i);
                    tabViewH.setId(R.id.tab_h_id); //assigning id for tab view for Espresso testing
                    mTab.setIcon(R.drawable.home_icon_svg);
                    break;
                case 1:
                    View tabViewM = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(i);
                    tabViewM.setId(R.id.tab_m_id); //assigning id for tab view for Espresso testing
                    mTab.setIcon(R.drawable.l_svg);
                    break;
                case 2:
                    //etc..
            }
        }
    }

然后在我的浓缩咖啡测试我在用着withId代替withTagValue:

@Test
public void checkIfMFragmentIsVisible() {
    Matcher<View> matcher = allOf(withId(R.id.tab_m_id),
            isDescendantOfA(withId(R.id.homeTabs)));
    onView(matcher).perform(click());
    onView(withId(R.id.mFragmentLayout)).check(matches(isCompletelyDisplayed()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Android Espresso 从仅包含图标的 TabLayout 中单击 Tab 后检查片段可见性 的相关文章

随机推荐

  • R-向 PDF 添加页码

    我在向 PDF 添加页码时遇到问题 这是我插入页面 绘图的方法 pdf file pdfFilePath width 11 height 8 5 for grid newpage pushViewport viewport layout g
  • 从 Google 表格调用时 getOAuthToken 返回 null

    我正在研究一种方法 通过 oAuth 规范和 AWS API 网关调用来限制特定用户的某些 Google 表格 但我遇到了一个问题ScriptApp getOAuthToken 功能 当我使用 Google Apps 脚本调试器运行代码时
  • 动态背景(在 LinearLayout 上)-我的错误是什么?

    我有一个问题 我试图让我的应用程序背景根据计时器每十秒改变一次 我已经做了我能做的 但无法解决它 因为我是 java 和编程的初学者 我如果有人可以纠正我的代码 我会很高兴 我可以将它打包到手机等中 Eclipse不会显示错误 但当计时器开
  • 为什么Unity3D中相机绕z轴旋转?

    我有一个主摄像头在 Unity3D 中 我想根据鼠标输入进行旋转 因此它可以作为第一人称视频游戏 您可以根据要查看的位置移动鼠标 相机的起始值 Unity 中 检查器 选项卡中的 变换 选项卡 为 Position X 1 Y 1 Z 11
  • 将“facet_grid”从多面画布上拉开?

    考虑以下示例 ggplot2 facet grid p lt ggplot mpg aes displ cty geom point p facet grid vars drv vars cyl Which results in the f
  • Safari 应用扩展未安装

    仅供参考 我对 XCode 开发完全陌生 我有一个 Safari 应用程序扩展项目 如果我从 XCode 中运行它 它会将我的扩展添加到 Safari 中 如果我创建存档 导出并选择 导出开发签名应用程序 我可以获取生成的文件 将其安装在另
  • 使用 FileMapping 传递 _EXCEPTION_POINTERS * 时遇到问题

    我想做一个进程外异常处理程序 并且创建了一个看门狗进程 当子进程引发异常时 它会进行专门的异常处理 我已经通过事件成功调用了看门狗进程 我面临的问题是在尝试将异常信息指针传递给其他进程时 我降落在这里将指针传递给由 exec 生成的进程并了
  • 在 Objective-C 中转发声明协议

    我的类 h 看起来像 protocol AppInfoDelegate class InfoTextView interface AppInfoViewController UIViewController
  • 是否可以通过JavaScript检测插件是否激活?

    这样我通常会检测插件 例如Flash播放器 for var el in navigator plugins if navigator plugins el name navigator plugins el name toLowerCase
  • 批量创建文件夹列表:无法回显重音字符

    我使用此批处理指令生成不包含 zip 文件的每个子目录的列表 echo off for d r f in do if not exist f zip echo f gt gt G backup folders txt 问题是这会生成一个列表
  • 防止浏览器在提交表单时跳转到首页

    我试图防止用户提交表单时页面跳转到顶部 有很多人建议return false 但是 它也阻止了表单的提交 我想知道是否有人可以帮助我 JQuery submit click function doesn t work return fals
  • 收据打印机 - 从网页打印

    我有一台收据打印机 它连接到我的计算机上的串行 COM1 我正在尝试从网页打印收据 当打印时 它只是一个空白 没有任何文本 空白收据 它在 IE8 上工作正常 但在 Firefox 3 6 上不起作用 我有一台 Epson TM T88II
  • Stream.Seek(0, SeekOrigin.Begin) 或 Position = 0

    当您需要将流重置为开始时 例如MemoryStream 是使用的最佳实践 stream Seek 0 SeekOrigin Begin or stream Position 0 我发现两者都工作得很好 但想知道其中一个是否比另一个更正确 U
  • 将带有内部链接的 Excel 转换为 pdf

    我正在尝试将带有内部链接 即指向同一 Excel 中不同位置的链接 的 Excel 转换为 pdf 我已经浏览了网上关于这方面的几篇文章 但似乎找不到任何适当的解决方案来进行这种转换 提供的解决方案主要适用于外部超链接 而不适用于内部超链接
  • 如何发出帖子请求来创建新用户

    我正在使用react chat engine 创建一个聊天应用程序 一切都运转良好 除了我不知道如何发出帖子请求来创建新用户这一事实 这是我的代码 const handelSubmit async e gt e preventDefault
  • eclipse无需jdk运行程序

    为什么我们不需要安装jdk就可以在eclipse中编译执行java程序呢 jre安装就足够了 但是在从cmd运行代码时我们需要安装jdk eclipse 是否附带任何替代 javac 我尝试在 eclipse 文件夹中搜索 javac 但没
  • 如何使用带参数的嵌套命令创建 Git 别名?

    在我的点文件中 我有以下有效的函数 function undelete git checkout git rev list n 1 HEAD 1 1 我这样使用 undelete path to deleted file txt 我想确定这
  • 查找列表中的第一个元素和索引匹配条件

    考虑这个简单的例子 mylist 1 2 3 4 5 6 for idx el in enumerate mylist if el gt 0 myidx myel idx el break myidx myel Out 20 2 3 我感兴
  • SQL Server 获取前三条记录的值并按每人一行显示

    我试图将一个人的前三行的值全部显示在一行中 我的数据如下所示 id co number client no Client name taken date taken value 270103 12 1111 John Doe 6 7 11
  • 使用 Android Espresso 从仅包含图标的 TabLayout 中单击 Tab 后检查片段可见性

    我正在尝试从已使用视图寻呼机设置的 tabLayout 中单击选项卡后检查我的片段是否可见 这是我的实际活动代码 位于我的活动 onCreate 方法中 mViewPager findViewById R id contentFrameLa