feat: 优化错误码

This commit is contained in:
余泓铮
2025-08-05 20:55:58 +08:00
parent 73db0cd124
commit 3c384775f6
3 changed files with 54 additions and 27 deletions
+27 -24
View File
@@ -66,18 +66,19 @@ var (
// device related: [50, 70) // device related: [50, 70)
var ( var (
DeviceConnectionError = errors.New("device general connection error") // 50 DeviceConnectionError = errors.New("device general connection error") // 50
DeviceHTTPDriverError = errors.New("device HTTP driver error") // 51 DeviceHTTPDriverError = errors.New("device HTTP driver error") // 51
DeviceUSBDriverError = errors.New("device USB driver error") // 52 DeviceUSBDriverError = errors.New("device USB driver error") // 52
DeviceAppNotInstalled = errors.New("device app not installed") // 59 DeviceUntrustedCertError = errors.New("device app certificate not trusted") // 53
DeviceGetInfoError = errors.New("device get info error") // 60 DeviceAppNotInstalled = errors.New("device app not installed") // 59
DeviceConfigureError = errors.New("device configure error") // 61 DeviceGetInfoError = errors.New("device get info error") // 60
DeviceShellExecError = errors.New("device shell exec error") // 62 DeviceConfigureError = errors.New("device configure error") // 61
DeviceOfflineError = errors.New("device offline") // 63 DeviceShellExecError = errors.New("device shell exec error") // 62
DeviceInstallFailed = errors.New("device install app failed") // 64 DeviceOfflineError = errors.New("device offline") // 63
DeviceScreenShotError = errors.New("device screenshot error") // 65 DeviceInstallFailed = errors.New("device install app failed") // 64
DeviceCaptureLogError = errors.New("device capture log error") // 66 DeviceScreenShotError = errors.New("device screenshot error") // 65
DeviceUIResponseSlow = errors.New("device UI response slow") // 67 DeviceCaptureLogError = errors.New("device capture log error") // 66
DeviceUIResponseSlow = errors.New("device UI response slow") // 67
) )
// UI automation related: [70, 80) // UI automation related: [70, 80)
@@ -176,18 +177,20 @@ var errorsMap = map[error]int{
UploadFailed: 49, UploadFailed: 49,
// device related // device related
DeviceConnectionError: 50, DeviceConnectionError: 50,
DeviceHTTPDriverError: 51, DeviceHTTPDriverError: 51,
DeviceUSBDriverError: 52, DeviceUSBDriverError: 52,
DeviceAppNotInstalled: 59, DeviceUntrustedCertError: 53,
DeviceGetInfoError: 60, DeviceAppNotInstalled: 59,
DeviceConfigureError: 61, DeviceGetInfoError: 60,
DeviceShellExecError: 62, DeviceConfigureError: 61,
DeviceOfflineError: 63, DeviceShellExecError: 62,
DeviceInstallFailed: 64, DeviceOfflineError: 63,
DeviceScreenShotError: 65, DeviceInstallFailed: 64,
DeviceCaptureLogError: 66, DeviceScreenShotError: 65,
DeviceUIResponseSlow: 67, DeviceCaptureLogError: 66,
DeviceUIResponseSlow: 67,
DeviceUntrustedCertError: 68,
// UI automation related // UI automation related
MobileUIDriverAppNotInstalled: 68, MobileUIDriverAppNotInstalled: 68,
+12 -2
View File
@@ -202,8 +202,13 @@ func (s *DriverSession) RequestWithRetry(method string, urlStr string, rawBody [
synthesizeEventRetryAdded = true synthesizeEventRetryAdded = true
} }
// Notice: use DeviceHTTPDriverError when request driver failed // Check if it's already a DeviceOfflineError
lastError = errors.Wrap(code.DeviceHTTPDriverError, err.Error()) if errors.Is(err, code.DeviceOfflineError) {
lastError = err
} else {
// Use DeviceHTTPDriverError for other errors
lastError = errors.Wrap(code.DeviceHTTPDriverError, err.Error())
}
// If this was the last attempt, break // If this was the last attempt, break
if attempt == maxRetry { if attempt == maxRetry {
@@ -294,6 +299,11 @@ func (s *DriverSession) Request(method string, urlStr string, rawBody []byte, op
driverResult.RequestTime = time.Now() driverResult.RequestTime = time.Now()
var resp *http.Response var resp *http.Response
if resp, err = s.client.Do(req); err != nil { if resp, err = s.client.Do(req); err != nil {
// Check for connection reset or EOF errors and classify as DeviceOfflineError
if strings.Contains(err.Error(), "read: connection reset by peer") ||
strings.Contains(err.Error(), "EOF") {
return nil, errors.Wrap(code.DeviceOfflineError, err.Error())
}
return nil, err return nil, err
} }
defer func() { defer func() {
+15 -1
View File
@@ -436,6 +436,13 @@ func (wd *WDADriver) AppLaunch(bundleId string) (err error) {
// 超时两分钟 // 超时两分钟
_, err = wd.Session.POST(data, "/wings/apps/launch", option.WithTimeout(120)) _, err = wd.Session.POST(data, "/wings/apps/launch", option.WithTimeout(120))
if err != nil { if err != nil {
// Check for untrusted certificate error
errMsg := err.Error()
if strings.Contains(errMsg, "has not been explicitly trusted by the user") ||
strings.Contains(errMsg, "invalid code signature") ||
strings.Contains(errMsg, "inadequate entitlements") {
return errors.Wrap(code.DeviceUntrustedCertError, "App certificate not trusted: "+bundleId)
}
return errors.Wrap(err, "wda app launch failed") return errors.Wrap(err, "wda app launch failed")
} }
return nil return nil
@@ -443,10 +450,17 @@ func (wd *WDADriver) AppLaunch(bundleId string) (err error) {
func (wd *WDADriver) AppLaunchUnattached(bundleId string) (err error) { func (wd *WDADriver) AppLaunchUnattached(bundleId string) (err error) {
log.Info().Str("bundleId", bundleId).Msg("WDADriver.AppLaunchUnattached") log.Info().Str("bundleId", bundleId).Msg("WDADriver.AppLaunchUnattached")
// [[FBRoute POST:@"/wda/apps/launchUnattached"].withoutSession respondWithTarget:self action:@selector(handleLaunchUnattachedApp:)] // [[FBRoute POST:@"/wda/apps/launchUnattached"].withoutSession respondWithTarget:self action:@selector(handleLaunchUnattachedApp:)]]
data := map[string]interface{}{"bundleId": bundleId} data := map[string]interface{}{"bundleId": bundleId}
_, err = wd.Session.POST(data, "/wda/apps/launchUnattached") _, err = wd.Session.POST(data, "/wda/apps/launchUnattached")
if err != nil { if err != nil {
// Check for untrusted certificate error
errMsg := err.Error()
if strings.Contains(errMsg, "has not been explicitly trusted by the user") ||
strings.Contains(errMsg, "invalid code signature") ||
strings.Contains(errMsg, "inadequate entitlements") {
return errors.Wrap(code.DeviceUntrustedCertError, "App certificate not trusted: "+bundleId)
}
return errors.Wrap(err, "wda app launchUnattached failed") return errors.Wrap(err, "wda app launchUnattached failed")
} }
return nil return nil