Original error: Error: socket hang up

kiki發表於2024-05-23

一、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",

...

相關文章