自从泰斯特Club测试技术沙龙举办讲了UI自动化以后,就有很多人在问appium执行过程中断了要怎么处理?很多人都遇到这个问题,不知如何解决~对于这个问题解决方法,我是踩坑过来的,这个也是比较大的坑。待我一一说来。
首先先简单了解下appium的原理,appium是一个c/s结构,我简单的形象的说,appium 执行分为电脑跟手机。电脑端也是一个c/s架构,C就是自动化脚本,S就是appium 服务,自动化脚本通过webdriver协议请求端口4723请求到appium服务端,appium服务端接收请求后,返回一个待sessionid会话,后续的操作都是通过这个sessonid进行操作,这是电脑端操作,电脑跟手机的交互是通过socket协议4724端口进行交互,这是appium sever就充当客户端,而手机端就是bootstrap.jar进行操作,而boostrap.jar在下发命令给uiautomator进行操作,整体流程就是这样;
既然知道了是C/S架构,所以每次在调试的时候,记得打印下整体的请求,然后要注意查看S端返回的结果,那我们说下appium执行中断服务端的提示是Could not proxy command to remote server. Original error: Error: socket hang up;主要的原因是新版的appium的ui2server请求过于频繁,耗电量过高被软件或者系统认为是流氓软件直接kill掉。这个问题如果是使用appium1.13.x是不存在这个问题,如果是1.18.x以上就存在这个问题,当然这是我自己使用发现的,尽管1.19版本ui2server 为前端服务也存在这个问题。
解决方案如下:
1.appium setting,uiautomator2sever两个服务都给全部权限;
2.在设置的电量管理,把省电管理关掉,以及给ui2两个sever 不受耗电管理,具体你根据机型进行选择;
3.当前面两个都还无法解决的时候,一般是手机管理软件问题,你可以运行脚本,并且在dos下,运行adb logcat -v time > 电脑目录文件,然后当出现的时候,停止脚本,进入adb logcat 日志目录里面根据关键字io.appium.uiautomator2.server 进行查找,然后会找到force ui2ser 是哪个pid kill掉,
这时在通过adb shell ps |grep pid 找出那个包名,在通过命令adb shell pm uninstall -k --user 0 +包名 卸载这个软件,这个一般都是手机管家之类的,记得务必用这个命令。vivo设备:com.vivo.abe,联想设备:com.zui.safecenter,只要能搜索到直接卸载;
4.前面三个方法都是进行手机软件的管理删除,接下来就是自动化框架的修改,你可以检查session ,当出现中断,根据服务端返回内容判断,session断开了,然后检查是否还有session,如果没有,重新启动appium,建立一个session。
以上四个方法是完美解决这个大坑的秘籍,请遇到的同学以及问我的同学自取。