博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
腾讯Android自动化测试实战3.3.1 控件ID相同时获取控件
阅读量:5743 次
发布时间:2019-06-18

本文共 1536 字,大约阅读时间需要 5 分钟。

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索引来查找;如果子控件结构不一致,则可以通过遍历的方式找到指定的子控件。

转载地址:http://spszx.baihongyu.com/

你可能感兴趣的文章
CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)
查看>>
高级智能研究计划(IARPA):大脑皮层建模
查看>>
如何把返回的对象以及对应的数据保存到二维数组
查看>>
图像处理基础(7):图像的灰度变换
查看>>
Android学习笔记(27):日历视图Calendar
查看>>
hdu 1789 Doing Homework again 贪心
查看>>
Perl模块管理
查看>>
jsplumb 中文教程
查看>>
一起谈.NET技术,ASP.NET缓存初探 使用得当是关键
查看>>
一段c++代码小例子
查看>>
Matlab的XTickLabel中数值带下标
查看>>
Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
查看>>
由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
查看>>
没有可用于当前位置的源代码 解决办法
查看>>
一步一步理解Ajax(二)
查看>>
【C#】如何在listview中插入图片
查看>>
分享10个jQuery页面动态编辑插件
查看>>
PDF加密、解密、破解和转换软件
查看>>
我所知道的CallbackContract in WCF
查看>>
【CSS3初探之盒相关样式】我们一人一个框。。。
查看>>