From c5fb391ef53c34f045f111da5de72cb14b1aebc5 Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Thu, 29 May 2025 00:11:34 +0800 Subject: [PATCH] feat: add global AntiRisk configuration support - Add AntiRisk field to TConfig struct for global anti-risk switch - Add SetAntiRisk method to configure global anti-risk setting - Implement automatic AntiRisk application in mobile UI steps - Global AntiRisk setting applies to all actions unless explicitly disabled - Maintains backward compatibility with existing action-level AntiRisk settings --- config.go | 7 +++++ internal/version/VERSION | 2 +- step_ui.go | 58 +++++++++++++++++++++++++++------------- 3 files changed, 48 insertions(+), 19 deletions(-) diff --git a/config.go b/config.go index bda473da..ceab812a 100644 --- a/config.go +++ b/config.go @@ -43,6 +43,7 @@ type TConfig struct { Path string `json:"path,omitempty" yaml:"path,omitempty"` // testcase file path PluginSetting *PluginConfig `json:"plugin,omitempty" yaml:"plugin,omitempty"` // plugin config MCPConfigPath string `json:"mcp_config_path,omitempty" yaml:"mcp_config_path,omitempty"` + AntiRisk bool `json:"anti_risk,omitempty" yaml:"anti_risk,omitempty"` // global anti-risk switch IgnorePopup bool `json:"ignore_popup,omitempty" yaml:"ignore_popup,omitempty"` LLMService option.LLMServiceType `json:"llm_service,omitempty" yaml:"llm_service,omitempty"` CVService option.CVServiceType `json:"cv_service,omitempty" yaml:"cv_service,omitempty"` @@ -76,6 +77,12 @@ func (c *TConfig) SetVerifySSL(verify bool) *TConfig { return c } +// SetAntiRisk sets global anti-risk switch for current testcase. +func (c *TConfig) SetAntiRisk(antiRisk bool) *TConfig { + c.AntiRisk = antiRisk + return c +} + // WithParameters sets parameters for current testcase. func (c *TConfig) WithParameters(parameters map[string]interface{}) *TConfig { c.Parameters = parameters diff --git a/internal/version/VERSION b/internal/version/VERSION index 91c86ac6..db149f9e 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2505282311 +v5.0.0-beta-2505290011 diff --git a/step_ui.go b/step_ui.go index feec6ad3..4b1e0265 100644 --- a/step_ui.go +++ b/step_ui.go @@ -709,7 +709,7 @@ func runStepMobileUI(s *SessionRunner, step IStep) (stepResult *StepResult, err } uiDriver, err := uixt.GetOrCreateXTDriver(config) if err != nil { - return + return nil, err } identifier := mobileStep.Identifier @@ -741,25 +741,31 @@ func runStepMobileUI(s *SessionRunner, step IStep) (stepResult *StepResult, err attachments["error"] = err.Error() // save foreground app - startTime := time.Now() - actionResult := &ActionResult{ - MobileAction: uixt.MobileAction{ - Method: option.ACTION_GetForegroundApp, - Params: "[ForDebug] check foreground app", - }, - StartTime: startTime.Unix(), + if uiDriver != nil { + startTime := time.Now() + actionResult := &ActionResult{ + MobileAction: uixt.MobileAction{ + Method: option.ACTION_GetForegroundApp, + Params: "[ForDebug] check foreground app", + }, + StartTime: startTime.Unix(), + } + if app, err1 := uiDriver.ForegroundInfo(); err1 == nil { + attachments["foreground_app"] = app.AppBaseInfo + } else { + log.Warn().Err(err1).Msg("save foreground app failed, ignore") + } + actionResult.Elapsed = time.Since(startTime).Milliseconds() + stepResult.Actions = append(stepResult.Actions, actionResult) } - if app, err1 := uiDriver.ForegroundInfo(); err1 == nil { - attachments["foreground_app"] = app.AppBaseInfo - } else { - log.Warn().Err(err1).Msg("save foreground app failed, ignore") - } - actionResult.Elapsed = time.Since(startTime).Milliseconds() - stepResult.Actions = append(stepResult.Actions, actionResult) } // automatic handling of pop-up windows on each step finished - if !ignorePopup && !s.caseRunner.Config.Get().IgnorePopup { + var config *TConfig + if s.caseRunner != nil && s.caseRunner.Config != nil { + config = s.caseRunner.Config.Get() + } + if !ignorePopup && (config == nil || !config.IgnorePopup) && uiDriver != nil { startTime := time.Now() actionResult := &ActionResult{ MobileAction: uixt.MobileAction{ @@ -776,8 +782,10 @@ func runStepMobileUI(s *SessionRunner, step IStep) (stepResult *StepResult, err } // save attachments - for key, value := range uiDriver.GetData(true) { - attachments[key] = value + if uiDriver != nil { + for key, value := range uiDriver.GetData(true) { + attachments[key] = value + } } stepResult.Attachments = attachments stepResult.Elapsed = time.Since(start).Milliseconds() @@ -806,6 +814,20 @@ func runStepMobileUI(s *SessionRunner, step IStep) (stepResult *StepResult, err return stepResult, err } + // Apply global AntiRisk configuration if enabled in testcase config + if s.caseRunner != nil && s.caseRunner.Config != nil { + config := s.caseRunner.Config.Get() + if config != nil && config.AntiRisk { + if action.Options == nil { + action.Options = &option.ActionOptions{} + } + // Only set AntiRisk to true if it's not already explicitly set to false + if !action.Options.AntiRisk { + action.Options.AntiRisk = true + } + } + } + // stat uixt action if action.Method == option.ACTION_LOG { log.Info().Interface("action", action.Params).Msg("stat uixt action")