腾讯Android自动化测试实战3.3.1 控件ID相同时获取控件

简介:
+关注继续查看

3.3 Robotium实践运用

3.3.1 控件ID相同时获取控件

实际界面中常常有一些子控件是相同ID甚至没有ID的,但这时候一般其父视图是有ID的。如图3-14所示,每个TAB的控件ID是相同的。

 

图3-14 拥有相同ID的底部TAB

因为界面中也很可能会出现多个发现、游戏这样的文本,因此也不能采取类似getText(“发现”)这样的方式。这里,我们就可以通过ID获取唯一父控件,再通过过滤方式获取指定的控件。

//先根据ID获得唯一的布局LinearLayout

LinearLayout mTabs = (LinearLayout)solo.getView("main_tabs");

//然后通过过滤方式获取该LinearLayout下的所有文本控件

ArrayList<TextView> tabs = solo

              .getCurrentViews(TextView.class,mTabs);

如果子控件的ID都是一样的,而我们仍然希望通过ID来定位控件,那么应该如何获取呢?我们知道不论是Activity类还是View类都是可以通过findViewById(int id)方法直接在控件树中根据ID来查找控件的,因此当我们获得一个父视图后,就可以通过findViewById (int id)方法根据ID来查找相应的子控件,这种方法可以普遍应用在ListView中。

//先根据ID获得唯一的布局ListView

ListView mListView = (ListView)solo.getView("example_list_id");

//先通过mListView.getChildAt(0)获取该ListView的第一个child,然后再通过该

//child在控件树中使用findViewById根据ID来获取

TextView firstListTitle = (TextView) mListView.getChildAt(0).findViewById(getId ("example_title"));

这里的重点是findViewById(int id)传进去的是int型的ID,而我们通过hierarchyviewer或uiautomatorviewer查看到的ID都是String型的,由前文的原理介绍可知,我们可以将String型的ID转换成int型的ID,如代码清单3-19所示:

代码清单3-19 将String型的ID转换成int型的ID

public int getId(String id,String packageName){

    Context targetContext = instrumentation.getTargetContext().getApplicationContext();

    int viewId = targetContext.getResources().getIdentifier(id, "id", packageName);

    LogUtils.logD("CopyOfAssistantTabActivityTest", "viewId:" + viewId);

    if(viewId == 0){

        viewId = targetContext.getResources().getIdentifier(id, "id", "android");

    }

   

    return viewId;

}

因此,当碰到同一层级控件ID相同时,可以先寻找唯一的父布局,再通过父布局寻找子控件。如果子控件结构均相同,那么可以通过index索引来查找;如果子控件结构不一致,则可以通过遍历的方式找到指定的子控件。

相关文章
|
4月前
|
缓存 Java API
#7,Android开发 控件 ProgressBar 进度条
#7,Android开发 控件 ProgressBar 进度条
|
4月前
|
Android开发
#6,Android Studio Android 开发控件 显示图片 ImageView的使用
#6,Android Studio Android 开发控件 显示图片 ImageView的使用
|
4月前
|
Android开发
Android 中SeekBar拖动条控件的基本用法
Android 中SeekBar拖动条控件的基本用法
42 0
Android 中SeekBar拖动条控件的基本用法
|
4月前
|
XML Android开发 数据格式
Android 中上拉加载更多控件效果的实现
Android 中上拉加载更多控件效果的实现
63 0
|
5月前
|
Android开发
android设置一个通用的控件,比如返回按钮
首先,我们的思路是让我们的写一个基础的Activity,让要使用通用控件的Activity继承它,代码如下:
46 0
|
5月前
|
XML Android开发 数据格式
Android开发中那些你费力写的控件,其实原生都有
实现一个开关的切换,你会怎么做,写一个layout,一半点击为开,一半点击为关,还是两张图片,点一下开,再点一下关?让你实现一个根据用户的输入弹出一个下拉菜单等等,其实都大可没有必要去自己写,本身Android里都有,下面对各个控件,我会一一举例。
|
5月前
|
Android开发
实现安卓Spinner控件hint提示效果
实现安卓Spinner控件hint提示效果
118 0
|
6月前
|
Java Android开发
关于安卓接入B站弹幕控件
关于安卓接入B站弹幕控件
68 0
|
7月前
|
Android开发 容器
Android 实现控件对称布局(约束布局和线性布局)
画界面时会遇到很多界面上的布局,虽然很简单,但是每次做起来不熟练,总结一下一些日常的
|
7月前
|
XML Android开发 数据格式
Android 防止点击下层页面的控件
Bug:由于项目使用的是单Activity,由navigation进行跳转逻辑,所以,会使用到大量的fragment,由A跳转到B,在B页面进行键盘的收起展开后,点击页面的部分位置会点击到下层的控件,这样肯定是不行的,百度了也没啥结果,于是参考了大佬的其他页面的布局属性。于是便发现了android:clickable这个属性。
热门文章
最新文章
推荐文章
更多