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
+3
View File
@@ -69,6 +69,7 @@ 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
DeviceUntrustedCertError = errors.New("device app certificate not trusted") // 53
DeviceAppNotInstalled = errors.New("device app not installed") // 59 DeviceAppNotInstalled = errors.New("device app not installed") // 59
DeviceGetInfoError = errors.New("device get info error") // 60 DeviceGetInfoError = errors.New("device get info error") // 60
DeviceConfigureError = errors.New("device configure error") // 61 DeviceConfigureError = errors.New("device configure error") // 61
@@ -179,6 +180,7 @@ var errorsMap = map[error]int{
DeviceConnectionError: 50, DeviceConnectionError: 50,
DeviceHTTPDriverError: 51, DeviceHTTPDriverError: 51,
DeviceUSBDriverError: 52, DeviceUSBDriverError: 52,
DeviceUntrustedCertError: 53,
DeviceAppNotInstalled: 59, DeviceAppNotInstalled: 59,
DeviceGetInfoError: 60, DeviceGetInfoError: 60,
DeviceConfigureError: 61, DeviceConfigureError: 61,
@@ -188,6 +190,7 @@ var errorsMap = map[error]int{
DeviceScreenShotError: 65, DeviceScreenShotError: 65,
DeviceCaptureLogError: 66, DeviceCaptureLogError: 66,
DeviceUIResponseSlow: 67, DeviceUIResponseSlow: 67,
DeviceUntrustedCertError: 68,
// UI automation related // UI automation related
MobileUIDriverAppNotInstalled: 68, MobileUIDriverAppNotInstalled: 68,
+11 -1
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
if errors.Is(err, code.DeviceOfflineError) {
lastError = err
} else {
// Use DeviceHTTPDriverError for other errors
lastError = errors.Wrap(code.DeviceHTTPDriverError, err.Error()) 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