转载地址:http://blog.csdn.net/xiaodanpeng/article/details/11225331
们经常会遇到这种场景:一个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中的某一行的结构:
ImageView deleteImageView = (ImageView) parentView.findViewById(R.id.imageView1);
注:solo.getText(“0″)的参数为TextView显示的值,返回指定值的TextView;parentView.findViewById(R.id.imageView1)参数为删除标识控件的id,返回要找的控件。
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