0

我在使用机器人时遇到了一个奇怪的问题,当我使用时,solo.getCurrentViews()我会在屏幕上看到视图。但是对于一些认为视图已加载的活动,我看不到屏幕上的视图,它们是隐藏的,需要一些用户操作来显示它们。例如,在亚马逊主屏幕中,我必须滚动浏览产品列表,初始屏幕中只显示 3 个产品。但solo.getCurrentViews()加载所有产品视图。现在,如果说我单击除了屏幕上显示的三个文本视图之外的 TextViews,我会收到错误并且应用程序退出。所以,我想我必须以某种方式检查 textview 当前是否在屏幕上可见。这适用于所有视图对象。Robotium 会加载所有视图,但单击当前不可见的视图会导致错误。

4

3 回答 3

1

Solo.getCurrentViews()返回所有视图。您可以使用:RobotiumUtils.removeInvisibleViews(solo.getCurrentViews())过滤可见视图。

或者您可以使用以下代码自行过滤可见的 TextView。

public ArrayList<TextView> getFilteredTextViews()
{
       ArrayList<TextView> textViewList = solo.getCurrentViews(TextView.class);
       ArrayList<TextView> filteredTextViewList = new ArrayList<TextView>();
        for (TextView textview : textViewList ) {
            if (textview != null && textview.isShown()) 
                        {
                filteredTextViewList .add(view);
            }
        }
        return filteredTextViewList;
}
于 2013-12-12T03:59:48.660 回答
0

只是想让你知道,我通过使用 view.isShown() 方法检查解决了这个问题。

于 2013-09-27T23:21:29.013 回答
0

您可以将每个视图转换为它的类(或 android.view 类!),然后检查它的“VISIBLE”属性。

对于文本视图:

TextView tv = (TextView) solo.getCurrentViews().get(i);
int visible = tv.VISIBLE;

0 - 在屏幕上可见;默认值。
1 - 不显示,但在布局时考虑(留有空间)。
2 - 完全隐藏,就好像没有添加视图一样。

对所有控件执行相同操作。

于 2013-09-27T13:31:08.043 回答