diff --git a/internal/version/VERSION b/internal/version/VERSION index 0c424d86..012a17dd 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2505060010 +v5.0.0-beta-2505060026 diff --git a/uixt/android_driver_adb.go b/uixt/android_driver_adb.go index cf8ff702..c8b61d90 100644 --- a/uixt/android_driver_adb.go +++ b/uixt/android_driver_adb.go @@ -307,20 +307,16 @@ func (ad *ADBDriver) TapXY(x, y float64, opts ...option.ActionOption) error { func (ad *ADBDriver) TapAbsXY(x, y float64, opts ...option.ActionOption) error { log.Info().Float64("x", x).Float64("y", y).Msg("ADBDriver.TapAbsXY") - actionOptions := option.NewActionOptions(opts...) - x, y = actionOptions.ApplyTapOffset(x, y) - - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(ad, ACTION_TapAbsXY, []float64{x, y}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark tap operation") - } + var err error + x, y, _, err = handlerTapAbsXY(ad, x, y, opts...) + if err != nil { + return err } // adb shell input tap x y xStr := fmt.Sprintf("%.1f", x) yStr := fmt.Sprintf("%.1f", y) - _, err := ad.runShellCommand("input", "tap", xStr, yStr) + _, err = ad.runShellCommand("input", "tap", xStr, yStr) if err != nil { return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr)) } diff --git a/uixt/android_driver_uia2.go b/uixt/android_driver_uia2.go index 47b435f3..1b0d751c 100644 --- a/uixt/android_driver_uia2.go +++ b/uixt/android_driver_uia2.go @@ -298,20 +298,14 @@ func (ud *UIA2Driver) TapXY(x, y float64, opts ...option.ActionOption) error { func (ud *UIA2Driver) TapAbsXY(x, y float64, opts ...option.ActionOption) error { log.Info().Float64("x", x).Float64("y", y).Msg("UIA2Driver.TapAbsXY") // register(postHandler, new Tap("/wd/hub/session/:sessionId/appium/tap")) - actionOptions := option.NewActionOptions(opts...) - x, y = actionOptions.ApplyTapOffset(x, y) - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(ud, ACTION_TapAbsXY, []float64{x, y}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark tap operation") - } + var err error + var duration float64 + x, y, duration, err = handlerTapAbsXY(ud, x, y, opts...) + if err != nil { + return err } - duration := 100.0 - if actionOptions.PressDuration > 0 { - duration = actionOptions.PressDuration * 1000 // convert to ms - } data := map[string]interface{}{ "actions": []interface{}{ map[string]interface{}{ @@ -330,7 +324,7 @@ func (ud *UIA2Driver) TapAbsXY(x, y float64, opts ...option.ActionOption) error option.MergeOptions(data, opts...) urlStr := fmt.Sprintf("/session/%s/actions/tap", ud.Session.ID) - _, err := ud.Session.POST(data, urlStr) + _, err = ud.Session.POST(data, urlStr) return err } diff --git a/uixt/browser_driver.go b/uixt/browser_driver.go index 869ef9e4..8604a9bb 100644 --- a/uixt/browser_driver.go +++ b/uixt/browser_driver.go @@ -524,26 +524,20 @@ func (wd *BrowserDriver) Tap(x, y float64, options ...option.ActionOption) error return wd.TapFloat(x, y, options...) } -func (wd *BrowserDriver) TapFloat(x, y float64, options ...option.ActionOption) error { - actionOptions := option.NewActionOptions(options...) - - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(wd, ACTION_TapAbsXY, []float64{x, y}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark tap operation") - } +func (wd *BrowserDriver) TapFloat(x, y float64, opts ...option.ActionOption) error { + var err error + var duration float64 + x, y, duration, err = handlerTapAbsXY(wd, x, y, opts...) + if err != nil { + return err } - duration := 0.1 - if actionOptions.Duration > 0 { - duration = actionOptions.Duration - } data := map[string]interface{}{ "x": x, "y": y, "duration": duration, } - _, err := wd.HttpPOST(data, wd.sessionId, "ui/tap") + _, err = wd.HttpPOST(data, wd.sessionId, "ui/tap") return err } diff --git a/uixt/driver_ext_handler.go b/uixt/driver_ext_handler.go new file mode 100644 index 00000000..9fb29a3e --- /dev/null +++ b/uixt/driver_ext_handler.go @@ -0,0 +1,27 @@ +package uixt + +import ( + "github.com/httprunner/httprunner/v5/uixt/option" + "github.com/rs/zerolog/log" +) + +func handlerTapAbsXY(driver IDriver, rawX, rawY float64, opts ...option.ActionOption) ( + x, y, duration float64, err error) { + + actionOptions := option.NewActionOptions(opts...) + x, y = actionOptions.ApplyTapOffset(rawX, rawY) + + // mark UI operation + if actionOptions.MarkOperationEnabled { + if markErr := MarkUIOperation(driver, ACTION_TapAbsXY, []float64{x, y}); markErr != nil { + log.Warn().Err(markErr).Msg("Failed to mark tap operation") + } + } + + duration = 100.0 + if actionOptions.PressDuration > 0 { + duration = actionOptions.PressDuration * 1000 // convert to ms + } + + return x, y, duration, nil +} diff --git a/uixt/harmony_driver_hdc.go b/uixt/harmony_driver_hdc.go index 4c609e7e..88499080 100644 --- a/uixt/harmony_driver_hdc.go +++ b/uixt/harmony_driver_hdc.go @@ -154,16 +154,14 @@ func (hd *HDCDriver) TapXY(x, y float64, opts ...option.ActionOption) error { func (hd *HDCDriver) TapAbsXY(x, y float64, opts ...option.ActionOption) error { log.Info().Float64("x", x).Float64("y", y).Msg("HDCDriver.TapAbsXY") - actionOptions := option.NewActionOptions(opts...) - x, y = actionOptions.ApplyTapOffset(x, y) - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(hd, ACTION_TapAbsXY, []float64{x, y}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark tap operation") - } + var err error + x, y, _, err = handlerTapAbsXY(hd, x, y, opts...) + if err != nil { + return err } + actionOptions := option.NewActionOptions(opts...) if actionOptions.Identifier != "" { startTime := int(time.Now().UnixMilli()) hd.points = append(hd.points, ExportPoint{Start: startTime, End: startTime + 100, Ext: actionOptions.Identifier, RunTime: 100}) diff --git a/uixt/ios_driver_wda.go b/uixt/ios_driver_wda.go index 8cd0ae2e..e5865632 100644 --- a/uixt/ios_driver_wda.go +++ b/uixt/ios_driver_wda.go @@ -593,14 +593,11 @@ func (wd *WDADriver) TapXY(x, y float64, opts ...option.ActionOption) error { func (wd *WDADriver) TapAbsXY(x, y float64, opts ...option.ActionOption) error { log.Info().Float64("x", x).Float64("y", y).Msg("WDADriver.TapAbsXY") // [[FBRoute POST:@"/wda/tap/:uuid"] respondWithTarget:self action:@selector(handleTap:)] - actionOptions := option.NewActionOptions(opts...) - x, y = actionOptions.ApplyTapOffset(x, y) - // mark UI operation - if actionOptions.MarkOperationEnabled { - if markErr := MarkUIOperation(wd, ACTION_TapAbsXY, []float64{x, y}); markErr != nil { - log.Warn().Err(markErr).Msg("Failed to mark tap operation") - } + var err error + x, y, _, err = handlerTapAbsXY(wd, x, y, opts...) + if err != nil { + return err } data := map[string]interface{}{ @@ -610,7 +607,7 @@ func (wd *WDADriver) TapAbsXY(x, y float64, opts ...option.ActionOption) error { option.MergeOptions(data, opts...) urlStr := fmt.Sprintf("/session/%s/wda/tap/0", wd.Session.ID) - _, err := wd.Session.POST(data, urlStr) + _, err = wd.Session.POST(data, urlStr) return err }