您的位置:首页 > 移动开发 > Android开发

Android自动化测试—获取、区分具有相同Id的多个控件

2013-09-06 15:16 1286 查看
们经常会遇到这种场景:一个Activity什么存在多个相同的控件(id也相同)如下图所示,界面显示的是一个ListView,它每一行的删除标识其实是同一个控件,那么如何区分它们?



类似这种场景下Solo类的getView(R.id.?)或者Activity的findViewById(R.id.?)方法在自动化测试中就不适合使用。

思路:当控件都是一样的情况下去寻找能够区别它们的东西,例如ParentView(要找的控件对应的父布局)和index(控件位置),这里我们选择利用ParentView去定位要找的控件。

首先找到删除标识对应的ParentView然后调用ParentView的findViewById(R.id.?)即可,那么下面我们面临的问题就是如何找到指定的ParentView,首先看一下布局。

利用tools下面的工具hierarchyviewer.bat查看布局,如下图的映射关系。

ListView中的某一行:




ListView中的某一行的结构:




•Parentview:LinearLayout
•ChildView :ImageView
TextView
其中ImageView就是我们要找的删除标识,注意和Image同级的还有一个TextView,LinearLayout是ImageView的父布局。
这里根据此场景讲两种获取Parentview(LinearLayout)的方法。
方法1:利用同级的具有唯一性的TextView指定它们的ParentView,再通过父布局查找删除标识。

1
2

LinearLayout parentView = (LinearLayout) solo.getText("0").getParent();
ImageView deleteImageView = (ImageView) parentView.findViewById(R.id.imageView1);

注:solo.getText(“0″)的参数为TextView显示的值,返回指定值的TextView;parentView.findViewById(R.id.imageView1)参数为删除标识控件的id,返回要找的控件。

方法2:首先找到指定的ListView再通过其方法获得ParentView,再通过父布局操作删除标识。

1
23

ListView listView = solo.getCurrentListViews().get(0);
LinearLayout parentView = (LinearLayout) listView.getChildAt(0);
ImageView deleteImageView = (ImageView) parentView.findViewById(R.id.imageView1);

注:solo.getCurrentListViews().get(0)的参数表示当前Acticity中的ListView的位置,返回指定位置的ListVIew;listView.getChildAt(0)的参数表示列表的某一行,返回的是列表项即我们要找的ParentVIew。

总结:通过上述的方法就可以准确的地位、区别具有相同id的多个控件,这种场景在实际自动化测试过程中经常遇到的,虽然可能有些许差别,但是原理基本相同。

请问对自定义的ListView怎么操作呢?

http://www.robotium.cn/archives/661
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: