uiautomator中UiObject中getChildCount和getChild方法解惑
来源:互联网 发布:javascript与node.js 编辑:程序博客网 时间:2024/06/11 01:21
问题描述
getChildCount得到的子节点数是当前节点的下一层的控件数,不包括子节点的子节点。但是用getChild(UiSelector)中遍历控件的时候,把当前节点的子子孙孙全部遍历一遍。那我就想遍历当前节点的子节点,怎么办?可以传ClassName进去进行筛选,但是有可能其他手机的每一列并不是又linearLayout来布局的。所以最好的方法,是一instance遍历。忽略它是那种className,直接以编号获得。
实战
我要遍历下面图片所示的界面里的列表里的元素,挨个点击。
public void test_DesktopEffects() throws UiObjectNotFoundException {uiDevice = getUiDevice();width = uiDevice.getDisplayWidth();height = uiDevice.getDisplayHeight();enterMenu(uiDevice, ValueUtil.DESKTOPEFFECT);UiScrollable list = UiUtil.findScrollableByClass(WidgetUtil.LISTVIEW);int count = list.getChildCount();Log.i(TAG, "count: " + count);for (int i = 0; i < count; i++) {UiObject child = list.getChild(new UiSelector().instance(i));Log.i(TAG, "i: " + i + ", " + child.getBounds().toString());child.clickAndWaitForNewWindow();uiDevice.pressHome();Random random = new Random();// 测试时使用1次循环,正式使用时,改为10次for (int j = 0; j < 1; j++) {int index = random.nextInt(2);if (index == 0) {uiDevice.swipe(width - 48, height / 2, 48, height / 2, 10);} else {uiDevice.swipe(48, height / 2, width - 48, height / 2, 10);}}if (i < count - 1) {enterMenu(uiDevice, ValueUtil.DESKTOPEFFECT);}}uiDevice.pressHome();}
打印的log:
04-19 14:48:45.622: I/Idle(5001): count: 704-19 14:48:46.162: I/Idle(5001): i: 0, Rect(38, 210 - 502, 306)04-19 14:48:52.288: I/Idle(5001): i: 1, Rect(62, 230 - 397, 285)04-19 14:48:58.795: I/Idle(5001): i: 2, Rect(62, 239 - 197, 276)04-19 14:49:05.731: I/Idle(5001): i: 3, Rect(397, 210 - 487, 306)04-19 14:49:14.029: I/Idle(5001): i: 4, Rect(397, 210 - 487, 306)04-19 14:49:20.276: I/Idle(5001): i: 5, Rect(397, 210 - 487, 306)04-19 14:49:26.572: I/Idle(5001): i: 6, Rect(38, 307 - 502, 403)
从log可以看出,程序遍历了第一个子元素下面的子元素。且从脚本运行结果来看,都没有完全遍历所有子元素。虽然getChildCount得到了数量,但是真正的对象我们却无法得到,所以很疑惑google设计初衷。
修改一些代码叫获取元素的方法改为如下:
UiObject child = list.getChild(new UiSelector().clickable(true).instance(i));
运行程序打印Log:
04-19 15:46:53.485: I/Idle(6648): count: 704-19 15:46:54.025: I/Idle(6648): i: 0, Rect(38, 210 - 502, 306)04-19 15:46:59.711: I/Idle(6648): i: 1, Rect(38, 307 - 502, 403)04-19 15:47:06.417: I/Idle(6648): i: 2, Rect(38, 404 - 502, 500)04-19 15:47:14.535: I/Idle(6648): i: 3, Rect(38, 501 - 502, 597)04-19 15:47:21.172: I/Idle(6648): i: 4, Rect(38, 598 - 502, 694)04-19 15:47:29.790: I/Idle(6648): i: 5, Rect(38, 695 - 502, 791)04-19 15:47:36.256: I/Idle(6648): i: 6, Rect(38, 792 - 502, 888)
现在点击的点才是正确的。加一个clickable(true),而且控件可点击在每一个listview里的每一个元素都必须要可点击。而且google也要求相互重叠的元素可点击是唯一的。这样才能好确认焦点。所以这个问题就算解决了
0 1
- uiautomator中UiObject中getChildCount和getChild方法解惑
- Android UiAutomator UiObject API
- UIAutomator之---UiObject
- UiObject中中文输入问题
- PB中关于GetChild的用法
- uiautomator中的UiObject学习笔记
- UiAutomator(3)--UiObject API
- uiautomator测试中scrollForward方法使用失灵
- uiautomator中一些常用的方法
- Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
- Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
- Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
- Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
- Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
- Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
- uiautomator中的UiObject学习笔记(2)
- Android自动化测试(UiAutomator)——UiObject
- uiautomator中的UiObject学习笔记(2)
- 每个人的触屏方式可用作密码保护设备
- node.js 事物处理 mysql
- AnyGantt Flash甘特图组件
- myecliple 10 SSH环境快速打架
- Android 进程间通信之AIDL service
- uiautomator中UiObject中getChildCount和getChild方法解惑
- 游戏日志数据入库总结
- android 根据联系姓名获取电话号码
- 回溯法(DFS思想)
- Quartz cron 表达式的格式和写法
- VMware虚拟机安装WinXP出现错误output error file to the following location A:\GHOSTERR.TXT
- [整理]VS2010中文版配置opencv2.4.8
- 中国许多地方需学习日本 应珍惜中日友好
- javaj基础小知识卡片1