A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

网上对于UiAutomator大都是简单demo的讲解,许多实用的技巧没有贴出来。今天介绍几个自己琢磨出来的技巧

1.android.widget.ListView控件的子元素遍历

对于一些列表控件,比如“设置”项里的每一行,都是ListView的子项,有时候需要遍历这些元素进行点击。举个例子,如下图:



我想打开蓝牙,但是必须点击右边的switch按钮才行,怎样才能找到这个按钮呢?直接用控件类别肯定不行,因为有多个switch控件。那找“蓝牙”文本,可也不行,你找到的只是文本控件,点击只是点击在文本上,switch按钮并不会被点击。最好的办法就是能找到每一行的控件,然后看这一行有没有包含“蓝牙”文本的控件,如果有,则查找switch控件,进行点击即可。问题就回到了如何遍历这个ListView。仔细看官方文档里的函数,找到这两个:





第一个函数时返回一个UiObject子元素的个数,第二个通过序号来遍历子元素。注意,这两个函数都是对于当前能看到的元素而言的,看不到的是不算在内的。也就是说,如果子元素有20个,但当前只能看到10个,那第一个函数就返回10.而第二个函数是从当前视线中1。。。10进行遍历。(在测试的过程中,发现第二个函数并不准确,可能只遍历到第7个的时候就认为遍历完了,因此如果有需要可以想其他办法优化这个地方)。下面贴代码:

UiScrollable functionItems = null;
functionItems = new UiScrollable(new UiSelector().className("android.widget.ListView"));
int nIndex = 0;
for(nIndex = 0; nIndex < functionItems.getChildCount(); nIndex++) {
    UiObject apps = null;
    try {
        apps = functionItems.getChildByInstance(new UiSelector().className("android.widget.LinearLayout"), nIndex);
    } catch(UiObjectNotFoundException e) {}  
    if(apps == null || !apps.exist()) {
        continue;
    }
    try {
        lanya= apps.getChild(new UiSelector().text("蓝牙"));
    } catch(UiObjectNotFoundException e) {}  
    if(lanya == null || !lanya.exist()) {
        continue;
    }
    UiObject checkBox = null;
    try {
        checkBox = apps.getChild(new UiSelector().className("android.widget.CheckBox"));
    } catch(UiObjectNotFoundException e) {}
    if(checkBox != null && checkBox.exists() && checkBox.isChecked()) {
        checkBox.click();
    }
    UiObject switchCheck = null;
    try {
        switchCheck = apps.getChild(new UiSelector().className("android.widget.Switch"));
    } catch(UiObjectNotFoundException e) {}            
    if(switchCheck != null && switchCheck.exists() && switchCheck.isChecked()) {
        switchCheck.click();
    }
}
这里需要注意的是,一定要手动捕获异常。test函数是抛出异常的,但是,如果在找控件的过程中没有找到,会直接抛出异常,中断程序。对于遍历,找不到很正常,我们不希望程序中断。因此我们要再用try捕获异常,而且每次都要判断是否是null,不判断的话,一旦为null,程序立即退出。
---------------------
转载,仅作分享,侵删
作者:吹成狗的攻城狮
原文:https://blog.csdn.net/yongshi6/article/details/51040002


1 个回复

倒序浏览
奈斯,加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马