网上说的原因1:
appium连接手机做自动化,本来做的好好的。突然某一次开始一直报错这个socket hang up
我看网上有说uiautomator2的,又说uiautomator耗电严重,被手机自动杀的。都没解决我的问题
最后搞懂了我的起因:
上一次的调试链接没有主动断开,也即没有driver.quit() 掉,这时候去再启动一个session,由于上一个连接未中断,一直被占用着。。。就会非常非常危险
网上说的原因2:
运行好好的测试用例,换了测试设备,突然隔三差五就开始报错了,让人摸不着头脑。
表现:写了一个循环滑动页面的用例,滑着滑着突然报错,提示socket hang up了,但是app还停留在前台,并没有被杀掉。
过程:查看 appium log 无果,用了网上各种解决办法:重启手机、删除 appium 相关的软件重新安装、开启后台高耗电开关等等一顿操作猛如虎,只是把报错的概率降低了些,但并没有根本解决问题。
原因:在 appium 启动后,上一个 session 没有主动断开也没有 driver.quit() 掉,然后用pycharm又运行一个用例导致再启动一个 session,由于上一个连接未中断,一直被占用着,等到上个 session 超时一分钟后被自动断开,影响了新的 session。
解决:在启动 appium server 的时候,命令行添加 –session-override 参数,或者在 appium desktop 中,点击 Advanced,勾选 Allow Session Override。 另外在写测试用例时,在测试用例执行结束后,最好还是要主动断开一下session的,调用下 driver.quit() 也没那么复杂,毕竟有始有终没bug,心情舒畅不秃头,哈哈哈哈。
解决问题的根本:如果以上操作不解决问题,可以用 adb logcat,搜索其中的uiautomator分类的log,看下错误提示什么,再对症下药。解决问题得先知道问题原因是什么。以前并不知道可以这样查看详细log,只看到appium server log很片面,导致自己解决问题的时候不知道为什么出错,而浪费了很多时间。
网上说的原因3:
你的appium没管理好session吧,appium自己终止导致的。你可以通过appium --sessionoverride的方式去避免
解决 办法:appium-desk桌面版的 去appium安装目录下 命令行执行 appium -a 127.0.0.1 -p 4723 --session-override命令,覆盖之前的session
或者增加参数 capabilities.setCapability("sessionOverride ", true)
好像也和电脑的代理有关,关闭代理,运行了几次没有再出现那个session的报错。
proxy hang up 报错问题
说是uiautomator2版本不对&&或者其他appium所属App占用端口导致,我试试看
adb uninstall xxx
卸载appiumsetting,然后试试
总结,
基本和session是有关系的,
解决方案:
第一种,appium -a 127.0.0.1 -p 4723 --session-override
第二种,卸载设备上的appium-setting 等appium安装的app、卸载自动化启动的app(操作对象apk)、重启设备