refactor: AssertForegroundApp

This commit is contained in:
lilong.129
2023-06-07 16:04:08 +08:00
parent 18ee1d7f0e
commit 4fb56211d8
6 changed files with 42 additions and 51 deletions
+29 -32
View File
@@ -395,22 +395,6 @@ func (ad *adbDriver) StopCaptureLog() (result interface{}, err error) {
return ConvertPoints(content), nil 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) { func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) {
// adb shell dumpsys activity activities // adb shell dumpsys activity activities
output, err := ad.adbClient.RunShellCommand("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") return AppInfo{}, errors.New("get foreground app failed")
} }
func (ad *adbDriver) AssertUI(packageName, activityType string) error { func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...string) error {
log.Debug().Str("pacakge_name", packageName). log.Debug().Str("package_name", packageName).
Str("activity_type", activityType).Msg("assert android activity") Strs("activity_type", activityType).
Msg("assert android foreground package and activity")
app, err := ad.GetForegroundApp() app, err := ad.GetForegroundApp()
if err != nil { if err != nil {
log.Warn().Err(err).Msg("get foreground app failed, skip app/activity assertion") log.Warn().Err(err).Msg("get foreground app failed, skip app/activity assertion")
return nil // Notice: ignore error when get foreground app failed return nil // Notice: ignore error when get foreground app failed
} }
// assert package
if app.PackageName != packageName { if app.PackageName != packageName {
return errors.Wrap(code.MobileUIAppNotInForegroundError, log.Error().
fmt.Sprintf("foreground app %s, expect %s", app.PackageName, packageName)) 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 { if !ok {
msg := fmt.Sprintf("app package %s not configured", app.PackageName) msg := fmt.Sprintf("activities not configured for package %s", packageName)
log.Error().Interface("app", app.AppBaseInfo).Msg(msg) log.Error().Msg(msg)
return errors.Wrap(code.MobileUIActivityNotMatchError, msg) return errors.Wrap(code.MobileUIActivityNotMatchError, msg)
} }
expectActivities, ok := activities[activityType] expectActivities, ok := activities[expectActivityType]
if !ok { if !ok {
msg := fmt.Sprintf("app package %s %s not configured", app.PackageName, activityType) msg := fmt.Sprintf("activity type %s not configured for package %s",
log.Error().Interface("app", app.AppBaseInfo).Msg(msg) expectActivityType, packageName)
log.Error().Msg(msg)
return errors.Wrap(code.MobileUIActivityNotMatchError, msg) return errors.Wrap(code.MobileUIActivityNotMatchError, msg)
} }
// assert success // assertion
for _, expectActivity := range expectActivities { for _, expectActivity := range expectActivities {
if strings.HasSuffix(app.Activity, expectActivity) { if strings.HasSuffix(app.Activity, expectActivity) {
// assert success
return nil return nil
} }
} }
// assert failed // assert failed
log.Error(). log.Error().
Interface("app", app.AppBaseInfo). Interface("foreground_app", app.AppBaseInfo).
Str("expectActivityType", activityType). Str("expected_activity_type", expectActivityType).
Strs("expectActivities", expectActivities). Strs("expected_activities", expectActivities).
Msg("assert activity failed") Msg("assert activity failed")
return errors.Wrap(code.MobileUIActivityNotMatchError, "assert activity failed") return errors.Wrap(code.MobileUIActivityNotMatchError, "assert activity failed")
} }
+2 -2
View File
@@ -364,7 +364,7 @@ func TestDriver_IsAppInForeground(t *testing.T) {
t.FailNow() t.FailNow()
} }
err = driverExt.Driver.AssertAppForeground("com.android.settings") err = driverExt.Driver.AssertForegroundApp("com.android.settings")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@@ -375,7 +375,7 @@ func TestDriver_IsAppInForeground(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
err = driverExt.Driver.AssertAppForeground("com.android.settings") err = driverExt.Driver.AssertForegroundApp("com.android.settings")
if err == nil { if err == nil {
t.Fatal(err) t.Fatal(err)
} }
+1 -1
View File
@@ -282,7 +282,7 @@ func (dExt *DriverExt) DoValidation(check, assert, expected string, message ...s
case SelectorImage: case SelectorImage:
result = (dExt.IsImageExist(expected) == exp) result = (dExt.IsImageExist(expected) == exp)
case SelectorForegroundApp: case SelectorForegroundApp:
result = ((dExt.Driver.AssertAppForeground(expected) == nil) == exp) result = ((dExt.Driver.AssertForegroundApp(expected) == nil) == exp)
} }
if !result { if !result {
+3 -5
View File
@@ -486,15 +486,13 @@ type WebDriver interface {
// AppLaunch Launch an application with given bundle identifier in scope of current session. // AppLaunch Launch an application with given bundle identifier in scope of current session.
// !This method is only available since Xcode9 SDK // !This method is only available since Xcode9 SDK
AppLaunch(packageName string) error 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 // Either `true` if the app has been successfully terminated or `false` if it was not running
AppTerminate(packageName string) (bool, error) 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 returns current foreground app package name and activity name
GetForegroundApp() (app AppInfo, err error) GetForegroundApp() (app AppInfo, err error)
// AssertUI returns nil if the given package and activity are in foreground // AssertForegroundApp returns nil if the given package and activity are in foreground
AssertUI(packageName, activityType string) error AssertForegroundApp(packageName string, activityType ...string) error
// StartCamera Starts a new camera for recording // StartCamera Starts a new camera for recording
StartCamera() error StartCamera() error
+3 -7
View File
@@ -366,10 +366,6 @@ func (wd *wdaDriver) AppDeactivate(second float64) (err error) {
return return
} }
func (wd *wdaDriver) AssertAppForeground(packageName string) error {
return nil
}
func (wd *wdaDriver) GetForegroundApp() (app AppInfo, err error) { func (wd *wdaDriver) GetForegroundApp() (app AppInfo, err error) {
// appInfo, err := wd.ActiveAppInfo() // appInfo, err := wd.ActiveAppInfo()
// if err != nil { // if err != nil {
@@ -386,9 +382,9 @@ func (wd *wdaDriver) GetForegroundApp() (app AppInfo, err error) {
"GetForegroundApp not implemented for ios") "GetForegroundApp not implemented for ios")
} }
func (wd *wdaDriver) AssertUI(bundleId, viewControllerType string) error { func (wd *wdaDriver) AssertForegroundApp(bundleId string, viewControllerType ...string) error {
log.Debug().Str("bundleId", bundleId). log.Warn().Str("bundleId", bundleId).
Str("viewControllerType", viewControllerType). Strs("viewControllerType", viewControllerType).
Msg("ios view controller assertion not implemented, skip") Msg("ios view controller assertion not implemented, skip")
return nil return nil
} }
+4 -4
View File
@@ -231,7 +231,7 @@ func (l *LiveCrawler) Run(driver *DriverExt, enterPoint PointF) error {
return errors.Wrap(code.InterruptError, "live crawler interrupted") return errors.Wrap(code.InterruptError, "live crawler interrupted")
default: default:
// check if live room // 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 return err
} }
@@ -279,7 +279,7 @@ func (l *LiveCrawler) exitLiveRoom() error {
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
// check if back to feed page // 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 return nil
} }
} }
@@ -295,7 +295,7 @@ func (l *LiveCrawler) exitLiveRoom() error {
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
// check if back to feed page // 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 return nil
} }
} }
@@ -419,7 +419,7 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
// check if feed page // 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 return err
} }
} }