mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-07 08:27:35 +08:00
refactor: AssertForegroundApp
This commit is contained in:
@@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user