使用Appium测试iOS应用时如何获取XCUIElementTypeImage的图片资源名
核心原因
Appium 基于苹果官方的 XCUITest 框架实现 iOS 自动化,XCUITest 默认不会暴露 UIImage 对应的 asset 资源名作为控件属性,所以你在页面 XML 里找不到 image、src 这类属性是正常现象。
可行解决方案
- 方案1:端侧配合暴露资源名(最稳定,优先推荐)
你当前 XML 里控件的accessible属性为false,首先需要在 Xcode 里把该 UIImageView 的isAccessibilityElement属性设为true。
然后在业务代码中,每次给 UIImageView 赋值图片时,同步把当前使用的 asset 名写入控件的accessibilityValue属性,Swift 代码示例:
之后你在 Appium 中获取该元素的yourImageView.image = UIImage(named: "target_asset_name") // 同步写入资源名到辅助功能属性 yourImageView.accessibilityValue = "target_asset_name"value属性,就能直接拿到当前加载的图片资源名。 - 方案2:图像比对间接判断(不需要改端侧,适合无法修改应用代码的场景)
提前把该控件所有可能出现的图片资源导出为基准图,在测试步骤中截取当前 UIImageView 控件的截图,和基准图做像素匹配,匹配成功的基准图对应的资源名就是当前加载的资源名。你可以直接使用 Appium 内置的图片查找能力,也可以接入OpenCV等图像库自行实现比对逻辑。
该方案的缺点是图片相似度高时容易出现误判,需要维护基准图资源,且无法直接拿到资源名字符串,只能做匹配判断。 - 补充说明
苹果没有给 XCUITest 开放读取应用内部资源名的权限,没有端侧配合的前提下,没有办法直接获取到 UIImage 对应的 asset 名称。
内容的提问来源于stack exchange,提问作者Son
相关产品推荐
相关产品推荐

