Robotium - 如何检查视图的可见性值
Posted
技术标签:
【中文标题】Robotium - 如何检查视图的可见性值【英文标题】:Robotium - How to check view's visibility value 【发布时间】:2016-09-06 12:51:58 【问题描述】:我想检查视图是否可见,所以我在视图上使用了 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。
那么在这种情况下我该怎么办?
先谢谢了。
【问题讨论】:
【参考方案1】:你可以检查一下
if(v.getVisibility() == View.VISIBLE)
// do you stuff here
【讨论】:
我觉得他的问题比较复杂。这不仅仅是如何找到函数“isShown”。 btn_addAlert() - 这就是问题所在。它不会改变什么,因为 getVisibility() 不会被强制转换。【参考方案2】:假设您已经在使用这种方法:
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
【讨论】:
这只是下面答案的切换版本。我想做一些事情,直到视图可见,所以使用 while 循环,但如果视图不可见,它不会返回 false 并跳过循环。它会抛出异常并将我的测试标记为失败。当我 getView 并且视图不可见时它会崩溃,因为它正在搜索它,它已经消失了,所以它抛出了一个异常。 不。下面的人使用的是神秘的v
,我使用的是直接的Robotium
代码,所以这不相等。不要在目的是听众的地方使用循环以上是关于Robotium - 如何检查视图的可见性值的主要内容,如果未能解决你的问题,请参考以下文章
如何将图像视图的可见性设置为 Spinner 所选项目的可见性