这种筛选框,点击后,刷新源,在应用源 XML 中,找不到元素, 但是多次尝试切换页面或者重启,偶尔又能找到,不知道啥原因。。。
比如同样的筛选框,在其他页面复用后,在其他页面可以加载在 DOM TREE 中, 但是有的页面就是找不到
wda 本身的问题 当页面只是局部刷新的时候 wda 并没有将 tree 进行完全刷新,只是将新增的布局追加进当前这个树了,之前碰到过这种问题,我的解决方案是,重新链接一下 wda 生成一个新的 session id 重新获取
多谢大佬,我再试试。我好像是关闭 appium server,然后关闭 inspector,然后重启 appium server,重新打开 inspector,加载出当前页后,还是找不到元素😓 不知道以上操作有没有生成新的 wda session
我发现重启 appium server 不会清理 wda 缓存,应用源里还是没最新元素; 目前没找到重启 wda 或者 清理 wda 缓存的方法
我通过更新了最新的 WDA,发现问题依旧; 这个还没在 UI 自动化脚本中测试,如果脚本中也不刷新
那岂不是就算在 Inspector 中定位到了元素,但真正执行脚本的时候,也会报错,找不到元素。。。
建议你尝试使用 weditor 或者 uiauto 查看(看不到不一定点不到,比如 weditor 对 H5 识别弱,但在 uiauto 上又可以看到)
weditor 安装:pip install --pre --upgrade weditor
weditor 使用:在 cmd 执行 python -m weditor
uiauto 安装 :pip3 install -U uiautodev -i https://pypi.doubanio.com/simple
uiauto 使用:在 cmd 执行 uiauto.dev
你更新 wda 也没用,这个就是苹果的机制问题,想要解决 就需要重启 wda,重新获取页面,不然你执行脚本也会是一样的问题,因为这个不是没有解析出来,而是从 wda 获取到的东西就是这样的。
感谢大佬,我尝试用 weditor 试试;
其实不刷新,我也可以通过类比的方式,将这些不刷新出来的元素,定位信息给猜出来
但是,就怕跑脚本的时候,wda 还是不刷新,那脚本肯定也会报错,不过只是 IOS 不刷新, 安卓就会刷新,也是奇了怪; 如果跑测,也不刷新,那这种筛选框的用例,IOS,就没法用 wda 方式去实现自动化了,我晚点去实验下跑测情况
请问如何重启 wda;我目前的方案就是断开 inspector,然后更新 "appium:wdaLocalPort": 8700 变为 8701,这样就不会服用之前的 wda 实例,也就相当于没缓存了,然后读出新的元素; 那写脚本,就要断掉 driver,重新生成新的 driver,其实也变相解决了,但是会影响执行速度;也还好五个筛选,就获取五次 driver,每次给 caps 中端口 +1
你换啥定位工具也没有,本质上都是调的 wda 接口返回的页面布局,你现在这样就可以了。这是没有办法的办法 我之前就是把用例抽离出来针对 iOS 单独运行的,每次执行的时候重启一下。至于你说的 Android 没问题,Android 肯定没问题。。。因为这个问题和 appium 没关系,是系统机制的问题。
嗯嗯,还好这种局部刷新元素的场景不多;还是 wda 问题,没有考虑到这种情况。我和 AI 聊了两天了,AI 让我去改 wda 源码了。。。我也是服了= =,