feat: save foreground app when step failed

This commit is contained in:
lilong.129
2023-06-07 16:25:04 +08:00
parent 4fb56211d8
commit e7b4d4f8b7
3 changed files with 33 additions and 25 deletions

View File

@@ -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,

View File

@@ -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{

View File

@@ -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