UiAutomator2.0遍历控件

使用过UiAutomator1.0的人应该有非常痛的痛点,那就是在遍历View树时非常麻烦或者说做不到,百度上找到的基本上是这么用的:

UiScrollable list = new UiScrollable(new UiSelector().resourceId("com.xxx.xxx:id/ni"));
for (int i = 0; i < list.getChildCount(); i++) {
    UiObject index0Item = list.getChild(new UiSelector().resourceId("com.xxx.xxx:id/z_").instance(i));
    index0Item.click();
}

一般是用resourceId来查找子类,如果只是用className或者instance通常找不到或者找到的并不是这个控件的子控件,如果想要在没有控件id或者统一的类名从一个控件直接获取子控件列表来遍历是做不到的,比如一个控件的子控件有FrameLayout和LinearLayout想得到children再一个一个遍历是不行的,那怎么办?这时就要使用UiAutomator2.0了,这和1.0有什么区别呢?主要是api增多了,能力也增强了,这里就讲一下如何使用2.0来遍历view树。
示例代码:

int height = 0;
//使用By创建BySelector,并用findObject返回UiObject2
UiObject2 list = mDevice.findObject(By.clazz("android.support.v7.widget.RecyclerView"));
//list.getChildren()得到子控件列表的UiObject2
for (UiObject2 child : list.getChildren()) {
    height += child.getVisibleBounds().height();
    //
    if (!child.getClassName().equals("android.widget.LinearLayout")) {
        continue;
    }
    child.click();
}
Rect r = list.getVisibleBounds();
float percent = height / (float)r.height();
//向下翻页
list.scroll(Direction.DOWN, percent);

从代码可以看出,

  • 2.0是使用BySelector做选择器,使用上并1.0更方便和简洁,而且还有更多的能力,比如可以指定查找多少层等
  • 查找控件的结果是UiObject2
  • 子控件列表可以直接使用getChildren得到

使用上就是如此的简单!所以以后都用UiAutomator2.0吧〜
不过目前也看到个小缺点,比如UiScrollable可以用scrollFarward()直接滚动到下页,2.0需要自己计算移动比例再调scroll方法来做翻页。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值