Android自动化测试—获取、区分具有相同Id的多个控件
2014-04-11 10:18
597 查看
转载地址:/article/9513776.html
们经常会遇到这种场景:一个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,再通过父布局查找删除标识。
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,再通过父布局操作删除标识。
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
们经常会遇到这种场景:一个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,再通过父布局查找删除标识。
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,再通过父布局操作删除标识。
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
相关文章推荐
- Android自动化测试—获取、区分具有相同Id的多个控件
- android robotium获取相同id的的控件
- android robotium获取相同id的的控件
- android robotium获取相同id的的控件
- android robotium获取相同id的的控件
- android robotium获取相同id的的控件
- android 根据控件的ID字符串利用反射获取UI控件
- android 自动化测试 二 根据id选择控件操作
- 获取相同name 不同id 的input控件
- android问题:控件id不能在R.java里自动创建,导致在Activity中无法获取控件
- android 下动态获取控件的id
- Android 通过resource名称或者layout中定义的id name 去获取R.java中id,得到控件
- android 动态获取控件的ID
- uiautomator中相同控件名该如何获取想要的控件,instance(0)区分布局一样的控件
- 找到多个具有相同 ID“_header”的控件。FindControl 要求控件具有唯一的 ID。错误的解决方法!
- android 下动态获取控件的id
- ASP.NET异常:找到多个具有相同ID"xxx"的控件。FindControl要求控件具有唯一的ID
- android换肤功能中,如何动态获取控件中背景图片的资源id?
- Android自定义Dialog弹窗获取Dialog中的控件ID
- 初学Android中用id来进行xml中的控件获取