/// <summary> /// execute the script /// </summary> private void Run() { IReporter reporter = Reporter.NewInstance; reporter.BeginReport("path"); while (Scripts.Count > 0) { CurrentScript = Scripts.Pop(); // begin new section in report if (CurrentScript.CurrentLineNumber == 0) reporter.BeginScript(CurrentScript.Name); // loop for each line of current script while (CurrentScript.HasNextLine) { ActionLine actLine = CurrentScript.Next(); if (actLine.ActionName == Constants.ActionUseInterface) { Interface newInterface = new Interface(Parser); newInterface.PathFile = actLine.Arguments[Constants.KeywordInterface] + Parser.FileExtension; Interfaces.Add(newInterface.Name, newInterface); } else if (actLine.ActionName == Constants.ActionStartScript) { Script newScript = new Script(Parser); newScript.PathFile = actLine.Arguments[Constants.KeywordScript] + Parser.FileExtension; Scripts.Push(CurrentScript); CurrentScript = newScript; // begin new section in report reporter.BeginScript(CurrentScript.Name); } else { Action action = getAction(actLine); if (action == null) throw new InvalidOperationException("No action named '" + actLine.ActionName + "'"); if (!action.IsValid()) throw new InvalidOperationException("Invalid arguments for action named '" + actLine.ActionName + "'"); int ret = action.Execute(); action.Reset(); // write result of executing to report reporter.WriteLine(); } } // end section in report if (CurrentScript.CurrentLineNumber > 0) reporter.EndScript(); } }
/// <summary> /// execute the script /// </summary> //private void Run() //{ // IReporter reporter = Reporter.NewInstance; // reporter.BeginReport("path"); // while (Scripts.Count > 0) // { // CurrentScript = Scripts.Pop(); // // begin new section in report // if (CurrentScript.CurrentLineNumber == 0) // reporter.BeginScript(CurrentScript.Name); // // loop for each line of current script // while (CurrentScript.HasNextLine) // { // ActionLine actLine = CurrentScript.Next(); // if (actLine.ActionName == Constants.ActionUseInterface) // { // Interface newInterface = new Interface(Parser); // newInterface.PathFile = actLine.Arguments[Constants.KeywordInterface] + Parser.FileExtension; // Interfaces.Add(newInterface.Name, newInterface); // } // else if (actLine.ActionName == Constants.ActionStartScript) // { // Script newScript = new Script(Parser); // newScript.PathFile = actLine.Arguments[Constants.KeywordScript] + Parser.FileExtension; // Scripts.Push(CurrentScript); // CurrentScript = newScript; // // begin new section in report // reporter.BeginScript(CurrentScript.Name); // } // else // { // Action action = getAction(actLine); // if (action == null) // throw new InvalidOperationException("No action named '" + actLine.ActionName + "'"); // if (!action.IsValid()) // throw new InvalidOperationException("Invalid arguments for action named '" + actLine.ActionName + "'"); // int ret = action.Execute(); // action.Reset(); // // write result of executing to report // reporter.WriteLine(); // } // } // // end section in report // if (CurrentScript.CurrentLineNumber > 0) // reporter.EndScript(); // } //} /// <summary> /// execute the script /// </summary> private void Run(IReporter reporter) { while (Scripts.Count > 0 && !IsStopped) { // pop a script from stack CurrentScript = Scripts.Pop(); // begin new section in report if (CurrentScript.CurrentLineNumber == 0) { reporter.BeginScript(CurrentScript.Name); } // loop for each line of current script while (CurrentScript.HasNextLine && !IsStopped) { // get a action line from script ActionLine actLineRaw = CurrentScript.Next(); // manipulate action line with DataSet ActionLine actLine = ManipulateData(actLineRaw); // notify about action that is going to be performed if (ActionPerforming != null) { string summary = actLine.ActionName; if (actLine.WindowName != null) { summary += "\t[window:" + actLine.WindowName + "]"; } if (actLine.ControlName != null) { summary += "\t[control:" + actLine.ControlName + "]"; } foreach (string key in actLine.Arguments.Keys) { summary += "\t[" + key + ":" + actLine.Arguments[key] + "]"; } ActionPerforming(summary); } // the action is 'use interface' if (actLine.ActionName == Constants.ActionUseInterface) { if (!Interfaces.ContainsKey(actLine.Arguments[Constants.KeywordInterface].ToLower())) { Interface newInterface = new Interface(Parser); //newInterface.FileName = actLine.Arguments[Constants.Keywords.KeywordInterface] + Parser.FileExtension; Interfaces.Add(newInterface.Name, newInterface); } } // the action is 'run script' else if (actLine.ActionName == Constants.ActionStartScript) { Script newScript = new Script(Parser); //newScript.FileName = actLine.Arguments[Constants.Keywords.KeywordScript] + Parser.FileExtension; // push current script to stack and run new script Scripts.Push(CurrentScript); CurrentScript = newScript; // begin new section in report reporter.BeginScript(CurrentScript.Name); } else { try { Action action = getAction(actLine); if (action == null) { throw new Exception(Constants.Messages.Error_Executing_NoAction); } if (!action.IsValid()) { throw new Exception(Constants.Messages.Error_Executing_InvalidArg); } // execute the action int ret = action.Execute(); // write result of executing to report // reporter.WriteLine(actLine, action.Result); // reset the action state action.Reset(); } catch (Exception e) { //reporter.WriteError(actLine, e.Message); // InteruptWithError(e.Message); } } // if the automation is paused, just sleep CheckPaused(); // check if user interupt the automation if (!CheckStopped()) { ProcessSpeed(); } } // if the automation is paused, just sleep CheckPaused(); // check if user interupt the automation CheckStopped(); // end section in report if (CurrentScript.CurrentLineNumber > 0) { //reporter.EndScript(CurrentScript.Name); } } }