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

Look毛青 · June 21, 2018 · Last by 瘦桔 replied at November 09, 2020 · 2317 hits
  • 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毛青 关闭了讨论 21 Jun 15:13
Look毛青 重新开启了讨论 21 Jun 15: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 和被测工具的信息或者截图还是要有的吧。

Look毛青 #11 · June 22, 2018 Author
ltyd5788 回复

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

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

对应点击日志

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

Look毛青 #12 · June 22, 2018 Author
雨夜狂奔 回复

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

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

Look毛青 #14 · June 23, 2018 Author

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

Look毛青 #15 · June 23, 2018 Author
雨夜狂奔 回复

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

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

Look毛青 #17 · June 23, 2018 Author
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 命令调用 “坐标” 点击元素看看效果

Look毛青 #20 · June 26, 2018 Author
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 日志文件,大致情况就比较清晰了

Look毛青 #22 · June 26, 2018 Author
ltyd5788 回复

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

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

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

Look毛青 #24 · June 26, 2018 Author
ltyd5788 回复

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

Look毛青 回复

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

26Floor has deleted

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

Look毛青 回复

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

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

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up