feat: add pre hook and post hook for Drag action

This commit is contained in:
lilong.129
2025-05-09 23:10:59 +08:00
parent f7ec4a06b4
commit 1dfc473d33
6 changed files with 21 additions and 13 deletions

View File

@@ -1 +1 @@
v5.0.0-beta-2505092306 v5.0.0-beta-2505092310

View File

@@ -375,12 +375,13 @@ func (ad *ADBDriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionO
log.Info().Float64("fromX", fromX).Float64("fromY", fromY). log.Info().Float64("fromX", fromX).Float64("fromY", fromY).
Float64("toX", toX).Float64("toY", toY).Msg("ADBDriver.Drag") Float64("toX", toX).Float64("toY", toY).Msg("ADBDriver.Drag")
fromX, fromY, toX, toY, err = handlerDrag(ad, fromX, fromY, toX, toY, opts...) actionOptions := option.NewActionOptions(opts...)
fromX, fromY, toX, toY, err = preHandler_Drag(ad, actionOptions, fromX, fromY, toX, toY)
if err != nil { if err != nil {
return err return err
} }
defer postHandler(ad, actionOptions)
actionOptions := option.NewActionOptions(opts...)
duration := 200.0 duration := 200.0
if actionOptions.Duration > 0 { if actionOptions.Duration > 0 {
duration = actionOptions.Duration * 1000 duration = actionOptions.Duration * 1000

View File

@@ -362,11 +362,12 @@ func (ud *UIA2Driver) Drag(fromX, fromY, toX, toY float64, opts ...option.Action
log.Info().Float64("fromX", fromX).Float64("fromY", fromY). log.Info().Float64("fromX", fromX).Float64("fromY", fromY).
Float64("toX", toX).Float64("toY", toY).Msg("UIA2Driver.Drag") Float64("toX", toX).Float64("toY", toY).Msg("UIA2Driver.Drag")
var err error actionOptions := option.NewActionOptions(opts...)
fromX, fromY, toX, toY, err = handlerDrag(ud, fromX, fromY, toX, toY, opts...) fromX, fromY, toX, toY, err := preHandler_Drag(ud, actionOptions, fromX, fromY, toX, toY)
if err != nil { if err != nil {
return err return err
} }
defer postHandler(ud, actionOptions)
data := map[string]interface{}{ data := map[string]interface{}{
"startX": fromX, "startX": fromX,

View File

@@ -114,17 +114,19 @@ func (wd *BrowserDriver) Setup() error {
} }
func (wd *BrowserDriver) Drag(fromX, fromY, toX, toY float64, options ...option.ActionOption) (err error) { func (wd *BrowserDriver) Drag(fromX, fromY, toX, toY float64, options ...option.ActionOption) (err error) {
fromX, fromY, toX, toY, err = handlerDrag(wd, fromX, fromY, toX, toY, options...) actionOptions := option.NewActionOptions(options...)
fromX, fromY, toX, toY, err = preHandler_Drag(wd, actionOptions, fromX, fromY, toX, toY)
if err != nil { if err != nil {
return err return err
} }
defer postHandler(wd, actionOptions)
data := map[string]interface{}{ data := map[string]interface{}{
"from_x": fromX, "from_x": fromX,
"from_y": fromY, "from_y": fromY,
"to_x": toX, "to_x": toX,
"to_y": toY, "to_y": toY,
} }
actionOptions := option.NewActionOptions(options...)
if actionOptions.Duration > 0 { if actionOptions.Duration > 0 {
data["duration"] = actionOptions.Duration data["duration"] = actionOptions.Duration

View File

@@ -48,18 +48,21 @@ func preHandler_DoubleTap(driver IDriver, options *option.ActionOptions, rawX, r
return x, y, nil return x, y, nil
} }
func handlerDrag(driver IDriver, rawFomX, rawFromY, rawToX, rawToY float64, opts ...option.ActionOption) ( func preHandler_Drag(driver IDriver, options *option.ActionOptions, rawFomX, rawFromY, rawToX, rawToY float64) (
fromX, fromY, toX, toY float64, err error) { fromX, fromY, toX, toY float64, err error) {
actionOptions := option.NewActionOptions(opts...) if options.PreHook != nil {
options.PreHook()
}
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(driver, rawFomX, rawFromY, rawToX, rawToY) fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(driver, rawFomX, rawFromY, rawToX, rawToY)
if err != nil { if err != nil {
return 0, 0, 0, 0, err return 0, 0, 0, 0, err
} }
fromX, fromY, toX, toY = actionOptions.ApplySwipeOffset(fromX, fromY, toX, toY) fromX, fromY, toX, toY = options.ApplySwipeOffset(fromX, fromY, toX, toY)
// mark UI operation // mark UI operation
if actionOptions.MarkOperationEnabled { if options.MarkOperationEnabled {
if markErr := MarkUIOperation(driver, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil { if markErr := MarkUIOperation(driver, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil {
log.Warn().Err(markErr).Msg("Failed to mark drag operation") log.Warn().Err(markErr).Msg("Failed to mark drag operation")
} }

View File

@@ -659,11 +659,12 @@ func (wd *WDADriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionO
toX = wd.toScale(toX) toX = wd.toScale(toX)
toY = wd.toScale(toY) toY = wd.toScale(toY)
var err error actionOptions := option.NewActionOptions(opts...)
fromX, fromY, toX, toY, err = handlerDrag(wd, fromX, fromY, toX, toY, opts...) fromX, fromY, toX, toY, err := preHandler_Drag(wd, actionOptions, fromX, fromY, toX, toY)
if err != nil { if err != nil {
return err return err
} }
defer postHandler(wd, actionOptions)
data := map[string]interface{}{ data := map[string]interface{}{
"fromX": math.Round(fromX*10) / 10, "fromX": math.Round(fromX*10) / 10,