一、appium 执行 app 自动化时,上一个自动化进程未关闭导致
一般 Node.js 提供的 HttpServer 默认设置了 2 分钟超时时间,当一个请求的处理时间超过 2 分钟,HttpServer 会自动调用请求的套接字关闭掉,于是客户端变收到了 econnreset 的错误信息了。这不是因为时间的问题导致超时错误,主要原因是 HttpServer 进程被上一次自动化测试占用,所以就会导致以运行就会报 econnreset 的错误
解决方案:
1、删掉手机上安装的 appium 的两个 app(Appium Setting 和 io.appium.uiautomator2.server.test),重启手机
2、在脚本层面上,session 覆盖选项设置为 True。自动化任务跑完最后面一定要调用 driver.quit 等操作,或者代码出现致命错误,的时候也要去执行 quit。以防下次自动化任务跑失败
3、也可以在启动 appium 命令添加:-session-override,或者在 appium desktop 中,点击 Advanced,勾选 Allow Session Override。

二、appium 多并发执行,未指定 systemPort,当触发多个终端执行时,系统端口占用冲突
解决方案:
系统会分配端口号用于与设备交互,通常 ios 为 8100~8199,android 为 8200~8299.为避免冲突,可以为每个线程指定端口号,设置系统与设备端口号:systemPort

{
"platformName": "Android",
"appium:platformVersion": "11",
"appium:deviceName": "emulator test2",
"appium:automationName": "UiAutomator2",
"appium:newCommandTimeout": "180",
"appium:resetKeyboard": true,
"appium:unicodeKeyboard": true,
"appium:noReset": true,
"appium:unlockType": "pattern",
"appium:unlockKey": "",
"appium:clearSystemFiles": true,
"appium:skipServerInstallation": false,
"appium:skipDeviceInitialization": false,
"appium:appPackage": "com.xx.xx",
"appium:appActivity": "com.xx.xx.xx",
"appium:udid": "emulator-5556",
"appium:systemPort ": "8201"
}
如果以上方式还会偶现,避开同一时间点触发多个设备自动化,也可终端输入命令:adb logcat ,搜索其中的 uiautomator 分类的 log

三、元素定位超时
元素定位过程超时,可以添加 desired_caps 超时时间:

"appium:newCommandTimeout": "180",

...


↙↙↙阅读原文可查看相关链接,并与作者交流