fix: add swipe_to_tap_texts action

This commit is contained in:
xucong.053
2022-10-11 16:33:10 +08:00
parent ba00e9590b
commit 2d529071ab
5 changed files with 46 additions and 28 deletions

View File

@@ -94,7 +94,7 @@
"ios": {
"actions": [
{
"method": "swipe_to_tap_text",
"method": "swipe_to_tap_texts",
"params": [
"理肤泉",
"婉宝"

View File

@@ -49,7 +49,7 @@ teststeps:
- name: 向上滑动 2 次
ios:
actions:
- method: swipe_to_tap_text
- method: swipe_to_tap_texts
params:
- 理肤泉
- 婉宝

View File

@@ -55,8 +55,9 @@ const (
ACTION_Input MobileMethod = "input"
// custom actions
ACTION_SwipeToTapApp MobileMethod = "swipe_to_tap_app" // swipe left & right to find app and tap
ACTION_SwipeToTapText MobileMethod = "swipe_to_tap_text" // swipe up & down to find text and tap
ACTION_SwipeToTapApp MobileMethod = "swipe_to_tap_app" // swipe left & right to find app and tap
ACTION_SwipeToTapText MobileMethod = "swipe_to_tap_text" // swipe up & down to find text and tap
ACTION_SwipeToTapTexts MobileMethod = "swipe_to_tap_texts" // swipe up & down to find text and tap
)
type MobileAction struct {
@@ -401,17 +402,35 @@ func (dExt *DriverExt) DoAction(action MobileAction) error {
return fmt.Errorf("invalid %s params, should be app name(string), got %v",
ACTION_SwipeToTapApp, action.Params)
case ACTION_SwipeToTapText:
var point PointF
var findText func(d *DriverExt) error
if text, ok := action.Params.(string); ok {
findText = func(d *DriverExt) error {
var point PointF
findText := func(d *DriverExt) error {
var err error
point, err = d.GetTextXY(text, action.Index)
return err
}
} else if texts, ok := action.Params.([]interface{}); ok {
findText = func(d *DriverExt) error {
foundTextAction := func(d *DriverExt) error {
// tap text
return d.TapAbsXY(point.X, point.Y, action.Identifier)
}
// default to retry 10 times
if action.MaxRetryTimes == 0 {
action.MaxRetryTimes = 10
}
if action.Direction != nil {
return dExt.SwipeUntil(action.Direction, findText, foundTextAction, action.MaxRetryTimes)
}
// swipe until found
return dExt.SwipeUntil("up", findText, foundTextAction, action.MaxRetryTimes)
}
return fmt.Errorf("invalid %s params, should be app text(string), got %v",
ACTION_SwipeToTapText, action.Params)
case ACTION_SwipeToTapTexts:
if texts, ok := action.Params.([]interface{}); ok {
var point PointF
findText := func(d *DriverExt) error {
var err error
var ts []string
for _, t := range texts {
@@ -428,25 +447,24 @@ func (dExt *DriverExt) DoAction(action MobileAction) error {
}
return errors.New("failed to find text position")
}
} else {
return fmt.Errorf("invalid %s params, should be app text(string or []string), got %v",
ACTION_SwipeToTapText, action.Params)
}
foundTextAction := func(d *DriverExt) error {
// tap text
return d.TapAbsXY(point.X, point.Y, action.Identifier)
}
foundTextAction := func(d *DriverExt) error {
// tap text
return d.TapAbsXY(point.X, point.Y, action.Identifier)
}
// default to retry 10 times
if action.MaxRetryTimes == 0 {
action.MaxRetryTimes = 10
}
// default to retry 10 times
if action.MaxRetryTimes == 0 {
action.MaxRetryTimes = 10
if action.Direction != nil {
return dExt.SwipeUntil(action.Direction, findText, foundTextAction, action.MaxRetryTimes)
}
// swipe until found
return dExt.SwipeUntil("up", findText, foundTextAction, action.MaxRetryTimes)
}
if action.Direction != nil {
return dExt.SwipeUntil(action.Direction, findText, foundTextAction, action.MaxRetryTimes)
}
// swipe until found
return dExt.SwipeUntil("up", findText, foundTextAction, action.MaxRetryTimes)
return fmt.Errorf("invalid %s params, should be app text([]string), got %v",
ACTION_SwipeToTapText, action.Params)
case AppTerminate:
if bundleId, ok := action.Params.(string); ok {
success, err := dExt.Driver.AppTerminate(bundleId)

View File

@@ -326,7 +326,7 @@ func (s *StepAndroid) SwipeToTapText(text string, options ...uixt.ActionOption)
func (s *StepAndroid) SwipeToTapTexts(texts []string, options ...uixt.ActionOption) *StepAndroid {
action := uixt.MobileAction{
Method: uixt.ACTION_SwipeToTapText,
Method: uixt.ACTION_SwipeToTapTexts,
Params: texts,
}
for _, option := range options {

View File

@@ -246,7 +246,7 @@ func (s *StepIOS) SwipeToTapText(text string, options ...uixt.ActionOption) *Ste
func (s *StepIOS) SwipeToTapTexts(texts []string, options ...uixt.ActionOption) *StepIOS {
action := uixt.MobileAction{
Method: uixt.ACTION_SwipeToTapText,
Method: uixt.ACTION_SwipeToTapTexts,
Params: texts,
}
for _, option := range options {