diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 91e73d12..722a7126 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -23,6 +23,7 @@ UI related: - fix: add compatible support for indicating options separately at the `MobileAction` level - fix: use Override size if existed, otherwise use Physical size (android devices) - fix: add default options for `swipe_to_tap_app` action +- refactor: ui validation methods, support parsing expect value - fix: reuse the same request body during `GetImage` retry others: diff --git a/hrp/runner.go b/hrp/runner.go index 57ff3e7d..b68a5208 100644 --- a/hrp/runner.go +++ b/hrp/runner.go @@ -638,6 +638,23 @@ func (r *SessionRunner) ParseStepVariables(stepVariables map[string]interface{}) return parsedVariables, nil } +func (r *SessionRunner) ParseStepValidators(iValidators []interface{}, stepVariables map[string]interface{}) ([]interface{}, error) { + var parsedValidators []interface{} + var err error + for _, iValidator := range iValidators { + validator, ok := iValidator.(Validator) + if !ok { + return nil, errors.New("validator type error") + } + validator.Expect, err = r.caseRunner.parser.Parse(validator.Expect, stepVariables) + if err != nil { + return nil, errors.Wrap(err, "failed to parse validator expect") + } + parsedValidators = append(parsedValidators, validator) + } + return parsedValidators, nil +} + // InitWithParameters updates session variables with given parameters. // this is used for data driven func (r *SessionRunner) InitWithParameters(parameters map[string]interface{}) { diff --git a/hrp/step_mobile_ui.go b/hrp/step_mobile_ui.go index 4df996ff..28eec491 100644 --- a/hrp/step_mobile_ui.go +++ b/hrp/step_mobile_ui.go @@ -656,7 +656,11 @@ func runStepMobileUI(s *SessionRunner, step *TStep) (stepResult *StepResult, err } // validate - validateResults, err := validateUI(uiDriver, step.Validators) + stepValidators, err := s.ParseStepValidators(step.Validators, stepVariables) + if err != nil { + return + } + validateResults, err := validateUI(uiDriver, stepValidators) if err != nil { if !code.IsErrorPredefined(err) { err = errors.Wrap(code.MobileUIValidationError, err.Error())