private void SetAttributes(SpecScenario scenario, AbstractSpecUserAction specUserAction, SpecNode specNode, IScreen screen, string pathToApp, List <Color> colors, ScriptGenerationParams _params, int se, MyLog myLog) { // importance: must create on the same thread with UI thread try { Application.Current.Dispatcher.Invoke((Action) delegate { specUserAction.BgColor = new System.Windows.Media.SolidColorBrush( System.Windows.Media.Color.FromArgb( 255, colors[se].R, colors[se].G, colors[se].B)); }); } catch (Exception) { specUserAction.BgColor = new System.Windows.Media.SolidColorBrush( System.Windows.Media.Color.FromArgb( 255, colors[se].R, colors[se].G, colors[se].B)); } _params.Color = colors[se]; _params.Id = scenario.Id; _params.ListUIElements = screen.AllUIElements; _params.MyLog = myLog; _params.ScreenName = screen.Name; _params.SpecNode = specNode; _params.PathToApp = pathToApp; specUserAction.Params = _params; specUserAction.NodeAffect = specNode; if (scenario.UserActions == null) { scenario.UserActions = new List <IUserAction>(); } scenario.UserActions.Add(specUserAction); }
public override IUserAction Clone() { AbstractSpecUserAction re = (AbstractSpecUserAction)Activator.CreateInstance(this.GetType()); CopyAttribute(this, re); return(re); }
/// <summary> /// choose Ranorex scripts /// </summary> /// <param name="specUserAction"></param> /// <returns></returns> protected override ScriptsExpression GenScriptType(AbstractSpecUserAction specUserAction, string instanceName) { var param = RanorexScriptGenerationParams.CloneFromNormal(specUserAction.Params); //specUserAction.Params.Clone(); param.InstanceName = instanceName; return(specUserAction.GenRanorexScripts(param)); }
public static void CopyAttribute(AbstractSpecUserAction userAction1, AbstractSpecUserAction userAction2) { if (userAction1.BgColor != null) { userAction2.BgColor = userAction1.BgColor; } if (userAction1.Expression != null) { userAction2.Expression = userAction1.Expression; } userAction2.IgnoreGenerateScripts = userAction1.IgnoreGenerateScripts; if (userAction1.NodeAffect != null) { userAction2.NodeAffect = userAction1.NodeAffect.Clone(); } if (userAction1.Params != null) { userAction2.Params = userAction1.Params.Clone(); } }
/// <summary> /// determine generate normal scripts or Ranorex scripts /// </summary> /// <param name="specUserAction"></param> /// <returns></returns> protected virtual ScriptsExpression GenScriptType(AbstractSpecUserAction specUserAction, string instanceName = INSTANCE_NAME) { specUserAction.Params.InstanceName = instanceName; return(specUserAction.GenScripts(specUserAction.Params)); }
private void DoExpand(SpecScreen screen, string pathToApp, MyLog myLog, List <ClassExpression> allClassesExp) { for (int fi = 0; fi < screen.Scenarios.Count; fi++) { IScenario tempScenario = screen.Scenarios[fi]; if (tempScenario is SpecScenario) { SpecScenario scenario = tempScenario as SpecScenario; List <string> listActionExp = scenario.UserActionsInString; List <Color> colors = scenario.Colors; for (int se = 0; se < listActionExp.Count; se++) { string actionExp = listActionExp[se]; if (actionExp == null) { myLog.Error("NULL at (" + (fi + 1) + "," + (se + 2) + ")"); continue; } SpecNode specNode = screen.ListSpecNodes[se]; ScriptGenerationParams _params = null; AbstractSpecUserAction specUserAction = null; int lastInd = IsValidationUserCode(se, screen.ListValidationUserCode); if (lastInd > se) { specUserAction = new ValidationUserCodeSpecUserAction(); _params = new ValidationUCScriptGenerationParams(); List <string> listExp = new List <string>(); for (int th = se; th <= lastInd; th++) { String tempActionExp = listActionExp[th]; AbstractSpecUserAction temp = handleUserActionExpression( tempActionExp.Trim(), specNode, colors[th], myLog); if (!(temp is ValidationSpecUserAction)) { myLog.Warn("Expression: " + tempActionExp + " must be validation", logger); screen = null; return; } else { if (tempActionExp != null && !tempActionExp.Trim().Equals("")) { listExp.Add(tempActionExp.Trim()); } } } (specUserAction as ValidationUserCodeSpecUserAction).ListExps = listExp; ((ValidationUCScriptGenerationParams)_params).ListExps = listExp; if (screen is TestSpecificationScreen) { ((ValidationUCScriptGenerationParams)_params).ClassExpressions = allClassesExp; } ((ValidationUCScriptGenerationParams)_params).ClassName = AbstractSpecUserAction.GetFolderNameFromScreen(screen) + "_Validation"; ((ValidationUCScriptGenerationParams)_params).FunctionName = "Validate_" + Regex.Replace(specNode.Expression, "[^A-Za-z0-9]", "_"); SetAttributes(scenario, specUserAction, specNode, screen, pathToApp, colors, _params, se, myLog); se = lastInd; } else { string[] listActionsEpx = splitAction(actionExp, AbstractSpecUserAction.AND); foreach (string action in listActionsEpx) { specUserAction = handleUserActionExpression(action.Trim(), specNode, colors[se], myLog); if (specUserAction != null) { if (specUserAction is UserCodeSpecUserAction userCodeExpression) { _params = new UserCodeScriptGenerationParams(); ((UserCodeScriptGenerationParams)_params).MapAliasWithNode = screen.MappingAliasWithNode; if (screen is TestSpecificationScreen testSpecScreen) { ((UserCodeScriptGenerationParams)_params).ClassExpressions = allClassesExp; } } else if (specUserAction is WaitValidateSpecUserAction waitUserAction) { _params = new WaitValidateScriptGenerationParams(); } else { _params = new ScriptGenerationParams(); } SetAttributes(scenario, specUserAction, specNode, screen, pathToApp, colors, _params, se, myLog); } } } } } } }
/// <summary> /// type expression /// </summary> /// <param name="actionEpx"></param> /// <param name="specNode"></param> /// <param name="color"></param> /// <param name="myLog"></param> /// <returns></returns> private AbstractSpecUserAction handleUserActionExpression(String actionEpx, SpecNode specNode, Color color, MyLog myLog) { if (actionEpx == null || actionEpx.Equals("") || actionEpx.Equals(AbstractSpecUserAction.NA) || actionEpx.Equals(AbstractSpecUserAction.DO_NOTHING) || actionEpx.Equals(AbstractSpecUserAction.EMPTY) || color.Equals(AbstractSpecUserAction.NOT_TEST_COLOR1) || color.Equals(AbstractSpecUserAction.NOT_TEST_COLOR2)) // || // color.Equals(AbstractSpecUserAction.NOT_TEST_COLOR3)) { return(null); } /** * determine if delay, wait, keyboard press */ if (specNode.UIElement == null) { // delay if (Regex.IsMatch(specNode.Expression, AbstractSpecUserAction.DELAY_TITLE_EXPRESSION)) { DelaySpecUserAction delaySpecUserAction = new DelaySpecUserAction(); delaySpecUserAction.Expression = actionEpx; return(delaySpecUserAction); } // wait else if (Regex.IsMatch(specNode.Expression, AbstractSpecUserAction.PRE_WAIT + "(_\\d*)*")) { PreWaitValidateSpecUserAction waitValidateSpecUserAction = new PreWaitValidateSpecUserAction(); waitValidateSpecUserAction.Expression = actionEpx; return(waitValidateSpecUserAction); } else if (Regex.IsMatch(specNode.Expression, AbstractSpecUserAction.POST_WAIT + "(_\\d*)*")) { PostWaitValidateSpecUserAction waitValidateSpecUserAction = new PostWaitValidateSpecUserAction(); waitValidateSpecUserAction.Expression = actionEpx; return(waitValidateSpecUserAction); } //keyboard press else if (Regex.IsMatch(specNode.Expression, AbstractSpecUserAction.KEYBOARD_PRESS_REGEX)) { KeyboardSpecUserAction keyboardPressSpecUserAction = new KeyboardSpecUserAction(); keyboardPressSpecUserAction.Expression = actionEpx; return(keyboardPressSpecUserAction); } //test - not test else if (Regex.IsMatch(specNode.Expression, AbstractSpecUserAction.RESULT)) { return(null); } // usercode else if (Regex.IsMatch(specNode.Expression, AbstractSpecUserAction.USER_CODE) || Regex.IsMatch(specNode.Expression, AbstractSpecUserAction.USER_CODE_WITH_VARIABLE_DECLARE)) { UserCodeSpecUserAction userCodeExpression = new UserCodeSpecUserAction(); userCodeExpression.Expression = actionEpx; return(userCodeExpression); } } AbstractSpecUserAction specUserAction = null; string attribute = specNode.Attribute; if (actionEpx.Equals(AbstractSpecUserAction.OPEN)) { specUserAction = new OpenAppSpecUserAction(); } else if (actionEpx.Equals(AbstractSpecUserAction.CLOSE)) { specUserAction = new CloseAppSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.CLICK)) { specUserAction = new ClickSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.DOUBLE_CLICK)) { specUserAction = new DoubleClickSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.RIGHT_CLICK)) { specUserAction = new RightClickSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.WAIT_EXIST) || actionEpx.StartsWith(AbstractSpecUserAction.WAIT_NOT_EXIST)) { specUserAction = new WaitExistSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.EXIST) || actionEpx.StartsWith(AbstractSpecUserAction.NOT_EXIST)) { specUserAction = new CheckExistSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.DELAY)) { specUserAction = new DelaySpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.GET)) { specUserAction = new GetSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.CAPTURE)) { specUserAction = new CaptureSpecUserAction(); } else if (actionEpx.StartsWith(AbstractSpecUserAction.DROP)) { specUserAction = new DropSpecUserAction(); } //else if (actionEpx.StartsWith(AbstractSpecUserAction.COMPARE_IMAGE)) //{ // specUserAction = new ImageComparativeSpecUserAction(); // specUserAction.Expression = actionEpx; //} else if (actionEpx.StartsWith(AbstractSpecUserAction.ATTRIBUTE_CONTAIN) || actionEpx.StartsWith(AbstractSpecUserAction.ATTRIBUTE_NOT_CONTAIN)) { specUserAction = new ContainSpecUserAction(); } else if (color.Equals(AbstractSpecUserAction.VALIDATION_COLOR) || color.Equals(AbstractSpecUserAction.ENVIRONMENT_COLOR)) { specUserAction = new ValidationSpecUserAction(); } else if (color.Equals(AbstractSpecUserAction.PROCEDURES_COLOR) || color.Equals(AbstractSpecUserAction.PRE_CONDITION_COLOR)) { if (attribute != null && !attribute.Equals("") && (Regex.IsMatch(attribute, "^\\w+$") || Regex.IsMatch(attribute, ".*\\..*"))) { specUserAction = new SetSpecUserAction(); } else if (attribute == null || attribute.Equals("") || Regex.IsMatch(attribute, "Cell\\s*\\((\\d+?),\\s*(\\d+?)\\)") || Regex.IsMatch(attribute, "Row\\s*\\((\\d+?)\\)")) { specUserAction = new PressSpecUserAction(); } } // add new case to handle here else { myLog.Warn("Incorrect expression: " + actionEpx); } if (specUserAction != null) { specUserAction.Expression = actionEpx; } return(specUserAction); }