From 338c2c77aa506fd861bb9c1d8bc2858062ad9397 Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Tue, 6 May 2025 00:38:07 +0800 Subject: [PATCH] refactor: handlerDrag --- internal/version/VERSION | 2 +- uixt/android_driver_adb.go | 13 +++---------- uixt/android_driver_uia2.go | 12 ++---------- uixt/browser_driver.go | 20 +++++++++----------- uixt/driver_ext_handler.go | 20 ++++++++++++++++++++ 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/internal/version/VERSION b/internal/version/VERSION index 012a17dd..263f357d 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2505060026 +v5.0.0-beta-2505060038 diff --git a/uixt/android_driver_adb.go b/uixt/android_driver_adb.go index c8b61d90..4727def9 100644 --- a/uixt/android_driver_adb.go +++ b/uixt/android_driver_adb.go @@ -374,20 +374,13 @@ func (ad *ADBDriver) TouchAndHold(x, y float64, opts ...option.ActionOption) (er func (ad *ADBDriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionOption) (err error) { log.Info().Float64("fromX", fromX).Float64("fromY", fromY). Float64("toX", toX).Float64("toY", toY).Msg("ADBDriver.Drag") - actionOptions := option.NewActionOptions(opts...) - fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ad, fromX, fromY, toX, toY) + + fromX, fromY, toX, toY, err = handlerDrag(ad, fromX, fromY, toX, toY, opts...) if err != nil { return err } - fromX, fromY, toX, toY = actionOptions.ApplySwipeOffset(fromX, fromY, toX, toY) - - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(ad, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark drag operation") - } - } + 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 1b0d751c..705fbf1c 100644 --- a/uixt/android_driver_uia2.go +++ b/uixt/android_driver_uia2.go @@ -356,20 +356,12 @@ func (ud *UIA2Driver) TouchAndHold(x, y float64, opts ...option.ActionOption) (e func (ud *UIA2Driver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionOption) error { 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 = convertToAbsoluteCoordinates(ud, fromX, fromY, toX, toY) + fromX, fromY, toX, toY, err = handlerDrag(ud, fromX, fromY, toX, toY, opts...) if err != nil { return err } - actionOptions := option.NewActionOptions(opts...) - fromX, fromY, toX, toY = actionOptions.ApplySwipeOffset(fromX, fromY, toX, toY) - - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(ud, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark drag operation") - } - } data := map[string]interface{}{ "startX": fromX, diff --git a/uixt/browser_driver.go b/uixt/browser_driver.go index 8604a9bb..cb708f8c 100644 --- a/uixt/browser_driver.go +++ b/uixt/browser_driver.go @@ -103,7 +103,13 @@ func NewBrowserDriver(device *BrowserDevice) (driver *BrowserDriver, err error) return driver, nil } -func (wd *BrowserDriver) Drag(fromX, fromY, toX, toY float64, options ...option.ActionOption) (err error) { +func (wd *BrowserDriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionOption) error { + var err error + fromX, fromY, toX, toY, err = handlerDrag(wd, fromX, fromY, toX, toY, opts...) + if err != nil { + return err + } + data := map[string]interface{}{ "from_x": fromX, "from_y": fromY, @@ -111,21 +117,13 @@ func (wd *BrowserDriver) Drag(fromX, fromY, toX, toY float64, options ...option. "to_y": toY, } - actionOptions := option.NewActionOptions(options...) - - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(wd, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark drag operation") - } - } - + actionOptions := option.NewActionOptions(opts...) if actionOptions.Duration > 0 { data["duration"] = actionOptions.Duration } _, err = wd.HttpPOST(data, wd.sessionId, "ui/drag") - return + return err } func (wd *BrowserDriver) AppLaunch(packageName string) (err error) { diff --git a/uixt/driver_ext_handler.go b/uixt/driver_ext_handler.go index 9fb29a3e..f59091ce 100644 --- a/uixt/driver_ext_handler.go +++ b/uixt/driver_ext_handler.go @@ -25,3 +25,23 @@ func handlerTapAbsXY(driver IDriver, rawX, rawY float64, opts ...option.ActionOp return x, y, duration, nil } + +func handlerDrag(driver IDriver, rawFomX, rawFromY, rawToX, rawToY float64, opts ...option.ActionOption) ( + fromX, fromY, toX, toY float64, err error) { + + actionOptions := option.NewActionOptions(opts...) + 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) + + // mark UI operation + if actionOptions.MarkOperationEnabled { + if markErr := MarkUIOperation(driver, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil { + log.Warn().Err(markErr).Msg("Failed to mark drag operation") + } + } + + return fromX, fromY, toX, toY, nil +}