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

转载地址:http://blog.csdn.net/xiaodanpeng/article/details/11225331

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

device-2012-08-08-113615

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

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

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

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

ListView中的某一行:

20120808142324

ListView中的某一行的结构:

20120808143202

•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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值