UiAutomator uiautomator2 ,python 脚本编写,屏幕上有可视元素,通过 weditor 查看,UI 结构层次混乱,显示的是上一次的 UI 结构,但界面正常显示,脚本无法获取指定元素,求解

weiqingsong1988 · 2018年06月13日 · 最后由 weiqingsong1988 回复于 2018年06月26日 · 1302 次阅读

uiautomator2 ,python脚本编写,屏幕上有可视元素,通过weditor查看,UI结构层次混乱,显示的是上一次的UI结构,但界面正常显示,脚本无法获取指定元素,求解
尝试:
1、重启手机
2、重启python -m uiautomator2 init
恢复一段时间,跑完一条用列,跑下一个用列时再次提示找不到元素UIObjectNotFoundError:-32002 Server error...,并且在前一条用列还可以获取该元素。
分析:
页面的切换,貌似会导致UI结构层次混乱,从而导致元素选择器获取不到指定元素,刚看uiautomator2,不熟,求用过的人解惑下,元素就是个很简单的按钮"编辑"

共收到 9 条回复 时间 点赞

感觉是页面还没加载完成就你就去查找元素了 ,加个等待试试看

谢谢你回复,页面确定已经加载完成了,所有元素都正常显示,通过weditor也是正常显示,但UI结构布局并不是当前页面的布局

测试机是米5,安卓版本7.0,不知道是否是 u2对安卓7.0的支持问题

有的界面是存在层叠关系的,不知道你是不是这种情况,如果是的话要找到实际的那个元素才行。

weditor查找不到元素的话 你怎么跑都UIObjectNotFoundError

谢谢大家了,可能没有描述清楚:
1、单个页面我专门用weditor去查看UI层次结构,显示与UI层次结构对应的,是正常的,在ipython里面单独编写脚本获取元素也正常。
2、在模拟跑脚本有多个页面切换了,切换后的页面显示了上一个页面UI层次结构,像是残留没有刷新UI层次结构一样,但图像还是显示正常的,找不到这个页面的层次结构了,在脚本中也获取不到元素。

另外在用虚拟机(genymotion 安卓6.0):
滑动失效:d.swipe(x,x,x,x),无效,真机上正常,不知道有没有人碰到?

前段时间,我直接用adb shell uiautomator dump 出来xml,再解析获取页面元素信息时,开始也经常出现找不到元素的情况,后面排查问题的时候发现是dump xml时报错导致的 (当时报错 ERROR: could not get idle state.)

建议你也排查下,确认是否是文件dump出来成功了,再开始解析,可以参考我的代码

def __uidump(self):
    """
    dump当前页面控件元素,成功才返回,否则一直重试
    :return:
    """
    while True:
        p = subprocess.Popen(
            "adb {0} shell uiautomator dump --compressed /data/local/tmp/uidump.xml".format(self.device_id),
            shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT)

        for line in iter(p.stdout.readline, ''):
            if 'UI hierchary dumped to: /data/local/tmp/uidump.xml' in line:
                # 判断dump成功后,使用return跳出循环
                logging.info(line.strip())
                return
            else:
                logging.warn(line.strip())
                time.sleep(1)
        p.wait()

thinks,这段时间有其他任务在做,后天排查看看,非常感谢😀

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册