From e7b4d4f8b7c206c367aeb31380b9812cc87109eb Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Wed, 7 Jun 2023 16:25:04 +0800 Subject: [PATCH] feat: save foreground app when step failed --- hrp/internal/code/code.go | 24 ++++++++++++------------ hrp/pkg/uixt/android_adb_driver.go | 20 +++++++++++--------- hrp/step_mobile_ui.go | 14 ++++++++++---- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/hrp/internal/code/code.go b/hrp/internal/code/code.go index 2632291b..eca22de3 100644 --- a/hrp/internal/code/code.go +++ b/hrp/internal/code/code.go @@ -70,12 +70,12 @@ var ( // UI automation related: [70, 80) var ( - MobileUIDriverError = errors.New("mobile UI driver error") // 70 - MobileUILaunchAppError = errors.New("mobile UI launch app error") // 71 - MobileUIValidationError = errors.New("mobile UI validation error") // 75 - MobileUIAppNotInForegroundError = errors.New("mobile UI app not in foreground error") // 76 - MobileUIActivityNotMatchError = errors.New("mobile UI activity not match error") // 77 - MobileUIPopupError = errors.New("mobile UI popup error") // 78 + MobileUIDriverError = errors.New("mobile UI driver error") // 70 + MobileUILaunchAppError = errors.New("mobile UI launch app error") // 71 + MobileUIValidationError = errors.New("mobile UI validation error") // 75 + MobileUIAssertForegroundAppError = errors.New("mobile UI assert foreground app error") // 76 + MobileUIAssertForegroundActivityError = errors.New("mobile UI assert foreground activity error") // 77 + MobileUIPopupError = errors.New("mobile UI popup error") // 78 ) // OCR related: [80, 90) @@ -134,12 +134,12 @@ var errorsMap = map[error]int{ AndroidCaptureLogError: 66, // UI automation related - MobileUIDriverError: 70, - MobileUILaunchAppError: 71, - MobileUIValidationError: 75, - MobileUIAppNotInForegroundError: 76, - MobileUIActivityNotMatchError: 77, - MobileUIPopupError: 78, + MobileUIDriverError: 70, + MobileUILaunchAppError: 71, + MobileUIValidationError: 75, + MobileUIAssertForegroundAppError: 76, + MobileUIAssertForegroundActivityError: 77, + MobileUIPopupError: 78, // OCR related OCREnvMissedError: 80, diff --git a/hrp/pkg/uixt/android_adb_driver.go b/hrp/pkg/uixt/android_adb_driver.go index 02c2ea66..8f5029ab 100644 --- a/hrp/pkg/uixt/android_adb_driver.go +++ b/hrp/pkg/uixt/android_adb_driver.go @@ -427,7 +427,7 @@ func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) { } } - return AppInfo{}, errors.New("get foreground app failed") + return AppInfo{}, errors.Wrap(code.MobileUIAssertForegroundAppError, "get foreground app failed") } func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...string) error { @@ -447,20 +447,21 @@ func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...str Interface("foreground_app", app.AppBaseInfo). Str("expected_package", packageName). Msg("assert package failed") - return errors.Wrap(code.MobileUIAppNotInForegroundError, "assert package failed") + return errors.Wrap(code.MobileUIAssertForegroundAppError, + "assert foreground package failed") } - // assert activity if len(activityType) == 0 { return nil } - expectActivityType := activityType[0] + // assert activity + expectActivityType := activityType[0] activities, ok := androidActivities[packageName] if !ok { msg := fmt.Sprintf("activities not configured for package %s", packageName) log.Error().Msg(msg) - return errors.Wrap(code.MobileUIActivityNotMatchError, msg) + return errors.Wrap(code.MobileUIAssertForegroundActivityError, msg) } expectActivities, ok := activities[expectActivityType] @@ -468,24 +469,25 @@ func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...str msg := fmt.Sprintf("activity type %s not configured for package %s", expectActivityType, packageName) log.Error().Msg(msg) - return errors.Wrap(code.MobileUIActivityNotMatchError, msg) + return errors.Wrap(code.MobileUIAssertForegroundActivityError, msg) } // assertion for _, expectActivity := range expectActivities { if strings.HasSuffix(app.Activity, expectActivity) { - // assert success + // assert activity success return nil } } - // assert failed + // assert activity failed log.Error(). Interface("foreground_app", app.AppBaseInfo). Str("expected_activity_type", expectActivityType). Strs("expected_activities", expectActivities). Msg("assert activity failed") - return errors.Wrap(code.MobileUIActivityNotMatchError, "assert activity failed") + return errors.Wrap(code.MobileUIAssertForegroundActivityError, + "assert foreground activity failed") } var androidActivities = map[string]map[string][]string{ diff --git a/hrp/step_mobile_ui.go b/hrp/step_mobile_ui.go index 3838cfdd..ac95207e 100644 --- a/hrp/step_mobile_ui.go +++ b/hrp/step_mobile_ui.go @@ -589,13 +589,19 @@ func runStepMobileUI(s *SessionRunner, step *TStep) (stepResult *StepResult, err attachments := make(map[string]interface{}) if err != nil { attachments["error"] = err.Error() + + // save foreground app + if app, err1 := uiDriver.Driver.GetForegroundApp(); err1 == nil { + attachments["foreground_app"] = app.AppBaseInfo + } else { + log.Warn().Err(err1).Msg("save foreground app failed, ignore") + } } // take screenshot after each step - _, _, err := uiDriver.TakeScreenShot( - builtin.GenNameWithTimestamp("%d_step_") + step.Name) - if err != nil { - log.Error().Err(err).Str("step", step.Name).Msg("take screenshot failed on step finished") + if _, _, err2 := uiDriver.TakeScreenShot( + builtin.GenNameWithTimestamp("%d_step_") + step.Name); err2 != nil { + log.Error().Err(err2).Str("step", step.Name).Msg("take screenshot failed on step finished") } // save attachments