java espresso_java-Espresso-如何检查是否显示了其中一个视图

允许检查视图是否为visibility、isAttachedToWindow或alpha的实用程序类:

public class ExtraAssertions {

public static ViewAssertion isVisible() {

return new ViewAssertion() {

public void check(View view, NoMatchingViewException noView) {

assertThat(view, new VisibilityMatcher(View.VISIBLE));

}

};

}

public static ViewAssertion isGone() {

return new ViewAssertion() {

public void check(View view, NoMatchingViewException noView) {

assertThat(view, new VisibilityMatcher(View.GONE));

}

};

}

public static ViewAssertion isInvisible() {

return new ViewAssertion() {

public void check(View view, NoMatchingViewException noView) {

assertThat(view, new VisibilityMatcher(View.INVISIBLE));

}

};

}

private static class VisibilityMatcher extends BaseMatcher {

private int visibility;

public VisibilityMatcher(int visibility) {

this.visibility = visibility;

}

@Override public void describeTo(Description description) {

String visibilityName;

if (visibility == View.GONE) visibilityName = "GONE";

else if (visibility == View.VISIBLE) visibilityName = "VISIBLE";

else visibilityName = "INVISIBLE";

description.appendText("View visibility must has equals " + visibilityName);

}

@Override public boolean matches(Object o) {

if (o == null) {

if (visibility == View.GONE || visibility == View.INVISIBLE) return true;

else if (visibility == View.VISIBLE) return false;

}

if (!(o instanceof View))

throw new IllegalArgumentException("Object must be instance of View. Object is instance of " + o);

return ((View) o).getVisibility() == visibility;

}

}

}

使用情况如下所示:

onView(withId(R.id.text_message)).check(isVisible());

另一个视图声明可以帮助检查视图及其父视图的额外可见性:它检查visibility、isAttachedToWindow、alpha:

class IsVisible : ViewAssertion {

override fun check(view: View, noViewFoundException: NoMatchingViewException?) {

ViewMatchers.assertThat(

"View is not visible. " +

"visibility: ${view.visibility}, " +

"isAttachedToWindow: ${view.isAttachedToWindow}, " +

"alpha: ${view.alpha}",

true, `is`(isViewTreeVisible(view)))

}

private fun isViewTreeVisible(view: View?): Boolean {

return if (view != null) {

val viewVisible = view.isAttachedToWindow && view.visibility == View.VISIBLE && view.alpha == 1.0f

if (view.parent !is View) viewVisible

else viewVisible && isViewTreeVisible(view.parent as View)

} else {

true

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值