为何Webdriver.io的~ accessibility id选择器在Android应用中失效,id:却可用?
问题原因及解决办法
核心误区:混淆了Android的两种元素属性
Webdriver.io里的~前缀选择器,对应Appium的accessibility id定位策略,但在Android平台上,这个策略匹配的是元素的**content-desc(辅助描述)属性**,而非你用来成功定位的resource-id。
你当前用id:accessibility_id或//*[@resource-id="accessibility_id"]定位成功,本质是匹配元素的resource-id属性——这和accessibility id是完全不同的两个属性,所以用~加上resource-id的字符串自然找不到元素。
验证与修复步骤
- 查看元素真实的辅助属性
用Appium Inspector或者Android的uiautomatorviewer工具,检查目标元素的content-desc值是什么。 - 正确使用
~选择器
如果元素确实配置了content-desc,把~后面的内容换成该属性的真实值,比如:await $('~元素的content-desc内容'); - 无
content-desc时的替代方案
要是应用里的元素没设置content-desc,那accessibility id策略就没法用,继续用你之前成功的resource-id相关定位方式即可。
从日志看差异
你的报错日志和成功日志也能明确看出区别:
- 使用
~accessibility_id时,Webdriver.io发送的请求是:[0-0] 2023-04-05T19:52:59.387Z INFO webdriver: DATA { [0-0] using: 'accessibility id', [0-0] value: 'accessibility_id' [0-0] } - 成功定位时的请求是:
[0-0] 2023-04-05T20:22:42.490Z INFO webdriver: DATA { [0-0] using: 'id', [0-0] value: 'accessibility_id' [0-0] }
这里的id策略在Android平台默认匹配的是resource-id,和accessibility id策略没有关联。
内容的提问来源于stack exchange,提问作者Atrem_J
相关产品推荐
相关产品推荐

