Appium 测试 IOS 应用时候,appium 在使用控件 ID 定位到控件后,却对其执行 click 没反应。

珂学家 · 2019年07月23日 · 最后由 木月 回复于 2019年07月26日 · 2740 次阅读

测试 IOS 应用时候,appium 在使用控件 ID 定位到控件后,却对其执行 click 没反应。使用 driver.getPageSouce() 方法页面元素,可以获取到想要定位的元素。有前辈已经提过这个问题了,但好像没有解决,哪位大神可以看看,有什么办法可以解决这个问题?谢谢了

最佳回复

拼下元素的中心位置 x + width / 2, y + height/ 2 调用坐标点击的 api 试试看

共收到 9 条回复 时间 点赞

说明不是这个控件处理事件,找找父控件或者子控件,或者你把你控件 xml 发出来看看

先把 click 前页面 PageSource 打印出来,查看下点击前的操作是否符合预期的页面,如果符合预期但是 click 没反应,可以转成坐标位置来点击吧,非预期页面用逻辑加以控制应该没啥问题的

ltyd5788 回复

符合预期的页面,而且使用 getLocation() 获取位置,可以获取到,但就是 click 无响应

雨夜狂奔 回复

这是控件的 xml 文件,帮忙看一下,谢谢

拼下元素的中心位置 x + width / 2, y + height/ 2 调用坐标点击的 api 试试看

ltyd5788 回复

可以了,谢谢,谢谢。很奇怪,为什么 click 不可以而 tap 就可以了

Appium 实现的 click 或 tap 方法是遵循 W3C 协议实现的,粗略看了下会根据 action item 设置优先策略的,可以在 FBW3CActionsSynthesizer.m 文件里全局搜 - (nullable NSValue *) hitpointWithElement: 方法里打印打印 hitPoint 坐标位置,应该就比较清晰了


可以看下你之前发的截图 “个人中心” 元素的 visible 属性为 false,实际上是在屏幕可视范围内的,这是因为 WDA 计算元素的位置方法是有缺陷的,所以尽可能使用元素的 frame 作为点击的位置才比较靠谱

iOS 自动化很多东西需要自己框架的时候去优化的,你的这个,其实很好解决:
1.判断 is_enabled,有时候,元素是获取到了,但是不可点击的状态,你这时候去 click 是不响应的,用 tap,因为是直接点击的屏幕坐标点,所以生效了。如果只是暂时的 unabled,稍加等待,后续是可以点击的。
2.然后,还有控件的显示情况,都需要自己去判断然后处理,脚本才会稳定强大

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