iOS UI自动化 当执行次数增多后页面元素定位变慢的原因

这段时间在跑iOS UI 自动化的时候,发现一个问题,在执行50次之后页面元素查找速度变得很慢,3分钟都找不到。

业务场景是这样的,在进入实时视频页面后,测试代码开始处理业务日志,从沙盒目录中捞取app日志中的不同节点,并把对应的时间记录在excel中,处理完成后,app上需要点击左上角的返回按钮,回到首页。就是这个返回按钮,在执行50次左右后元素查找开始变得很慢,经常3分钟超时失败。

这里使用的元素定位方法是iOS最推荐的ACCESSIBILITY_ID

python 复制代码
el = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value=PLAY_BACK_ICON)

当时的情况是:停留在实时视频页面后,会收到若干条push通知,push通知在页面顶端的停留时间不会太长,几秒钟后会自动消失,并不会长时间遮挡左上角的返回按钮,所以并没有把它当作主要原因考虑,没有在意,开始想别的解决方法,

1、写了屏幕右滑手势退出当前页面的方法,调试后可以使用,能够解决这个问题;

2、后来又试了一下,把设备单独绑在一个账号下,排除push通知干扰,其他不变,又尝试了一遍;

没想到第二个方法管用了,repeat=300次,每次都找到了返回按钮,现在逆向推导一下原因,虽然push通知没有长时间遮挡返回按钮,但貌似是涉及到了 UI层级 动态更新什么的问题,这块有所了解,但不多,我查了一些资料:

【什么是 UI 层级树?】

在 iOS 应用中,UI 层级树(UI hierarchy)是系统用来描述当前屏幕上所有 UI 元素的结构。每当页面加载、元素更新或动态内容出现(如 Push 通知)时,层级树会发生变化。Appium 通过调用 iOS 的 Accessibility API 来获取和解析这个层级树,从而找到目标元素。

【Push 通知如何干扰 UI 层级树?】

Push 通知出现时的影响:

当 Push 通知出现,系统会在层级树顶部新增一个节点表示通知内容。

iOS 系统需要重新生成层级树,Appium 也会重新解析这棵树。

如果通知内容复杂(如图片、动态文字),层级树会变得更大、更复杂,解析耗时增加。

Push 通知消失时的影响:

通知消失时,系统会再次更新层级树,删除相关节点。

Appium 再次需要重新获取和解析当前页面的层级树。

频繁的层级树重建

如果 Push 通知频繁出现和消失,层级树将不断被更新,导致 Appium 查找元素时每次都需要重新加载最新的层级结构。

【为什么 Push 通知干扰返回按钮的定位?】

动态内容优先级

iOS Accessibility API 默认优先处理动态内容(如 Push 通知)。当通知出现时,Appium 的元素查找可能被动态内容"打断",需要等通知更新完成后才能继续解析。

层级树深度变化

如果 Push 通知插入到层级树的顶部或中间,可能导致原本浅层的返回按钮被推到更深层次。

Appium 查找元素的效率会随着层级树深度的增加而显著下降。

重复解析消耗时间

每次通知出现或消失,层级树都会被重建,Appium 每次都需要重新获取完整的层级结构,即使返回按钮的位置没有改变。

【总结】

这个问题的解决并不是在最开始了解问题的原因,而是在尝试中找到了方法,并总结了原因。学习的过程就是不断尝试-总结的过程,跟大家一块儿学习分享。

相关推荐
吾日三省吾码10 小时前
Python 脚本:自动化你的日常任务
数据库·python·自动化
遇见火星12 小时前
自动化发布工具CI/CD实践Jenkins常用工具和插件的使用
运维·ci/cd·自动化·jenkins·自动化发布
鸿蒙布道师16 小时前
鸿蒙NEXT开发对象工具类(TS)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
刘小哈哈哈17 小时前
封装了一个iOS多分区自适应宽度layout
macos·ios·cocoa
Blossom.11818 小时前
边缘计算:工业自动化的智能新引擎
人工智能·5g·自动化·边缘计算·database·兼容性·5g通讯
eqwaak019 小时前
量子计算与AI音乐——解锁无限可能的音色宇宙
人工智能·爬虫·python·自动化·量子计算
软件测试曦曦21 小时前
如何使用Python自动化测试工具Selenium进行网页自动化?
自动化测试·软件测试·python·功能测试·测试工具·程序人生·自动化
布多1 天前
Tagged Pointer:苹果工程师的内存优化艺术
ios·源码
Rudon滨海渔村1 天前
新旧iPhone相册复制 - 相册图片视频对拷 - 换机 - 迁移设备数据 - 免费开源爱思助手
ios·iphone
电气外传1 天前
Share02-小小脚本大大能量
程序人生·自动化