diff --git a/internal/version/VERSION b/internal/version/VERSION index 4c099004..f53e0f57 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2505092306 +v5.0.0-beta-2505092310 diff --git a/uixt/android_driver_adb.go b/uixt/android_driver_adb.go index 6ecd6b6d..b8248d32 100644 --- a/uixt/android_driver_adb.go +++ b/uixt/android_driver_adb.go @@ -375,12 +375,13 @@ func (ad *ADBDriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionO log.Info().Float64("fromX", fromX).Float64("fromY", fromY). 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 { return err } + defer postHandler(ad, actionOptions) - actionOptions := option.NewActionOptions(opts...) duration := 200.0 if actionOptions.Duration > 0 { duration = actionOptions.Duration * 1000 diff --git a/uixt/android_driver_uia2.go b/uixt/android_driver_uia2.go index 9252904f..124592fc 100644 --- a/uixt/android_driver_uia2.go +++ b/uixt/android_driver_uia2.go @@ -362,11 +362,12 @@ func (ud *UIA2Driver) Drag(fromX, fromY, toX, toY float64, opts ...option.Action log.Info().Float64("fromX", fromX).Float64("fromY", fromY). Float64("toX", toX).Float64("toY", toY).Msg("UIA2Driver.Drag") - var err error - fromX, fromY, toX, toY, err = handlerDrag(ud, fromX, fromY, toX, toY, opts...) + actionOptions := option.NewActionOptions(opts...) + fromX, fromY, toX, toY, err := preHandler_Drag(ud, actionOptions, fromX, fromY, toX, toY) if err != nil { return err } + defer postHandler(ud, actionOptions) data := map[string]interface{}{ "startX": fromX, diff --git a/uixt/browser_driver.go b/uixt/browser_driver.go index dcab3412..044f3fb9 100644 --- a/uixt/browser_driver.go +++ b/uixt/browser_driver.go @@ -114,17 +114,19 @@ func (wd *BrowserDriver) Setup() 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 { return err } + defer postHandler(wd, actionOptions) + data := map[string]interface{}{ "from_x": fromX, "from_y": fromY, "to_x": toX, "to_y": toY, } - actionOptions := option.NewActionOptions(options...) if actionOptions.Duration > 0 { data["duration"] = actionOptions.Duration diff --git a/uixt/driver_handler.go b/uixt/driver_handler.go index b7789ec9..36479885 100644 --- a/uixt/driver_handler.go +++ b/uixt/driver_handler.go @@ -48,18 +48,21 @@ func preHandler_DoubleTap(driver IDriver, options *option.ActionOptions, rawX, r 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) { - actionOptions := option.NewActionOptions(opts...) + if options.PreHook != nil { + options.PreHook() + } + fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(driver, rawFomX, rawFromY, rawToX, rawToY) if err != nil { 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 - if actionOptions.MarkOperationEnabled { + if options.MarkOperationEnabled { if markErr := MarkUIOperation(driver, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil { log.Warn().Err(markErr).Msg("Failed to mark drag operation") } diff --git a/uixt/ios_driver_wda.go b/uixt/ios_driver_wda.go index 8f6b57d2..2fc3b4f8 100644 --- a/uixt/ios_driver_wda.go +++ b/uixt/ios_driver_wda.go @@ -659,11 +659,12 @@ func (wd *WDADriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionO toX = wd.toScale(toX) toY = wd.toScale(toY) - var err error - fromX, fromY, toX, toY, err = handlerDrag(wd, fromX, fromY, toX, toY, opts...) + actionOptions := option.NewActionOptions(opts...) + fromX, fromY, toX, toY, err := preHandler_Drag(wd, actionOptions, fromX, fromY, toX, toY) if err != nil { return err } + defer postHandler(wd, actionOptions) data := map[string]interface{}{ "fromX": math.Round(fromX*10) / 10,