From 25f9510de12afa4fe2d549ad0d591f960f16a954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E6=B3=93=E9=93=AE?= Date: Mon, 11 Aug 2025 21:14:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=89=AA=E8=B4=B4=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/version/VERSION | 2 +- step.go | 1 + step_ui.go | 29 +++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/internal/version/VERSION b/internal/version/VERSION index a36de551..333d36aa 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-250802 +v5.0.0-250811 diff --git a/step.go b/step.go index 636d497b..6e0f23cf 100644 --- a/step.go +++ b/step.go @@ -67,6 +67,7 @@ type ActionResult struct { Plannings []*uixt.PlanningExecutionResult `json:"plannings,omitempty"` // store planning results for start_to_goal actions, which contains multiple sub-actions AIResult *uixt.AIExecutionResult `json:"ai_result,omitempty"` // store unified AI execution result for ai_query/ai_action/ai_assert actions uixt.SessionData // store session data for other actions besides start_to_goal + ExtraData interface{} `json:"extra_data,omitempty"` } // one testcase contains one or multiple steps diff --git a/step_ui.go b/step_ui.go index ae4a6233..c40ae555 100644 --- a/step_ui.go +++ b/step_ui.go @@ -1043,6 +1043,22 @@ func runStepMobileUI(s *SessionRunner, step IStep) (stepResult *StepResult, err continue } + if action.Method == option.ACTION_StartToGoal { + planningResults, err := uiDriver.StartToGoal(ctx, + action.Params.(string), action.GetOptions()...) + actionResult.Elapsed = time.Since(actionStartTime).Milliseconds() + actionResult.Plannings = planningResults + stepResult.Actions = append(stepResult.Actions, actionResult) + if err != nil { + actionResult.Error = err.Error() + if !code.IsErrorPredefined(err) { + err = errors.Wrap(code.MobileUIDriverError, err.Error()) + } + return stepResult, err + } + continue + } + // handle AI operations (ai_action, ai_query, ai_assert) with unified result storage if action.Method == option.ACTION_AIAction || action.Method == option.ACTION_Query || action.Method == option.ACTION_AIAssert { var aiResult *uixt.AIExecutionResult @@ -1070,6 +1086,19 @@ func runStepMobileUI(s *SessionRunner, step IStep) (stepResult *StepResult, err } continue } + if action.Method == option.ACTION_GetPasteboard { + content, err := uiDriver.GetPasteboard() + if err != nil { + actionResult.Error = err.Error() + if !code.IsErrorPredefined(err) { + err = errors.Wrap(code.MobileUIDriverError, err.Error()) + } + return stepResult, err + } + actionResult.ExtraData = content + stepResult.Actions = append(stepResult.Actions, actionResult) + continue + } // handle other non-AI actions sessionData, err := uiDriver.ExecuteAction(ctx, action)