From 4fb56211d85607a8ec59be05d2e3b1f2fae3b020 Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Wed, 7 Jun 2023 15:54:13 +0800 Subject: [PATCH] refactor: AssertForegroundApp --- hrp/pkg/uixt/android_adb_driver.go | 61 ++++++++++++++---------------- hrp/pkg/uixt/android_test.go | 4 +- hrp/pkg/uixt/ext.go | 2 +- hrp/pkg/uixt/interface.go | 8 ++-- hrp/pkg/uixt/ios_driver.go | 10 ++--- hrp/pkg/uixt/video_crawler.go | 8 ++-- 6 files changed, 42 insertions(+), 51 deletions(-) diff --git a/hrp/pkg/uixt/android_adb_driver.go b/hrp/pkg/uixt/android_adb_driver.go index cfed8043..02c2ea66 100644 --- a/hrp/pkg/uixt/android_adb_driver.go +++ b/hrp/pkg/uixt/android_adb_driver.go @@ -395,22 +395,6 @@ func (ad *adbDriver) StopCaptureLog() (result interface{}, err error) { return ConvertPoints(content), nil } -func (ad *adbDriver) AssertAppForeground(packageName string) error { - if packageName == "" { - return errors.New("package name is not given") - } - - app, err := ad.GetForegroundApp() - if err != nil { - return err - } - if app.PackageName != packageName { - return fmt.Errorf("%v is not in foreground, current is %v", - packageName, app.PackageName) - } - return nil -} - func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) { // adb shell dumpsys activity activities output, err := ad.adbClient.RunShellCommand("dumpsys", "activity", "activities") @@ -446,48 +430,61 @@ func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) { return AppInfo{}, errors.New("get foreground app failed") } -func (ad *adbDriver) AssertUI(packageName, activityType string) error { - log.Debug().Str("pacakge_name", packageName). - Str("activity_type", activityType).Msg("assert android activity") +func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...string) error { + log.Debug().Str("package_name", packageName). + Strs("activity_type", activityType). + Msg("assert android foreground package and activity") + app, err := ad.GetForegroundApp() if err != nil { log.Warn().Err(err).Msg("get foreground app failed, skip app/activity assertion") return nil // Notice: ignore error when get foreground app failed } + // assert package if app.PackageName != packageName { - return errors.Wrap(code.MobileUIAppNotInForegroundError, - fmt.Sprintf("foreground app %s, expect %s", app.PackageName, packageName)) + log.Error(). + Interface("foreground_app", app.AppBaseInfo). + Str("expected_package", packageName). + Msg("assert package failed") + return errors.Wrap(code.MobileUIAppNotInForegroundError, "assert package failed") } - activities, ok := androidActivities[app.PackageName] + // assert activity + if len(activityType) == 0 { + return nil + } + expectActivityType := activityType[0] + + activities, ok := androidActivities[packageName] if !ok { - msg := fmt.Sprintf("app package %s not configured", app.PackageName) - log.Error().Interface("app", app.AppBaseInfo).Msg(msg) + msg := fmt.Sprintf("activities not configured for package %s", packageName) + log.Error().Msg(msg) return errors.Wrap(code.MobileUIActivityNotMatchError, msg) } - expectActivities, ok := activities[activityType] + expectActivities, ok := activities[expectActivityType] if !ok { - msg := fmt.Sprintf("app package %s %s not configured", app.PackageName, activityType) - log.Error().Interface("app", app.AppBaseInfo).Msg(msg) + msg := fmt.Sprintf("activity type %s not configured for package %s", + expectActivityType, packageName) + log.Error().Msg(msg) return errors.Wrap(code.MobileUIActivityNotMatchError, msg) } - // assert success + // assertion for _, expectActivity := range expectActivities { if strings.HasSuffix(app.Activity, expectActivity) { + // assert success return nil } } // assert failed log.Error(). - Interface("app", app.AppBaseInfo). - Str("expectActivityType", activityType). - Strs("expectActivities", expectActivities). + 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") } diff --git a/hrp/pkg/uixt/android_test.go b/hrp/pkg/uixt/android_test.go index 230bcaa5..b6b9f47e 100644 --- a/hrp/pkg/uixt/android_test.go +++ b/hrp/pkg/uixt/android_test.go @@ -364,7 +364,7 @@ func TestDriver_IsAppInForeground(t *testing.T) { t.FailNow() } - err = driverExt.Driver.AssertAppForeground("com.android.settings") + err = driverExt.Driver.AssertForegroundApp("com.android.settings") if err != nil { t.Fatal(err) } @@ -375,7 +375,7 @@ func TestDriver_IsAppInForeground(t *testing.T) { t.Fatal(err) } - err = driverExt.Driver.AssertAppForeground("com.android.settings") + err = driverExt.Driver.AssertForegroundApp("com.android.settings") if err == nil { t.Fatal(err) } diff --git a/hrp/pkg/uixt/ext.go b/hrp/pkg/uixt/ext.go index 782e4ec4..a5f50b40 100644 --- a/hrp/pkg/uixt/ext.go +++ b/hrp/pkg/uixt/ext.go @@ -282,7 +282,7 @@ func (dExt *DriverExt) DoValidation(check, assert, expected string, message ...s case SelectorImage: result = (dExt.IsImageExist(expected) == exp) case SelectorForegroundApp: - result = ((dExt.Driver.AssertAppForeground(expected) == nil) == exp) + result = ((dExt.Driver.AssertForegroundApp(expected) == nil) == exp) } if !result { diff --git a/hrp/pkg/uixt/interface.go b/hrp/pkg/uixt/interface.go index 7895fddf..0f784231 100644 --- a/hrp/pkg/uixt/interface.go +++ b/hrp/pkg/uixt/interface.go @@ -486,15 +486,13 @@ type WebDriver interface { // AppLaunch Launch an application with given bundle identifier in scope of current session. // !This method is only available since Xcode9 SDK AppLaunch(packageName string) error - // AppTerminate Terminate an application with the given pacakge name. + // AppTerminate Terminate an application with the given package name. // Either `true` if the app has been successfully terminated or `false` if it was not running AppTerminate(packageName string) (bool, error) - // AssertAppForeground returns nil if the given package is in foreground - AssertAppForeground(packageName string) error // GetForegroundApp returns current foreground app package name and activity name GetForegroundApp() (app AppInfo, err error) - // AssertUI returns nil if the given package and activity are in foreground - AssertUI(packageName, activityType string) error + // AssertForegroundApp returns nil if the given package and activity are in foreground + AssertForegroundApp(packageName string, activityType ...string) error // StartCamera Starts a new camera for recording StartCamera() error diff --git a/hrp/pkg/uixt/ios_driver.go b/hrp/pkg/uixt/ios_driver.go index 828684dd..c45f6867 100644 --- a/hrp/pkg/uixt/ios_driver.go +++ b/hrp/pkg/uixt/ios_driver.go @@ -366,10 +366,6 @@ func (wd *wdaDriver) AppDeactivate(second float64) (err error) { return } -func (wd *wdaDriver) AssertAppForeground(packageName string) error { - return nil -} - func (wd *wdaDriver) GetForegroundApp() (app AppInfo, err error) { // appInfo, err := wd.ActiveAppInfo() // if err != nil { @@ -386,9 +382,9 @@ func (wd *wdaDriver) GetForegroundApp() (app AppInfo, err error) { "GetForegroundApp not implemented for ios") } -func (wd *wdaDriver) AssertUI(bundleId, viewControllerType string) error { - log.Debug().Str("bundleId", bundleId). - Str("viewControllerType", viewControllerType). +func (wd *wdaDriver) AssertForegroundApp(bundleId string, viewControllerType ...string) error { + log.Warn().Str("bundleId", bundleId). + Strs("viewControllerType", viewControllerType). Msg("ios view controller assertion not implemented, skip") return nil } diff --git a/hrp/pkg/uixt/video_crawler.go b/hrp/pkg/uixt/video_crawler.go index e966b5f1..1cd628f3 100644 --- a/hrp/pkg/uixt/video_crawler.go +++ b/hrp/pkg/uixt/video_crawler.go @@ -231,7 +231,7 @@ func (l *LiveCrawler) Run(driver *DriverExt, enterPoint PointF) error { return errors.Wrap(code.InterruptError, "live crawler interrupted") default: // check if live room - if err := l.driver.Driver.AssertUI(l.configs.AppPackageName, "live"); err != nil { + if err := l.driver.Driver.AssertForegroundApp(l.configs.AppPackageName, "live"); err != nil { return err } @@ -279,7 +279,7 @@ func (l *LiveCrawler) exitLiveRoom() error { time.Sleep(2 * time.Second) // check if back to feed page - if err := l.driver.Driver.AssertUI(l.configs.AppPackageName, "feed"); err == nil { + if err := l.driver.Driver.AssertForegroundApp(l.configs.AppPackageName, "feed"); err == nil { return nil } } @@ -295,7 +295,7 @@ func (l *LiveCrawler) exitLiveRoom() error { time.Sleep(2 * time.Second) // check if back to feed page - if err := l.driver.Driver.AssertUI(l.configs.AppPackageName, "feed"); err == nil { + if err := l.driver.Driver.AssertForegroundApp(l.configs.AppPackageName, "feed"); err == nil { return nil } } @@ -419,7 +419,7 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) { time.Sleep(1 * time.Second) // check if feed page - if err := dExt.Driver.AssertUI(configs.AppPackageName, "feed"); err != nil { + if err := dExt.Driver.AssertForegroundApp(configs.AppPackageName, "feed"); err != nil { return err } }