mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
refactor:
1, add options for AppLaunch/AppTerminate/AppClear; 2, add pre hook and post hook for AppLaunch/AppTerminate action
This commit is contained in:
@@ -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 <packagename> -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")
|
||||
// 强制停止应用,停止 <packagename> 相关的进程
|
||||
// adb shell am force-stop <packagename>
|
||||
|
||||
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")
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user