腾讯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索引来查找;如果子控件结构不一致,则可以通过遍历的方式找到指定的子控件。
相关文章
- 制作QQ微信支付宝三合一收款码
- 前端自动化测试:Jest 测试框架应用
- Android编程开发之性能优化技巧
- Android面试被问到内存泄漏了杂整?
- Vite 的插件机制:插件应用和基本使用
- 号称能让开发者告别996,低代码火了,真神器还是伪风口
- 微信开放接口getUserInfo、login、getUserProfile的爱恨情仇?
- 2021 年加速开发的 8 个优秀跨平台框架
- 终于有人把SaaS讲明白了
- 【深入Node探究】(1)“Node特点与应用场景” 有四问
- 后国安局监控时代,用户最需要的体验是掌握隐私的自由
- 函数式编程在Redux/React中的应用
- 用C语言对Gtk+应用进行功能测试
- Flutter Vs React Native:这是2021的优秀选择?
- 最新TIOBE编程语言排行:C语言第一,Python反超Java,挤进第二
- 日常Bug排查-消息不消费
- Xcode与Android Studio:哪个更好?
- Flask中的请求上下文和应用上下文
- 低代码选型的7个关键点
- 别让引入的 SDK 和第三方库导致您应用被下架!