diff --git a/examples/uitest/demo_ios_wda_log.json b/examples/uitest/demo_ios_wda_log.json index 32a84e8e..d5d1171c 100644 --- a/examples/uitest/demo_ios_wda_log.json +++ b/examples/uitest/demo_ios_wda_log.json @@ -90,9 +90,11 @@ { "method": "tap_ocr", "params": "推荐", - "options": { - "identifier": "点击推荐" - } + "identifier": "点击推荐", + "offset": [ + 0, + -1 + ] }, { "method": "sleep", diff --git a/internal/version/VERSION b/internal/version/VERSION index 9066599a..43e8ef92 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-250701 +v5.0.0-250702 diff --git a/tests/loader_test.go b/tests/loader_test.go index 851c9fc8..5e98e06c 100644 --- a/tests/loader_test.go +++ b/tests/loader_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/assert" hrp "github.com/httprunner/httprunner/v5" + "github.com/httprunner/httprunner/v5/uixt/option" ) func TestLoadTestCases(t *testing.T) { @@ -63,3 +64,17 @@ func TestLoadCase(t *testing.T) { assert.Equal(t, tcJSON.Steps[1].StepName, tcYAML.Steps[1].StepName) assert.Equal(t, tcJSON.Steps[1].Request, tcJSON.Steps[1].Request) } + +func TestLoadCaseWithTapOffset(t *testing.T) { + // Load the android_swipe_tap_loadmore.json test case + testCasePath := "../examples/uitest/demo_ios_wda_log.json" + tc := &hrp.TestCaseDef{} + err := hrp.LoadFileObject(testCasePath, tc) + assert.Nil(t, err) + + action := tc.Steps[3].IOS.Actions[0] + assert.Equal(t, option.ACTION_TapByOCR, action.Method) + assert.Equal(t, "推荐", action.Params) + assert.Equal(t, "点击推荐", action.ActionOptions.Identifier) + assert.Equal(t, []int{0, -1}, action.ActionOptions.ScreenFilterOptions.TapOffset) +} diff --git a/uixt/driver_ext_swipe.go b/uixt/driver_ext_swipe.go index bbfa3f37..cfbda133 100644 --- a/uixt/driver_ext_swipe.go +++ b/uixt/driver_ext_swipe.go @@ -98,9 +98,6 @@ func (dExt *XTDriver) SwipeToTapTexts(texts []string, opts ...option.ActionOptio log.Info().Strs("texts", texts).Msg("swipe to tap texts") opts = append(opts, option.WithMatchOne(true), option.WithRegex(true)) - actionOptions := option.NewActionOptions(opts...) - actionOptions.Identifier = "" - optionsWithoutIdentifier := actionOptions.Options() var point ai.PointF findTexts := func(d *XTDriver) error { var err error @@ -116,7 +113,7 @@ func (dExt *XTDriver) SwipeToTapTexts(texts []string, opts ...option.ActionOptio } points, err := screenResult.Texts.FindTexts(texts, - convertToAbsoluteScope(dExt.IDriver, optionsWithoutIdentifier...)...) + convertToAbsoluteScope(dExt.IDriver, opts...)...) if err != nil { log.Error().Err(err).Strs("texts", texts).Msg("find texts failed") return err @@ -132,8 +129,8 @@ func (dExt *XTDriver) SwipeToTapTexts(texts []string, opts ...option.ActionOptio return d.TapAbsXY(point.X, point.Y, opts...) } - findAction := prepareSwipeAction(dExt, nil, optionsWithoutIdentifier...) - return dExt.LoopUntil(findAction, findTexts, foundTextAction, optionsWithoutIdentifier...) + findAction := prepareSwipeAction(dExt, nil, opts...) + return dExt.LoopUntil(findAction, findTexts, foundTextAction, opts...) } func (dExt *XTDriver) SwipeToTapApp(appName string, opts ...option.ActionOption) error { @@ -160,7 +157,7 @@ func (dExt *XTDriver) SwipeToTapApp(appName string, opts ...option.ActionOption) actionOptions := option.NewActionOptions(opts...) // tap app icon above the text if len(actionOptions.TapOffset) == 0 { - opts = append(opts, option.WithTapOffset(0, -25)) + opts = append(opts, option.WithTapOffset(0, -100)) } // set default swipe interval to 1 second if builtin.IsZeroFloat64(actionOptions.Interval) { diff --git a/uixt/driver_ext_test.go b/uixt/driver_ext_test.go index 112139dc..88b34c92 100644 --- a/uixt/driver_ext_test.go +++ b/uixt/driver_ext_test.go @@ -9,9 +9,10 @@ import ( "testing" "time" - "github.com/httprunner/httprunner/v5/uixt/option" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/httprunner/httprunner/v5/uixt/option" ) func TestDriverExt_NewMethod1(t *testing.T) { @@ -142,7 +143,7 @@ func TestDriverExt_prepareSwipeAction(t *testing.T) { func TestDriverExt_SwipeToTapApp(t *testing.T) { driver := setupDriverExt(t) - err := driver.SwipeToTapApp("抖音") + err := driver.SwipeToTapApp("抖音", option.WithPreMarkOperation(true)) assert.Nil(t, err) } diff --git a/uixt/mcp_tools_swipe.go b/uixt/mcp_tools_swipe.go index d624da7f..eaa1a0d6 100644 --- a/uixt/mcp_tools_swipe.go +++ b/uixt/mcp_tools_swipe.go @@ -319,19 +319,6 @@ func (t *ToolSwipeToTapApp) Implement() server.ToolHandlerFunc { // Build action options from request structure opts := unifiedReq.Options() - // Add boolean options - if unifiedReq.IgnoreNotFoundError { - opts = append(opts, option.WithIgnoreNotFoundError(true)) - } - - // Add numeric options - if unifiedReq.MaxRetryTimes > 0 { - opts = append(opts, option.WithMaxRetryTimes(unifiedReq.MaxRetryTimes)) - } - if unifiedReq.Index > 0 { - opts = append(opts, option.WithIndex(unifiedReq.Index)) - } - // Swipe to tap app action logic err = driverExt.SwipeToTapApp(unifiedReq.AppName, opts...) if err != nil { diff --git a/uixt/option/screen.go b/uixt/option/screen.go index 07d13f93..56e49e5d 100644 --- a/uixt/option/screen.go +++ b/uixt/option/screen.go @@ -227,7 +227,7 @@ type ScreenFilterOptions struct { AbsScope AbsScope `json:"abs_scope,omitempty" yaml:"abs_scope,omitempty"` Regex bool `json:"regex,omitempty" yaml:"regex,omitempty"` // use regex to match text - TapOffset []int `json:"tap_offset,omitempty" yaml:"tap_offset,omitempty"` // tap with absolute point offset + TapOffset []int `json:"offset,omitempty" yaml:"offset,omitempty"` // tap with absolute point offset TapRandomRect bool `json:"tap_random_rect,omitempty" yaml:"tap_random_rect,omitempty"` // tap random point in text/image rectangle SwipeOffset []int `json:"swipe_offset,omitempty" yaml:"swipe_offset,omitempty"` // swipe with direction offset OffsetRandomRange []int `json:"offset_random_range,omitempty" yaml:"offset_random_range,omitempty"` // set random range [min, max] for tap/swipe points