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

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

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

共收到 11 条回复 时间 点赞

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

谢谢你回复,页面确定已经加载完成了,所有元素都正常显示,通过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,这段时间有其他任务在做,后天排查看看,非常感谢😀

求问这个问题怎么解决的?

这个问题我也遇到过,尝试过两种解决办法,你们也可以试试:
1.修改:UIAutomatorServer中click_post_delay=2.0 # wait after each click
就是在点击操后等上2秒,等待元素完全加载再进行下面的操作。
2.按下返回,进入上个界面,再进入该界面。(不通过,因为有些界面跳转逻辑并不支持A—>B,B—>A。)

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