diff --git a/internal/version/VERSION b/internal/version/VERSION index 335f1f9c..6a4c76d1 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2505092315 +v5.0.0-beta-2505092330 diff --git a/uixt/android_driver_adb.go b/uixt/android_driver_adb.go index 0fa08110..80493956 100644 --- a/uixt/android_driver_adb.go +++ b/uixt/android_driver_adb.go @@ -266,10 +266,15 @@ func (ad *ADBDriver) PressKeyCode(keyCode KeyCode, metaState KeyMeta) (err error return } -func (ad *ADBDriver) AppLaunch(packageName string) (err error) { +func (ad *ADBDriver) AppLaunch(packageName string, opts ...option.ActionOption) (err error) { log.Info().Str("packageName", packageName).Msg("ADBDriver.AppLaunch") // 不指定 Activity 名称启动(启动主 Activity) // adb shell monkey -p -c android.intent.category.LAUNCHER 1 + + actionOptions := option.NewActionOptions(opts...) + preHandler_AppLaunch(ad, actionOptions) + defer postHandler(ad, actionOptions) + sOutput, err := ad.runShellCommand( "monkey", "-p", packageName, "-c", "android.intent.category.LAUNCHER", "1", ) @@ -284,10 +289,15 @@ func (ad *ADBDriver) AppLaunch(packageName string) (err error) { return nil } -func (ad *ADBDriver) AppTerminate(packageName string) (successful bool, err error) { +func (ad *ADBDriver) AppTerminate(packageName string, opts ...option.ActionOption) (successful bool, err error) { log.Info().Str("packageName", packageName).Msg("ADBDriver.AppTerminate") // 强制停止应用,停止 相关的进程 // adb shell am force-stop + + actionOptions := option.NewActionOptions(opts...) + preHandler_AppTerminate(ad, actionOptions) + defer postHandler(ad, actionOptions) + _, err = ad.runShellCommand("am", "force-stop", packageName) if err != nil { return false, errors.Wrap(err, "force-stop app failed") @@ -541,7 +551,7 @@ func (ad *ADBDriver) SendKeysByAdbKeyBoard(text string) (err error) { return } -func (ad *ADBDriver) AppClear(packageName string) error { +func (ad *ADBDriver) AppClear(packageName string, opts ...option.ActionOption) error { log.Info().Str("packageName", packageName).Msg("ADBDriver.AppClear") if _, err := ad.runShellCommand("pm", "clear", packageName); err != nil { log.Error().Str("packageName", packageName).Err(err).Msg("failed to clear package cache") diff --git a/uixt/browser_driver.go b/uixt/browser_driver.go index 044f3fb9..81933236 100644 --- a/uixt/browser_driver.go +++ b/uixt/browser_driver.go @@ -138,7 +138,11 @@ func (wd *BrowserDriver) Drag(fromX, fromY, toX, toY float64, options ...option. return } -func (wd *BrowserDriver) AppLaunch(packageName string) (err error) { +func (wd *BrowserDriver) AppLaunch(packageName string, opts ...option.ActionOption) (err error) { + actionOptions := option.NewActionOptions(opts...) + preHandler_AppLaunch(wd, actionOptions) + defer postHandler(wd, actionOptions) + data := map[string]interface{}{ "url": packageName, } @@ -461,7 +465,11 @@ func (wd *BrowserDriver) Unlock() (err error) { // 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 -func (wd *BrowserDriver) AppTerminate(packageName string) (bool, error) { +func (wd *BrowserDriver) AppTerminate(packageName string, opts ...option.ActionOption) (bool, error) { + actionOptions := option.NewActionOptions(opts...) + preHandler_AppTerminate(wd, actionOptions) + defer postHandler(wd, actionOptions) + return true, wd.DeleteSession() } @@ -474,7 +482,7 @@ func (wd *BrowserDriver) Back() error { return wd.PressBack() } -func (wd *BrowserDriver) AppClear(packageName string) error { +func (wd *BrowserDriver) AppClear(packageName string, opts ...option.ActionOption) error { return errors.New("not support") } diff --git a/uixt/driver.go b/uixt/driver.go index 72d5ab06..5a6e7420 100644 --- a/uixt/driver.go +++ b/uixt/driver.go @@ -69,9 +69,9 @@ type IDriver interface { Backspace(count int, opts ...option.ActionOption) error // app related - AppLaunch(packageName string) error - AppTerminate(packageName string) (bool, error) - AppClear(packageName string) error + AppLaunch(packageName string, opts ...option.ActionOption) error + AppTerminate(packageName string, opts ...option.ActionOption) (bool, error) + AppClear(packageName string, opts ...option.ActionOption) error // image related PushImage(localPath string) error diff --git a/uixt/driver_handler.go b/uixt/driver_handler.go index ec81fe29..5b58f78d 100644 --- a/uixt/driver_handler.go +++ b/uixt/driver_handler.go @@ -94,6 +94,22 @@ func preHandler_Swipe(driver IDriver, options *option.ActionOptions, rawFomX, ra return fromX, fromY, toX, toY, nil } +func preHandler_AppLaunch(_ IDriver, options *option.ActionOptions) (err error) { + if options.PreHook != nil { + options.PreHook() + } + + return nil +} + +func preHandler_AppTerminate(_ IDriver, options *option.ActionOptions) (err error) { + if options.PreHook != nil { + options.PreHook() + } + + return nil +} + func postHandler(_ IDriver, options *option.ActionOptions) { if options.PostHook != nil { options.PostHook() diff --git a/uixt/harmony_driver_hdc.go b/uixt/harmony_driver_hdc.go index c12b831d..0719d33f 100644 --- a/uixt/harmony_driver_hdc.go +++ b/uixt/harmony_driver_hdc.go @@ -119,13 +119,22 @@ func (hd *HDCDriver) Unlock() (err error) { return hd.Swipe(500, 1500, 500, 500) } -func (hd *HDCDriver) AppLaunch(packageName string) error { +func (hd *HDCDriver) AppLaunch(packageName string, opts ...option.ActionOption) error { + actionOptions := option.NewActionOptions(opts...) + preHandler_AppLaunch(hd, actionOptions) + defer postHandler(hd, actionOptions) + // Todo return types.ErrDriverNotImplemented } -func (hd *HDCDriver) AppTerminate(packageName string) (bool, error) { +func (hd *HDCDriver) AppTerminate(packageName string, opts ...option.ActionOption) (bool, error) { log.Info().Str("packageName", packageName).Msg("HDCDriver.AppTerminate") + + actionOptions := option.NewActionOptions(opts...) + preHandler_AppTerminate(hd, actionOptions) + defer postHandler(hd, actionOptions) + _, err := hd.Device.RunShellCommand("aa", "force-stop", packageName) if err != nil { log.Error().Err(err).Msg("failed to terminal app") @@ -214,7 +223,7 @@ func (hd *HDCDriver) Input(text string, opts ...option.ActionOption) error { return hd.uiDriver.InputText(text) } -func (hd *HDCDriver) AppClear(packageName string) error { +func (hd *HDCDriver) AppClear(packageName string, opts ...option.ActionOption) error { return types.ErrDriverNotImplemented } diff --git a/uixt/ios_driver_wda.go b/uixt/ios_driver_wda.go index 2fc3b4f8..300c405d 100644 --- a/uixt/ios_driver_wda.go +++ b/uixt/ios_driver_wda.go @@ -491,9 +491,14 @@ func (wd *WDADriver) AlertSendKeys(text string) (err error) { return } -func (wd *WDADriver) AppLaunch(bundleId string) (err error) { +func (wd *WDADriver) AppLaunch(bundleId string, opts ...option.ActionOption) (err error) { log.Info().Str("bundleId", bundleId).Msg("WDADriver.AppLaunch") // [[FBRoute POST:@"/wda/apps/launch"] respondWithTarget:self action:@selector(handleSessionAppLaunch:)] + + actionOptions := option.NewActionOptions(opts...) + preHandler_AppLaunch(wd, actionOptions) + defer postHandler(wd, actionOptions) + data := make(map[string]interface{}) data["bundleId"] = bundleId data["environment"] = map[string]interface{}{ @@ -520,9 +525,14 @@ func (wd *WDADriver) AppLaunchUnattached(bundleId string) (err error) { return nil } -func (wd *WDADriver) AppTerminate(bundleId string) (successful bool, err error) { +func (wd *WDADriver) AppTerminate(bundleId string, opts ...option.ActionOption) (successful bool, err error) { log.Info().Str("bundleId", bundleId).Msg("WDADriver.AppTerminate") // [[FBRoute POST:@"/wda/apps/terminate"] respondWithTarget:self action:@selector(handleSessionAppTerminate:)] + + actionOptions := option.NewActionOptions(opts...) + preHandler_AppTerminate(wd, actionOptions) + defer postHandler(wd, actionOptions) + data := map[string]interface{}{"bundleId": bundleId} var rawResp DriverRawResponse urlStr := fmt.Sprintf("/session/%s/wda/apps/terminate", wd.Session.ID) @@ -734,7 +744,7 @@ func (wd *WDADriver) Backspace(count int, opts ...option.ActionOption) (err erro return } -func (wd *WDADriver) AppClear(packageName string) error { +func (wd *WDADriver) AppClear(packageName string, opts ...option.ActionOption) error { return types.ErrDriverNotImplemented }