public class ViewAssertions {
public static ViewAssertion doesNotExistOrGone() {
return new ViewAssertion() {
@Override
public void check(View view, NoMatchingViewException noView) {
if (view != null && view.getVisibility() != View.GONE) {
assertThat("View is present in the hierarchy and not GONE: "
+ HumanReadables.describe(view), true, is(false));
}
}
};
}
}
fun isNotPresented(): ViewAssertion = object : ViewAssertion {
override fun check(view: View?, noViewFoundException: NoMatchingViewException?) {
if (view != null) {
if (view.visibility != View.VISIBLE) {
return
}
var searchView: View = view
while (searchView.parent != null && searchView.parent is View) {
searchView = searchView.parent as View
if (searchView.visibility != View.VISIBLE) {
return
}
}
assertThat<Boolean>(
"View is present in the hierarchy and it is visible" + HumanReadables.describe(view),
true,
`is`(false)
)
}
}
}
4条答案
按热度按时间3npbholx1#
如果你想检查一个视图是否在层次结构中不存在,请使用下面的Assert。
如果你想检查一个视图是否存在于层次结构中,但没有显示给用户,请使用下面的Assert。
希望这能帮上忙。
s5a0g9ez2#
我也遇到了同样的问题,我的一个视图最初没有特定的视图,但可以添加它并在以后隐藏它。UI的状态取决于后台活动是否被破坏。
我最后只是写了doesNotExist实现的一个变体:
pb3s4cty3#
not(isDisplayed)
并不完美,因为视图可能会显示在ScrollView中的屏幕下方。简单的检查
view.getVisibility() != View.GONE
也不是100%的解决方案。如果视图父视图被隐藏,视图实际上被隐藏,所以测试应该通过场景。我建议检查视图及其父视图是否可见:
ukxgm1gy4#
我也遇到过类似的情况,我相信这个方法是有效的,我会检查显示的视图不存在,需要不显示或者不在视图层次结构中: