安卓+机器人 : is view of ViewPager visible to user

标签 android robotium android-testing

我正在使用 ViewPager 将 2 个 fragment 显示为选项卡。一旦加载了相应的 Activity ,两个 fragment 都会立即加载,而只有第一个 fragment 对用户可见。

因此 view.isShown() 不足以进行测试,因为此方法对于用户不可见的第二个 fragment 返回 true。

ViewAsserts.assertOnScreen(decorView, view) 似乎表现相同,因此对于解决此问题毫无用处。

我知道有人提出了一些类似的问题,但他们的答案都不能满足我的需求。那么如何测试这种行为(使用 Robotium)?

解决方案:

我根据 Leon 的建议解决了这个问题,在 fragment 中使用了一个标志,如下所示:

private static boolean isVisibleToUser = false;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    MyFragment.isVisibleToUser = isVisibleToUser;
}

public static boolean isVisibleToUser() {
    return isVisibleToUser;
}

将其实现为静态方法,我可以通过这种方式在测试中使用它:

assertTrue(MyFragment.isVisibleToUser());

这个解决方案的唯一缺点是我必须在我想以这种方式测试的每个 fragment 中实现这两种方法......有什么改进吗?

最佳答案

您可以像这样覆盖 fragment 内的setUserVisibleHint:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) { 
         //Fragment is selected in ViewPager
         //Put your "on appear" validation/loading here
    }
}

每次在 ViewPager 中显示或隐藏 fragment 时都会触发此方法。

view.isShown() 相反,此方法确实考虑了“已加载但不可见”状态。

关于安卓+机器人 : is view of ViewPager visible to user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20636382/

相关文章:

android - MutableLiveData 在 JUnitTest 中为 null

android - Android Test Orchestrator 是否生成任何测试报告?

java - 无法向 firebase 实时数据库添加权限

Android Robotium NoClassDefFoundError

android - 如何在 Android 中使用 Robotium 测试自定义 ListView 中的复选框

在没有应用程序源代码的情况下使用 espresso 进行 Android 自动化

android - 运行 adb devices 显示未经授权的设备?

android圆角元素包含其他元素

android - 如何在React原生sqlite数据库中使用upsert

Android Instrumentation 主页按钮