mirror of
https://github.com/httprunner/httprunner.git
synced 2026-06-26 01:51:29 +08:00
Merge branch 'fix-swipe-to-tap' into 'master'
修复 tap offset 问题 See merge request iesqa/httprunner!115
This commit is contained in:
@@ -90,9 +90,11 @@
|
||||
{
|
||||
"method": "tap_ocr",
|
||||
"params": "推荐",
|
||||
"options": {
|
||||
"identifier": "点击推荐"
|
||||
}
|
||||
"identifier": "点击推荐",
|
||||
"offset": [
|
||||
0,
|
||||
-1
|
||||
]
|
||||
},
|
||||
{
|
||||
"method": "sleep",
|
||||
|
||||
@@ -1 +1 @@
|
||||
v5.0.0-250701
|
||||
v5.0.0-250702
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user