在一个Android测试中,如何检查一个视图是否显示?

4
我正在编写一个UI测试用例(使用ActivityUnitTestCase),希望检查在特定时间内用户是否可以看到View子类。我找到了View#isShown()方法,它声称可以精确地检查此元素及其所有父元素的可见性字段,但不知何故它始终对所有元素返回“false”。如果您能提供一些帮助,我将不胜感激。如果需要,我可以粘贴一些代码。
此外,我发现ViewAsserts#assertOnScreen(View origin, View view)也不似乎做正确的事情-始终返回true。我可能调用有误吗:assertOnScreen(viewImTesting.getRootView(), viewImTesting)?
谢谢, Jan

1
Ping - Android专家们 - 有什么线索? :) - Jan Żankowski
3个回答

3

我找到了一个明智的解决方法:只需检查View#getVisibility()View#VISIBLEVIEW#INVISIBLEVIEW#GONE进行比较。

当父视图不可见但此视图的可见性设置为VISIBLE时,这可能不起作用,但对于大多数情况,它应该足够。


1
谢谢。我也在使用isShown(),但对于一个没有任何子元素和明显可见的父元素的简单ImageView,结果极不一致。这个解决方案效果要好得多。 - Artem Russakovskii

0

尝试使用

final View origin = activityImTesting.getWindow().getDecorView();
android.test.ViewAsserts.assertOnScreen(origin, viewImTesting);

嗨@dtmilano,我尝试实现您的解决方案,但是找不到assertOnScreen()方法。您有任何线索吗?为什么会这样? - Andy Res
在 ViewAsserts 类中:http://developer.android.com/reference/android/test/ViewAsserts.html#assertOnScreen(android.view.View, android.view.View)。 - Diego Torres Milano

0

也许现在已经太晚了?只是为了激发@dtmilano和其他Android专家的一些回应,似乎对可见性"gone"的解释存在一些差异。

虽然visibility = gone被列为视图完全未添加的情况,但这个定义可能更接近真相。我意识到它实际上仍然在屏幕上具有X和Y坐标,但宽度和高度将为0。

当我深入研究ViewAsserts.java时,assertOnScreen()仅关注视图在原点的y坐标,确保它大于0但不超过原点的高度。

总之:如果您正在测试视图的可见性,那么assertOnScreen很可能不是正确的方法,这可能是您根据问题所做的。

希望以上信息是有用(并且正确)的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接