我正在使用 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/