From 8c917b6a3543787c6d71b270ac0fc15eb402027a Mon Sep 17 00:00:00 2001 From: buyuxiang <347586493@qq.com> Date: Wed, 26 Jul 2023 15:50:32 +0800 Subject: [PATCH] compatibility: support indicating options separately in MobileAction level --- hrp/pkg/uixt/action.go | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/hrp/pkg/uixt/action.go b/hrp/pkg/uixt/action.go index eba5a990..8e8459ec 100644 --- a/hrp/pkg/uixt/action.go +++ b/hrp/pkg/uixt/action.go @@ -65,6 +65,16 @@ type MobileAction struct { Method ActionMethod `json:"method,omitempty" yaml:"method,omitempty"` Params interface{} `json:"params,omitempty" yaml:"params,omitempty"` Options *ActionOptions `json:"options,omitempty" yaml:"options,omitempty"` + ActionOptions +} + +func (ma MobileAction) GetOptions() []ActionOption { + var actionOptionList []ActionOption + if ma.Options != nil { + actionOptionList = append(actionOptionList, ma.Options.Options()...) + } + actionOptionList = append(actionOptionList, ma.ActionOptions.Options()...) + return actionOptionList } // (x1, y1) is the top left corner, (x2, y2) is the bottom right corner @@ -403,19 +413,19 @@ func (dExt *DriverExt) DoAction(action MobileAction) error { ACTION_AppLaunch, action.Params) case ACTION_SwipeToTapApp: if appName, ok := action.Params.(string); ok { - return dExt.swipeToTapApp(appName, action.Options.Options()...) + return dExt.swipeToTapApp(appName, action.GetOptions()...) } return fmt.Errorf("invalid %s params, should be app name(string), got %v", ACTION_SwipeToTapApp, action.Params) case ACTION_SwipeToTapText: if text, ok := action.Params.(string); ok { - return dExt.swipeToTapTexts([]string{text}, action.Options.Options()...) + return dExt.swipeToTapTexts([]string{text}, action.GetOptions()...) } return fmt.Errorf("invalid %s params, should be app text(string), got %v", ACTION_SwipeToTapText, action.Params) case ACTION_SwipeToTapTexts: if texts, ok := action.Params.([]string); ok { - return dExt.swipeToTapTexts(texts, action.Options.Options()...) + return dExt.swipeToTapTexts(texts, action.GetOptions()...) } return fmt.Errorf("invalid %s params, should be app text([]string), got %v", ACTION_SwipeToTapText, action.Params) @@ -441,7 +451,7 @@ func (dExt *DriverExt) DoAction(action MobileAction) error { } x, _ := location[0].(float64) y, _ := location[1].(float64) - return dExt.TapXY(x, y, action.Options.Options()...) + return dExt.TapXY(x, y, action.GetOptions()...) } return fmt.Errorf("invalid %s params: %v", ACTION_TapXY, action.Params) case ACTION_TapAbsXY: @@ -452,22 +462,22 @@ func (dExt *DriverExt) DoAction(action MobileAction) error { } x, _ := location[0].(float64) y, _ := location[1].(float64) - return dExt.TapAbsXY(x, y, action.Options.Options()...) + return dExt.TapAbsXY(x, y, action.GetOptions()...) } return fmt.Errorf("invalid %s params: %v", ACTION_TapAbsXY, action.Params) case ACTION_Tap: if param, ok := action.Params.(string); ok { - return dExt.Tap(param, action.Options.Options()...) + return dExt.Tap(param, action.GetOptions()...) } return fmt.Errorf("invalid %s params: %v", ACTION_Tap, action.Params) case ACTION_TapByOCR: if ocrText, ok := action.Params.(string); ok { - return dExt.TapByOCR(ocrText, action.Options.Options()...) + return dExt.TapByOCR(ocrText, action.GetOptions()...) } return fmt.Errorf("invalid %s params: %v", ACTION_TapByOCR, action.Params) case ACTION_TapByCV: if imagePath, ok := action.Params.(string); ok { - return dExt.TapByCV(imagePath, action.Options.Options()...) + return dExt.TapByCV(imagePath, action.GetOptions()...) } return fmt.Errorf("invalid %s params: %v", ACTION_TapByCV, action.Params) case ACTION_DoubleTapXY: @@ -487,14 +497,14 @@ func (dExt *DriverExt) DoAction(action MobileAction) error { } return fmt.Errorf("invalid %s params: %v", ACTION_DoubleTap, action.Params) case ACTION_Swipe: - swipeAction := dExt.prepareSwipeAction(action.Options.Options()...) + swipeAction := dExt.prepareSwipeAction(action.GetOptions()...) return swipeAction(dExt) case ACTION_Input: // input text on current active element // append \n to send text with enter // send \b\b\b to delete 3 chars param := fmt.Sprintf("%v", action.Params) - return dExt.Driver.Input(param, action.Options.Options()...) + return dExt.Driver.Input(param, action.GetOptions()...) case ACTION_Back: return dExt.Driver.PressBack() case ACTION_Sleep: