Appium 求助 Appium 识别 iOS 对象疑难杂症

Look毛青 · 2018年06月21日 · 最后由 瘦桔 回复于 2020年11月09日 · 78 次阅读
  • Appium Inspector 识别 iOS 应用,页面架构可以完整获取,但是所有对象的 visible 属性皆为 false,appium 不能操作
  • 自动化环境配置:
    • Appium: Appium-desktop 1.6.2
    • Xcode: 9.4
    • iOS:11.4
  • 自动化框架使用 selenium+java+appium+ios 组成,iOS 层是用 XCUITEST 驱动的。
  • 问题描述:
    • appium inspector 正常启动 ios app,inspector 工具获取到页面的层次结构,但是点击每个元素,视图并没有高亮对应的控件,并且所有元素的 visible 属性为 false。刚开始以为是自动化部署的问题,使用 appium 自带的 test.app 测试下,发现 test.app 的所有对象都能正常识别。由此可以断定为我的被测应用的前端问题,感觉就像应用的顶层覆盖着一层页面,导致所有对象不能识别,但是找开发看了,并没有设想中的覆盖层。
    • 请教朋友们有没有什么思路。是否 iOS 前端设计有什么陷阱?现在整个自动化项目还没开始就要结束了吗?
共收到 27 条回复 时间 点赞
Look毛青 关闭了讨论 06月21日 07:13
Look毛青 重新开启了讨论 06月21日 07:13

anybody help me!

你可以反过来点击试一下,在 xml 节点上点击,看能不能点到对应的 UI,或者元素是 webview 的,使用 webview 的方式定位。

有的元素可能会有点这种问题,自己在 xml 代码里面找一找。或者用 macaca 的app-inspector试试,这个定位可能好一点。npm install -g app-inspector,然后app-inspector -u uuid

雨夜狂奔 回复

用 macaca 试过,xml 节点可以获取出来,但是不能操作,不是部分元素,是所有元素都这样

xcc 回复

你好,xml 节点可以获取出来,但是所有节点都是不能点击,不是 webview

inspector 工具获取到页面的层次结构,截个图看看

Look毛青 回复

能获取不能操作?不能理解

最起码 appium 的关键 log 和被测工具的信息或者截图还是要有的吧。

ltyd5788 回复

正常能识别的话点击节点,左边会高亮,例如现在的顶层节点可以高亮,而顶层之后的节点全部不能高亮

而且对应节点的 tap 时,报错

对应点击日志

顶层以下的所有节点 visible 属性为 false

雨夜狂奔 回复

看 11 楼我的回复,还有什么要补充的吗?

这种的话那就是这个元素确实在左边没显示,可以找下开发改改。。

看 11 楼我的回复,还有什么要补充的吗?是所有元素节点都这样,不是部分元素

雨夜狂奔 回复

我开始就说了,不是个别部分元素这样,是所有元素都这样,除了顶层页面节点可以高亮识别,其他元素都不行。开发也看了,也不清楚怎么回事~~~~😥 有没有懂 ios 前端开发的朋友看看。

不妨试试更新 Appium-desktop 为最新的版本

ltyd5788 回复

已然是最新版本的 appium desktop 了~

目前你的自动化环境配置 Xcode: 9.4、iOS:11.4 都属于边界的环境,需要一步一步排查,(1).先看手里除了 iOS 11.4 系统还有其他系统的手机吗?换个手机试试,有可能 iOS11.4 系统的手机 Appium 未兼容 (2).如果非 iOS 11.4 系统还是有问题,下载一个 Xcode9.3 沿着(1)重试一次

我看到你说使用 appium 自带的 test.app,test.app 的所有对象都能正常识别。inspector 工具获取到页面的层次结构,除了 Windows[1] 视图的元素信息之外,其他两个 Window 视图,可以看到展开元素信息么,如果不可以,先尝试定位一下 Appium 的问题还是 WebDriverAgent 问题,打开 WebDriverAgent,用 curl 命令调用 “坐标” 点击元素看看效果

ltyd5788 回复

换 xcode9.3 也是 ios10.3,问题还是存在;inspector 能获取到所有 windows 的信息,就是用 appium 操作不了,可以用坐标点击;我觉得 appium 跟 webDriverAgent 都没问题,是这个 app 的设计问题啊

visible 属性主要是通过控件的 frame 属性来计算的,可以看到上面的截图元素的 frame 属性可能都为空了,所以 visible 也为 false,也许是最新的 WebDriverAgent 获取控件树 tree 方法更改对你司的 App 有影响,建议替换 appium 的 WDA 为 facebook 的 WebDriverAgent 或降低 appium 版本查看元素的 frame 属性是否还为空,同时查看一下有问题的 WebDriverAgent 的日志是否有 Failed to fetch hit point for 错误提示或者贴一下 WebDriverAgent 日志文件,大致情况就比较清晰了

ltyd5788 回复

跟开发拿来整个工程,在 inspector 执行 getpagesource 时,xcode 控制台输出日志如下:

这是工程里面少了什么东西了吗?

(1)这里我也不太确定,也许是 RD 的代码不规范(2)getPageSource 实际是调用 tree 方法,tree 方法内部会通过调用 XCElementAttributes 类来调用元素的属性值,元素的属性值实际是从生产代码的 get 方法获取的,也许 RD 只实现了 set 方法,没有实现 get 方法引起的,后面几句是我猜的,让 RD 实现下上面提示元素的 get 方法看看效果吧?(3)替换 WebDriverAgent 为 facebook 的 WebDriverAgent 还是不行吗?

ltyd5788 回复

换了 facebook 的 WDA 还是不行,"也许 RD 只实现了 set 方法,没有实现 get 方法引起的",我也是这么猜的,对了,WDA 日志在哪里看?朋友,可以加微信联系吗?我的 v:略

Look毛青 回复

用 xcodebuild 命令运行 WDA 指定-derivedDataPath 路径从里面找找看,加你了

26楼 已删除

找到解决办法了吗?目前也遇到相同的问题了

Look毛青 回复

亲,您好!您的问题解决了吗?我也遇到和你一样的问题,目前分析的情况和你这个未 get 的差不多一致呢,求指教呢,谢谢

感觉和 IOS 的版本有关。 我遇到过同一个元素,IOS 10 版本的识别不了,而 IOS 11 版本的就能识别的现象。
建议换个 IOS 的版本试试吧,如果实在不愿意换,只能试试坐标点击操作了

想问楼主是怎么解决这个问题的? 我遇到这样的情况,困扰了很多天了,求指教~

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