Robotium - 如何检查视图的可见性值

时间:2016-09-06 12:51:59

标签: android android-studio android-testing robotium ui-testing

我想检查视图是否可见,所以我在视图中使用了isShown()方法,但它没用,因为我创建自己的视图,这些视图取决于id,所以这里的示例视图:

private static final String BTN_ADD_CURRENCY_ALERT = "action_add_currency_alert";

private View btn_AddAlert() {
    return mainHelper.getView(BTN_ADD_CURRENCY_ALERT);
}

这是getView();

的主体
public View getView(String id) {
    return solo.getView(id);
}

然后我想看看这个元素是否可见(如果没有则应该返回false)。

我称之为

if (btn_addAlert().isShown()){...}

问题是,当我调用btn_addAlert()并且视图不可见时,我得到AssertionFailedError,它甚至没有进入isShown()。

我抓住了异常

private boolean catcher() {
    try {
        btn_addAlert().isShown();
        return true;
    } catch (AssertionFailedError e) {
        return false;
    }
}

但这是错误的方式,因为异常不是为了这个,而且我必须等待整个超时时间才能使它抛出异常。然后它就会返回false。

那么在这种情况下我该怎么办?

谢谢你的到来。

2 个答案:

答案 0 :(得分:0)

您可以查看

 if(v.getVisibility() == View.VISIBLE)
       // do you stuff here

答案 1 :(得分:0)

让我们说你已经在使用这种方法:

public View getView(String id) {
    return solo.getView(id);
}

检查此视图是否可见,您可以使用:

 switch (getView("R.id.button").getVisibility()) {
        case (View.VISIBLE): {
            break;
        }
        case (View.INVISIBLE): {
            break;
        }

        case (View.GONE): {
            break;
        }
        default:
            break;
    }
}

在您的确切情况下,请尝试使用btn_addAlert().getVisibility()代替getView("R.id.button").getVisibility()

希望它会有所帮助

编辑:尝试使用其中一个侦听器来检查视图的可见性是否已更改:

  • 使用ViewTreeObserver().addOnGlobalLayoutListener

       btn_addAlert().setTag(myView.getVisibility());
       btn_addAlert().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int newVis = btn_addAlert().getVisibility();
            if((int)btn_addAlert().getTag() != newVis) {
                btn_addAlert().setTag(myView.getVisibility());
                //visibility has changed
               //here you can use my "switch" statement
            }
        }
     });
    

检查:Handle a view visibility change without overriding the view

  • 使用OnSystemUiVisibilityChangeListener

    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener
        (new View.OnSystemUiVisibilityChangeListener() {
        @Override
        public void onSystemUiVisibilityChange(int visibility) {
            // Note that system bars will only be "visible" if none of the
            // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
            if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                // TODO: The system bars are visible. Make any desired
                // adjustments to your UI, such as showing the action bar or
                // other navigational controls.
            } else {
               // TODO: The system bars are NOT visible. Make any desired
               // adjustments to your UI, such as hiding the action bar or
               // other navigational controls.
            }
        }
    });
    

检查:https://developer.android.com/training/system-ui/visibility.html