Beispiel #1
0
        public static bool DetermineStatementTruth(IAutomationEngineInstance engine, string ifActionType, DataTable IfActionParameterTable)
        {
            bool ifResult = false;

            if (ifActionType == "Value Compare")
            {
                string value1 = ((from rw in IfActionParameterTable.AsEnumerable()
                                  where rw.Field <string>("Parameter Name") == "Value1"
                                  select rw.Field <string>("Parameter Value")).FirstOrDefault());
                string operand = ((from rw in IfActionParameterTable.AsEnumerable()
                                   where rw.Field <string>("Parameter Name") == "Operand"
                                   select rw.Field <string>("Parameter Value")).FirstOrDefault());
                string value2 = ((from rw in IfActionParameterTable.AsEnumerable()
                                  where rw.Field <string>("Parameter Name") == "Value2"
                                  select rw.Field <string>("Parameter Value")).FirstOrDefault());

                value1 = value1.ConvertUserVariableToString(engine);
                value2 = value2.ConvertUserVariableToString(engine);

                decimal cdecValue1, cdecValue2;

                switch (operand)
                {
                case "is equal to":
                    ifResult = (value1 == value2);
                    break;

                case "is not equal to":
                    ifResult = (value1 != value2);
                    break;

                case "is greater than":
                    cdecValue1 = Convert.ToDecimal(value1);
                    cdecValue2 = Convert.ToDecimal(value2);
                    ifResult   = (cdecValue1 > cdecValue2);
                    break;

                case "is greater than or equal to":
                    cdecValue1 = Convert.ToDecimal(value1);
                    cdecValue2 = Convert.ToDecimal(value2);
                    ifResult   = (cdecValue1 >= cdecValue2);
                    break;

                case "is less than":
                    cdecValue1 = Convert.ToDecimal(value1);
                    cdecValue2 = Convert.ToDecimal(value2);
                    ifResult   = (cdecValue1 < cdecValue2);
                    break;

                case "is less than or equal to":
                    cdecValue1 = Convert.ToDecimal(value1);
                    cdecValue2 = Convert.ToDecimal(value2);
                    ifResult   = (cdecValue1 <= cdecValue2);
                    break;
                }
            }
            else if (ifActionType == "Date Compare")
            {
                string value1 = ((from rw in IfActionParameterTable.AsEnumerable()
                                  where rw.Field <string>("Parameter Name") == "Value1"
                                  select rw.Field <string>("Parameter Value")).FirstOrDefault());
                string operand = ((from rw in IfActionParameterTable.AsEnumerable()
                                   where rw.Field <string>("Parameter Name") == "Operand"
                                   select rw.Field <string>("Parameter Value")).FirstOrDefault());
                string value2 = ((from rw in IfActionParameterTable.AsEnumerable()
                                  where rw.Field <string>("Parameter Name") == "Value2"
                                  select rw.Field <string>("Parameter Value")).FirstOrDefault());

                DateTime dt1, dt2;

                dynamic input1 = value1.ConvertUserVariableToString(engine);

                if (input1 == value1 && input1.StartsWith("{") && input1.EndsWith("}"))
                {
                    input1 = value1.ConvertUserVariableToObject(engine, typeof(object));
                }

                if (input1 is DateTime)
                {
                    dt1 = (DateTime)input1;
                }
                else if (input1 is string)
                {
                    dt1 = DateTime.Parse((string)input1);
                }
                else
                {
                    throw new InvalidDataException("Value1 is not a valid DateTime");
                }

                dynamic input2 = value2.ConvertUserVariableToString(engine);

                if (input2 == value2 && input2.StartsWith("{") && input2.EndsWith("}"))
                {
                    input2 = value2.ConvertUserVariableToObject(engine, typeof(object));
                }

                if (input2 is DateTime)
                {
                    dt2 = (DateTime)input2;
                }
                else if (input2 is string)
                {
                    dt2 = DateTime.Parse((string)input2);
                }
                else
                {
                    throw new InvalidDataException("Value2 is not a valid DateTime");
                }

                switch (operand)
                {
                case "is equal to":
                    ifResult = (dt1 == dt2);
                    break;

                case "is not equal to":
                    ifResult = (dt1 != dt2);
                    break;

                case "is greater than":
                    ifResult = (dt1 > dt2);
                    break;

                case "is greater than or equal to":
                    ifResult = (dt1 >= dt2);
                    break;

                case "is less than":
                    ifResult = (dt1 < dt2);
                    break;

                case "is less than or equal to":
                    ifResult = (dt1 <= dt2);
                    break;
                }
            }
            else if (ifActionType == "Variable Compare")
            {
                string value1 = ((from rw in IfActionParameterTable.AsEnumerable()
                                  where rw.Field <string>("Parameter Name") == "Value1"
                                  select rw.Field <string>("Parameter Value")).FirstOrDefault());
                string operand = ((from rw in IfActionParameterTable.AsEnumerable()
                                   where rw.Field <string>("Parameter Name") == "Operand"
                                   select rw.Field <string>("Parameter Value")).FirstOrDefault());
                string value2 = ((from rw in IfActionParameterTable.AsEnumerable()
                                  where rw.Field <string>("Parameter Name") == "Value2"
                                  select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string caseSensitive = ((from rw in IfActionParameterTable.AsEnumerable()
                                         where rw.Field <string>("Parameter Name") == "Case Sensitive"
                                         select rw.Field <string>("Parameter Value")).FirstOrDefault());

                value1 = value1.ConvertUserVariableToString(engine);
                value2 = value2.ConvertUserVariableToString(engine);

                if (caseSensitive == "No")
                {
                    value1 = value1.ToUpper();
                    value2 = value2.ToUpper();
                }

                switch (operand)
                {
                case "contains":
                    ifResult = (value1.Contains(value2));
                    break;

                case "does not contain":
                    ifResult = (!value1.Contains(value2));
                    break;

                case "is equal to":
                    ifResult = (value1 == value2);
                    break;

                case "is not equal to":
                    ifResult = (value1 != value2);
                    break;
                }
            }
            else if (ifActionType == "Variable Has Value")
            {
                string variableName = ((from rw in IfActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Variable Name"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault());

                var actualVariable = variableName.ConvertUserVariableToObject(engine, typeof(object));

                if (actualVariable != null)
                {
                    ifResult = true;
                }
                else
                {
                    ifResult = false;
                }
            }
            else if (ifActionType == "Variable Is Numeric")
            {
                string variableName = ((from rw in IfActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Variable Name"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault());

                var actualVariable = variableName.ConvertUserVariableToString(engine).Trim();

                var numericTest = decimal.TryParse(actualVariable, out decimal parsedResult);

                if (numericTest)
                {
                    ifResult = true;
                }
                else
                {
                    ifResult = false;
                }
            }
            else if (ifActionType == "Error Occured")
            {
                //get line number
                string userLineNumber = ((from rw in IfActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Line Number"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault());

                //convert to variable
                string variableLineNumber = userLineNumber.ConvertUserVariableToString(engine);

                //convert to int
                int lineNumber = int.Parse(variableLineNumber);

                //determine if error happened
                if (engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber).Count() > 0)
                {
                    var error = engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber).FirstOrDefault();
                    error.ErrorMessage.StoreInUserVariable(engine, "Error.Message", typeof(string));
                    error.LineNumber.ToString().StoreInUserVariable(engine, "Error.Line", typeof(string));
                    error.StackTrace.StoreInUserVariable(engine, "Error.StackTrace", typeof(string));

                    ifResult = true;
                }
                else
                {
                    ifResult = false;
                }
            }
            else if (ifActionType == "Error Did Not Occur")
            {
                //get line number
                string userLineNumber = ((from rw in IfActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Line Number"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault());

                //convert to variable
                string variableLineNumber = userLineNumber.ConvertUserVariableToString(engine);

                //convert to int
                int lineNumber = int.Parse(variableLineNumber);

                //determine if error happened
                if (engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber).Count() == 0)
                {
                    ifResult = true;
                }
                else
                {
                    var error = engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber).FirstOrDefault();
                    error.ErrorMessage.StoreInUserVariable(engine, "Error.Message", typeof(string));
                    error.LineNumber.ToString().StoreInUserVariable(engine, "Error.Line", typeof(string));
                    error.StackTrace.StoreInUserVariable(engine, "Error.StackTrace", typeof(string));

                    ifResult = false;
                }
            }
            else if (ifActionType == "Window Name Exists")
            {
                //get user supplied name
                string windowName = ((from rw in IfActionParameterTable.AsEnumerable()
                                      where rw.Field <string>("Parameter Name") == "Window Name"
                                      select rw.Field <string>("Parameter Value")).FirstOrDefault());
                //variable translation
                string variablizedWindowName = windowName.ConvertUserVariableToString(engine);

                //search for window
                IntPtr windowPtr = User32Functions.FindWindow(variablizedWindowName);

                //conditional
                if (windowPtr != IntPtr.Zero)
                {
                    ifResult = true;
                }
            }
            else if (ifActionType == "Active Window Name Is")
            {
                string windowName = ((from rw in IfActionParameterTable.AsEnumerable()
                                      where rw.Field <string>("Parameter Name") == "Window Name"
                                      select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string variablizedWindowName = windowName.ConvertUserVariableToString(engine);

                var currentWindowTitle = User32Functions.GetActiveWindowTitle();

                if (currentWindowTitle == variablizedWindowName)
                {
                    ifResult = true;
                }
            }
            else if (ifActionType == "File Exists")
            {
                string fileName = ((from rw in IfActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "File Path"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string trueWhenFileExists = ((from rw in IfActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "True When"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault());

                var userFileSelected = fileName.ConvertUserVariableToString(engine);

                bool existCheck = false;
                if (trueWhenFileExists == "It Does Exist")
                {
                    existCheck = true;
                }

                if (File.Exists(userFileSelected) == existCheck)
                {
                    ifResult = true;
                }
            }
            else if (ifActionType == "Folder Exists")
            {
                string folderName = ((from rw in IfActionParameterTable.AsEnumerable()
                                      where rw.Field <string>("Parameter Name") == "Folder Path"
                                      select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string trueWhenFileExists = ((from rw in IfActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "True When"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault());

                var userFolderSelected = folderName.ConvertUserVariableToString(engine);

                bool existCheck = false;
                if (trueWhenFileExists == "It Does Exist")
                {
                    existCheck = true;
                }

                if (Directory.Exists(userFolderSelected) == existCheck)
                {
                    ifResult = true;
                }
            }
            else if (ifActionType == "Web Element Exists")
            {
                string instanceName = ((from rw in IfActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Selenium Instance Name"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string parameterName = ((from rw in IfActionParameterTable.AsEnumerable()
                                         where rw.Field <string>("Parameter Name") == "Element Search Parameter"
                                         select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string searchMethod = ((from rw in IfActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Element Search Method"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string timeout = ((from rw in IfActionParameterTable.AsEnumerable()
                                   where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                   select rw.Field <string>("Parameter Value")).FirstOrDefault());

                string trueWhenElementExists = (from rw in IfActionParameterTable.AsEnumerable()
                                                where rw.Field <string>("Parameter Name") == "True When"
                                                select rw.Field <string>("Parameter Value")).FirstOrDefault();

                bool elementExists = ElementExists(engine, instanceName, searchMethod, parameterName, "Find Element", int.Parse(timeout));
                ifResult = elementExists;

                if (trueWhenElementExists == "It Does Not Exist")
                {
                    ifResult = !ifResult;
                }
            }
            else if (ifActionType == "GUI Element Exists")
            {
                string windowName = ((from rw in IfActionParameterTable.AsEnumerable()
                                      where rw.Field <string>("Parameter Name") == "Window Name"
                                      select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));

                string elementSearchParam = ((from rw in IfActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "Element Search Parameter"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));

                string elementSearchMethod = ((from rw in IfActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "Element Search Method"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));

                string trueWhenElementExists = (from rw in IfActionParameterTable.AsEnumerable()
                                                where rw.Field <string>("Parameter Name") == "True When"
                                                select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string timeout = (from rw in IfActionParameterTable.AsEnumerable()
                                  where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                  select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine);

                //set up search parameter table
                var uiASearchParameters = new DataTable();
                uiASearchParameters.Columns.Add("Enabled");
                uiASearchParameters.Columns.Add("Parameter Name");
                uiASearchParameters.Columns.Add("Parameter Value");
                uiASearchParameters.Rows.Add(true, elementSearchMethod, elementSearchParam);

                int vTimeout             = int.Parse(timeout);
                AutomationElement handle = null;
                var timeToEnd            = DateTime.Now.AddSeconds(vTimeout);
                while (timeToEnd >= DateTime.Now)
                {
                    try
                    {
                        handle = SearchForGUIElement(engine, uiASearchParameters, windowName);
                        break;
                    }
                    catch (Exception)
                    {
                        engine.ReportProgress("Element Not Yet Found... " + (timeToEnd - DateTime.Now).Seconds + "s remain");
                        Thread.Sleep(500);
                    }
                }

                if (handle is null)
                {
                    ifResult = false;
                }
                else
                {
                    ifResult = true;
                }

                if (trueWhenElementExists == "It Does Not Exist")
                {
                    ifResult = !ifResult;
                }
            }
            else if (ifActionType == "Image Element Exists")
            {
                string imageName = (from rw in IfActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Captured Image Variable"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();
                double accuracy;
                try
                {
                    accuracy = double.Parse((from rw in IfActionParameterTable.AsEnumerable()
                                             where rw.Field <string>("Parameter Name") == "Accuracy (0-1)"
                                             select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));
                    if (accuracy > 1 || accuracy < 0)
                    {
                        throw new ArgumentOutOfRangeException("Accuracy value is out of range (0-1)");
                    }
                }
                catch (Exception)
                {
                    throw new InvalidDataException("Accuracy value is invalid");
                }

                string trueWhenImageExists = (from rw in IfActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "True When"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault();

                var imageVariable = imageName.ConvertUserVariableToObject(engine, typeof(Bitmap));

                Bitmap capturedImage;
                if (imageVariable != null && imageVariable is Bitmap)
                {
                    capturedImage = (Bitmap)imageVariable;
                }
                else
                {
                    throw new ArgumentException("Provided Argument is not a 'Bitmap' Image");
                }

                var element = FindImageElement(capturedImage, accuracy);
                FormsHelper.ShowAllForms();

                if (element != null)
                {
                    ifResult = true;
                }
                else
                {
                    ifResult = false;
                }

                if (trueWhenImageExists == "It Does Not Exist")
                {
                    ifResult = !ifResult;
                }
            }
            else if (ifActionType == "App Instance Exists")
            {
                string instanceName = (from rw in IfActionParameterTable.AsEnumerable()
                                       where rw.Field <string>("Parameter Name") == "Instance Name"
                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();


                string trueWhenImageExists = (from rw in IfActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "True When"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault();

                ifResult = instanceName.InstanceExists(engine);

                if (trueWhenImageExists == "It Does Not Exist")
                {
                    ifResult = !ifResult;
                }
            }
            else
            {
                throw new Exception("If type not recognized!");
            }

            return(ifResult);
        }
        public override void RunCommand(object sender)
        {
            var  engine   = (IAutomationEngineInstance)sender;
            bool testMode = TestMode;
            //user image to bitmap
            Bitmap userImage = new Bitmap(CommonMethods.Base64ToImage(v_ImageCapture));
            double accuracy;

            try
            {
                accuracy = double.Parse(v_MatchAccuracy.ConvertUserVariableToString(engine));
                if (accuracy > 1 || accuracy < 0)
                {
                    throw new ArgumentOutOfRangeException("Accuracy value is out of range (0-1)");
                }
            }
            catch (Exception)
            {
                throw new InvalidDataException("Accuracy value is invalid");
            }

            dynamic element = null;

            if (v_ImageAction == "Wait For Image To Exist")
            {
                var timeoutText = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                   where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                   select rw.Field <string>("Parameter Value")).FirstOrDefault();

                timeoutText = timeoutText.ConvertUserVariableToString(engine);
                int timeOut   = Convert.ToInt32(timeoutText);
                var timeToEnd = DateTime.Now.AddSeconds(timeOut);

                while (timeToEnd >= DateTime.Now)
                {
                    try
                    {
                        element = CommandsHelper.FindImageElement(userImage, accuracy);

                        if (element == null)
                        {
                            throw new Exception("Image Element Not Found");
                        }
                        else
                        {
                            break;
                        }
                    }
                    catch (Exception)
                    {
                        engine.ReportProgress("Element Not Yet Found... " + (timeToEnd - DateTime.Now).Seconds + "s remain");
                        Thread.Sleep(1000);
                    }
                }

                if (element == null)
                {
                    throw new Exception("Image Element Not Found");
                }

                return;
            }
            else
            {
                element = CommandsHelper.FindImageElement(userImage, accuracy);
            }

            try
            {
                string clickPosition;
                int    xAdjust;
                int    yAdjust;
                switch (v_ImageAction)
                {
                case "Click Image":
                    string clickType = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Click Type"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    clickPosition = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Click Position"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjust = Convert.ToInt32((from rw in v_ImageActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "X Adjustment"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));
                    yAdjust = Convert.ToInt32((from rw in v_ImageActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));

                    Point clickPositionPoint = GetClickPosition(clickPosition, element);

                    //move mouse to position
                    var mouseX = (clickPositionPoint.X + xAdjust).ToString();
                    var mouseY = (clickPositionPoint.Y + yAdjust).ToString();
                    User32Functions.SendMouseMove(mouseX, mouseY, clickType);
                    break;

                case "Set Text":
                    string textToSet = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Text To Set"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine);
                    clickPosition = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Click Position"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjust = Convert.ToInt32((from rw in v_ImageActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "X Adjustment"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));
                    yAdjust = Convert.ToInt32((from rw in v_ImageActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));
                    string encryptedData = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Encrypted Text"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    if (encryptedData == "Encrypted")
                    {
                        textToSet = EncryptionServices.DecryptString(textToSet, "OPENBOTS");
                    }

                    Point setTextPositionPoint = GetClickPosition(clickPosition, element);

                    //move mouse to position and set text
                    var xPos = (setTextPositionPoint.X + xAdjust).ToString();
                    var yPos = (setTextPositionPoint.Y + yAdjust).ToString();
                    User32Functions.SendMouseMove(xPos, yPos, "Left Click");

                    var simulator = new InputSimulator();
                    simulator.Keyboard.TextEntry(textToSet);
                    Thread.Sleep(100);
                    break;

                case "Set Secure Text":
                    var secureString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Secure String Variable"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    clickPosition = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Click Position"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjust = Convert.ToInt32((from rw in v_ImageActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "X Adjustment"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));
                    yAdjust = Convert.ToInt32((from rw in v_ImageActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));

                    var secureStrVariable = secureString.ConvertUserVariableToObject(engine, typeof(SecureString));

                    if (secureStrVariable is SecureString)
                    {
                        secureString = ((SecureString)secureStrVariable).ConvertSecureStringToString();
                    }
                    else
                    {
                        throw new ArgumentException("Provided Argument is not a 'Secure String'");
                    }

                    Point setSecureTextPositionPoint = GetClickPosition(clickPosition, element);

                    //move mouse to position and set text
                    var xPosition = (setSecureTextPositionPoint.X + xAdjust).ToString();
                    var yPosition = (setSecureTextPositionPoint.Y + yAdjust).ToString();
                    User32Functions.SendMouseMove(xPosition, yPosition, "Left Click");

                    var simulator2 = new InputSimulator();
                    simulator2.Keyboard.TextEntry(secureString);
                    Thread.Sleep(100);
                    break;

                case "Image Exists":
                    var outputVariable = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Output Bool Variable Name"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    if (element != null)
                    {
                        true.StoreInUserVariable(engine, outputVariable, typeof(bool));
                    }
                    else
                    {
                        false.StoreInUserVariable(engine, outputVariable, typeof(bool));
                    }
                    break;

                default:
                    break;
                }
                FormsHelper.ShowAllForms();
            }
            catch (Exception ex)
            {
                FormsHelper.ShowAllForms();
                if (element == null)
                {
                    throw new Exception("Specified image was not found in window!");
                }
                else
                {
                    throw ex;
                }
            }
        }
Beispiel #3
0
        public async static Task <bool> DetermineStatementTruth(IAutomationEngineInstance engine, string ifActionType, DataTable IfActionParameterTable, string condition = "false")
        {
            bool ifResult = false;

            if (ifActionType == null)
            {
                ifResult = (bool)await condition.EvaluateCode(engine);
            }
            else
            {
                switch (ifActionType)
                {
                case "Number Compare":
                    string num1 = ((from rw in IfActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Number1"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    string numOperand = ((from rw in IfActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Operand"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    string num2 = ((from rw in IfActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Number2"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    var cdecValue1 = Convert.ToDecimal(await num1.EvaluateCode(engine));
                    var cdecValue2 = Convert.ToDecimal(await num2.EvaluateCode(engine));

                    switch (numOperand)
                    {
                    case "is equal to":
                        ifResult = cdecValue1 == cdecValue2;
                        break;

                    case "is not equal to":
                        ifResult = cdecValue1 != cdecValue2;
                        break;

                    case "is greater than":
                        ifResult = cdecValue1 > cdecValue2;
                        break;

                    case "is greater than or equal to":
                        ifResult = cdecValue1 >= cdecValue2;
                        break;

                    case "is less than":
                        ifResult = cdecValue1 < cdecValue2;
                        break;

                    case "is less than or equal to":
                        ifResult = cdecValue1 <= cdecValue2;
                        break;
                    }
                    break;

                case "Date Compare":
                    string date1 = ((from rw in IfActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Date1"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    string dateOperand = ((from rw in IfActionParameterTable.AsEnumerable()
                                           where rw.Field <string>("Parameter Name") == "Operand"
                                           select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    string date2 = ((from rw in IfActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Date2"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    var dt1 = (DateTime)await date1.EvaluateCode(engine);

                    var dt2 = (DateTime)await date2.EvaluateCode(engine);

                    switch (dateOperand)
                    {
                    case "is equal to":
                        ifResult = dt1 == dt2;
                        break;

                    case "is not equal to":
                        ifResult = dt1 != dt2;
                        break;

                    case "is greater than":
                        ifResult = dt1 > dt2;
                        break;

                    case "is greater than or equal to":
                        ifResult = dt1 >= dt2;
                        break;

                    case "is less than":
                        ifResult = dt1 < dt2;
                        break;

                    case "is less than or equal to":
                        ifResult = dt1 <= dt2;
                        break;
                    }
                    break;

                case "Text Compare":
                    string text1 = ((from rw in IfActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Text1"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    string textOperand = ((from rw in IfActionParameterTable.AsEnumerable()
                                           where rw.Field <string>("Parameter Name") == "Operand"
                                           select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    string text2 = ((from rw in IfActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Text2"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    string caseSensitive = ((from rw in IfActionParameterTable.AsEnumerable()
                                             where rw.Field <string>("Parameter Name") == "Case Sensitive"
                                             select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    text1 = (string)await text1.EvaluateCode(engine);

                    text2 = (string)await text2.EvaluateCode(engine);

                    if (caseSensitive == "No")
                    {
                        text1 = text1.ToUpper();
                        text2 = text2.ToUpper();
                    }

                    switch (textOperand)
                    {
                    case "contains":
                        ifResult = text1.Contains(text2);
                        break;

                    case "does not contain":
                        ifResult = !text1.Contains(text2);
                        break;

                    case "is equal to":
                        ifResult = text1 == text2;
                        break;

                    case "is not equal to":
                        ifResult = text1 != text2;
                        break;
                    }
                    break;

                case "Has Value":
                    string variableName = ((from rw in IfActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Variable Name"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    dynamic actualVariable = variableName.EvaluateCode(engine);

                    if (actualVariable.Result != null)
                    {
                        ifResult = true;
                    }
                    else
                    {
                        ifResult = false;
                    }
                    break;

                case "Is Numeric":
                    string isNumericVariableName = ((from rw in IfActionParameterTable.AsEnumerable()
                                                     where rw.Field <string>("Parameter Name") == "Variable Name"
                                                     select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    ifResult = decimal.TryParse((await isNumericVariableName.EvaluateCode(engine)).ToString(), out decimal decimalResult);
                    break;

                case "Error Occured":
                    //get line number
                    string userLineNumber = ((from rw in IfActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "Line Number"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    //convert to int
                    int lineNumber = (int)await userLineNumber.EvaluateCode(engine);

                    //determine if error happened
                    if (engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber).Count() > 0)
                    {
                        var error = engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber).FirstOrDefault();
                        error.ErrorMessage.SetVariableValue(engine, "Error.Message");
                        error.LineNumber.ToString().SetVariableValue(engine, "Error.Line");
                        error.StackTrace.SetVariableValue(engine, "Error.StackTrace");

                        ifResult = true;
                    }
                    else
                    {
                        ifResult = false;
                    }
                    break;

                case "Error Did Not Occur":
                    //get line number
                    string userLineNumber2 = ((from rw in IfActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "Line Number"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    //convert to int
                    int lineNumber2 = (int)await userLineNumber2.EvaluateCode(engine);

                    //determine if error happened
                    if (engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber2).Count() == 0)
                    {
                        ifResult = true;
                    }
                    else
                    {
                        var error = engine.ErrorsOccured.Where(f => f.LineNumber == lineNumber2).FirstOrDefault();
                        error.ErrorMessage.SetVariableValue(engine, "Error.Message");
                        error.LineNumber.ToString().SetVariableValue(engine, "Error.Line");
                        error.StackTrace.SetVariableValue(engine, "Error.StackTrace");

                        ifResult = false;
                    }
                    break;

                case "Window Name Exists":
                    //get user supplied name
                    string windowName = ((from rw in IfActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Window Name"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault());
                    //variable translation
                    string variablizedWindowName = (string)await windowName.EvaluateCode(engine);

                    //search for window
                    IntPtr windowPtr = User32Functions.FindWindow(variablizedWindowName);

                    //conditional
                    if (windowPtr != IntPtr.Zero)
                    {
                        ifResult = true;
                    }
                    break;

                case "Active Window Name Is":
                    string activeWindowName = ((from rw in IfActionParameterTable.AsEnumerable()
                                                where rw.Field <string>("Parameter Name") == "Window Name"
                                                select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    string variablizedActiveWindowName = (string)await activeWindowName.EvaluateCode(engine);

                    var currentWindowTitle = User32Functions.GetActiveWindowTitle();

                    if (currentWindowTitle == variablizedActiveWindowName)
                    {
                        ifResult = true;
                    }
                    break;

                case "File Exists":
                    string fileName = ((from rw in IfActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "File Path"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    string trueWhenFileExists = ((from rw in IfActionParameterTable.AsEnumerable()
                                                  where rw.Field <string>("Parameter Name") == "True When"
                                                  select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    var userFileSelected = (string)await fileName.EvaluateCode(engine);

                    bool fileExistCheck = false;
                    if (trueWhenFileExists == "It Does Exist")
                    {
                        fileExistCheck = true;
                    }

                    if (File.Exists(userFileSelected) == fileExistCheck)
                    {
                        ifResult = true;
                    }
                    break;

                case "Folder Exists":
                    string folderName = ((from rw in IfActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Folder Path"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    string trueWhenFolderExists = ((from rw in IfActionParameterTable.AsEnumerable()
                                                    where rw.Field <string>("Parameter Name") == "True When"
                                                    select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    var userFolderSelected = (string)await folderName.EvaluateCode(engine);

                    bool folderExistCheck = false;
                    if (trueWhenFolderExists == "It Does Exist")
                    {
                        folderExistCheck = true;
                    }

                    if (Directory.Exists(userFolderSelected) == folderExistCheck)
                    {
                        ifResult = true;
                    }
                    break;

                case "Selenium Web Element Exists":
                    string instanceName = ((from rw in IfActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Selenium Instance Name"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    OBAppInstance instance = (OBAppInstance)await instanceName.EvaluateCode(engine);

                    string parameterName = ((from rw in IfActionParameterTable.AsEnumerable()
                                             where rw.Field <string>("Parameter Name") == "Element Search Parameter"
                                             select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    string searchMethod = ((from rw in IfActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Element Search Method"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    string timeoutStr = ((from rw in IfActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault());

                    int timeout = (int)await timeoutStr.EvaluateCode(engine);

                    string trueWhenElementExists = (from rw in IfActionParameterTable.AsEnumerable()
                                                    where rw.Field <string>("Parameter Name") == "True When"
                                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    bool elementExists = await ElementExists(engine, instance, searchMethod, parameterName, "Find Element", timeout);

                    ifResult = elementExists;

                    if (trueWhenElementExists == "It Does Not Exist")
                    {
                        ifResult = !ifResult;
                    }
                    break;

                case "GUI Element Exists":
                    string guiWindowName = (from rw in IfActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Window Name"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    windowName = (string)await guiWindowName.EvaluateCode(engine);

                    string elementSearchParam = (from rw in IfActionParameterTable.AsEnumerable()
                                                 where rw.Field <string>("Parameter Name") == "Element Search Parameter"
                                                 select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    elementSearchParam = (string)await elementSearchParam.EvaluateCode(engine);

                    string elementSearchMethod = (from rw in IfActionParameterTable.AsEnumerable()
                                                  where rw.Field <string>("Parameter Name") == "Element Search Method"
                                                  select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    elementSearchMethod = (string)await elementSearchMethod.EvaluateCode(engine);

                    string trueWhenGUIElementExists = (from rw in IfActionParameterTable.AsEnumerable()
                                                       where rw.Field <string>("Parameter Name") == "True When"
                                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    string timeoutString = (from rw in IfActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    //set up search parameter table
                    var uiASearchParameters = new DataTable();
                    uiASearchParameters.Columns.Add("Enabled");
                    uiASearchParameters.Columns.Add("Parameter Name");
                    uiASearchParameters.Columns.Add("Parameter Value");
                    uiASearchParameters.Rows.Add(true, elementSearchMethod, elementSearchParam);

                    int vTimeout = (int)await timeoutString.EvaluateCode(engine);

                    AutomationElement handle = null;
                    var timeToEnd            = DateTime.Now.AddSeconds(vTimeout);
                    while (timeToEnd >= DateTime.Now)
                    {
                        try
                        {
                            handle = await SearchForGUIElement(engine, uiASearchParameters, windowName);

                            break;
                        }
                        catch (Exception)
                        {
                            engine.ReportProgress("Element Not Yet Found... " + (timeToEnd - DateTime.Now).Seconds + "s remain");
                            Thread.Sleep(500);
                        }
                    }

                    if (handle is null)
                    {
                        ifResult = false;
                    }
                    else
                    {
                        ifResult = true;
                    }

                    if (trueWhenGUIElementExists == "It Does Not Exist")
                    {
                        ifResult = !ifResult;
                    }
                    break;

                case "Image Element Exists":
                    string imageName = (from rw in IfActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Captured Image Variable"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    string accuracyString;
                    double accuracy;
                    try
                    {
                        accuracyString = (from rw in IfActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Accuracy (0-1)"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault();
                        accuracy = (double)await accuracyString.EvaluateCode(engine);

                        if (accuracy > 1 || accuracy < 0)
                        {
                            throw new ArgumentOutOfRangeException("Accuracy value is out of range (0-1)");
                        }
                    }
                    catch (Exception)
                    {
                        throw new InvalidDataException("Accuracy value is invalid");
                    }

                    string trueWhenImageExists = (from rw in IfActionParameterTable.AsEnumerable()
                                                  where rw.Field <string>("Parameter Name") == "True When"
                                                  select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    var capturedImage = (Bitmap)await imageName.EvaluateCode(engine);

                    string imageTimeoutString = (from rw in IfActionParameterTable.AsEnumerable()
                                                 where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                                 select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    int imageTimeout = (int)await imageTimeoutString.EvaluateCode(engine);

                    var element = FindImageElement(capturedImage, accuracy, engine, DateTime.Now.AddSeconds(imageTimeout));
                    FormsHelper.ShowAllForms(engine.EngineContext.IsDebugMode);

                    if (element != null)
                    {
                        ifResult = true;
                    }
                    else
                    {
                        ifResult = false;
                    }

                    if (trueWhenImageExists == "It Does Not Exist")
                    {
                        ifResult = !ifResult;
                    }
                    break;

                case "App Instance Exists":
                    string appInstanceName = (from rw in IfActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "Instance Name"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault();


                    string trueWhenAppInstanceExists = (from rw in IfActionParameterTable.AsEnumerable()
                                                        where rw.Field <string>("Parameter Name") == "True When"
                                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    var appInstanceObj = (OBAppInstance)await appInstanceName.EvaluateCode(engine);

                    if (appInstanceObj == null)
                    {
                        ifResult = false;
                    }
                    else
                    {
                        ifResult = appInstanceObj.Value.InstanceExists();
                    }

                    if (trueWhenAppInstanceExists == "It Does Not Exist")
                    {
                        ifResult = !ifResult;
                    }
                    break;

                default:
                    throw new Exception("If type not recognized!");
                }
            }
            return(ifResult);
        }
        private void tmrNotify_Tick(object sender, EventArgs e)
        {
            if (CurrentEngine == null)
            {
                IsScriptRunning = false;
            }
            else if (CurrentEngine != null && !CurrentEngine.EngineContext.IsChildEngine &&
                     CurrentEngine.EngineContext.CurrentEngineStatus == EngineStatus.Finished && !_isDebugMode)
            {
                IsScriptRunning = false;
                FormsHelper.ShowAllForms(true);
                _isDebugMode = true;
            }

            if (_appSettings == null)
            {
                return;
            }

            if (_appSettings.ClientSettings.AntiIdleWhileOpen && DateTime.Now > _lastAntiIdleEvent.AddMinutes(1))
            {
                PerformAntiIdle();
            }

            //check if notification is required
            if (_notificationList.Count > 0 && _notificationExpires < DateTime.Now)
            {
                var itemToDisplay = _notificationList[0];
                _notificationList.RemoveAt(0);

                int displayTime;
                switch (itemToDisplay.Item2.Name)
                {
                case "Transparent":
                    displayTime = 0;
                    break;

                case "White":
                    displayTime = 1;
                    break;

                case "Yellow":
                    displayTime = 2;
                    break;

                case "Red":
                    displayTime = 3;
                    break;

                default:
                    displayTime = 1;
                    break;
                }
                _notificationExpires = DateTime.Now.AddSeconds(displayTime);
                ShowNotification(itemToDisplay.Item1, itemToDisplay.Item2);
            }
            else if (_notificationList.Count == 0 && !_isNotificationListEmpty)
            {
                pnlStatus.Invalidate();
                _isNotificationListEmpty = true;
            }
            else if (!_isNotificationListEmpty)
            {
                pnlStatus.Invalidate();
            }
        }
Beispiel #5
0
        public async void PerformImageElementAction(IAutomationEngineInstance engine, ImageElement element)
        {
            try
            {
                string clickPosition;
                string xAdjustString;
                string yAdjustString;
                int    xAdjust;
                int    yAdjust;
                switch (v_ImageAction)
                {
                case "Click Image":
                    string clickType = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Click Type"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    clickPosition = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Click Position"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "X Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjust = (int)await xAdjustString.EvaluateCode(engine);

                    yAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    yAdjust = (int)await yAdjustString.EvaluateCode(engine);

                    Point clickPositionPoint = GetClickPosition(clickPosition, element);

                    //move mouse to position
                    var mouseX = clickPositionPoint.X + xAdjust;
                    var mouseY = clickPositionPoint.Y + yAdjust;
                    User32Functions.SendMouseMove(mouseX, mouseY, clickType);
                    break;

                case "Hover Over Image":
                    string hoverPosition = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Hover Position"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    string hoverTime = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Hover Time (Seconds)"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "X Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjust = (int)await xAdjustString.EvaluateCode(engine);

                    yAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    yAdjust = (int)await yAdjustString.EvaluateCode(engine);

                    int evaluatedHoverTime = (int)await hoverTime.EvaluateCode(engine) * 1000;

                    Point hoverPositionPoint = GetClickPosition(hoverPosition, element);

                    //move mouse to position
                    var hoverX = hoverPositionPoint.X + xAdjust;
                    var hoverY = hoverPositionPoint.Y + yAdjust;
                    User32Functions.SendMouseMove(hoverX, hoverY, "");
                    Thread.Sleep(evaluatedHoverTime);
                    break;

                case "Set Text":
                    string textToSet = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Text To Set"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    textToSet = (string)await textToSet.EvaluateCode(engine);

                    clickPosition = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Click Position"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "X Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjust = (int)await xAdjustString.EvaluateCode(engine);

                    yAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    yAdjust = (int)await yAdjustString.EvaluateCode(engine);

                    Point setTextPositionPoint = GetClickPosition(clickPosition, element);

                    //move mouse to position and set text
                    var xPos = setTextPositionPoint.X + xAdjust;
                    var yPos = setTextPositionPoint.Y + yAdjust;
                    User32Functions.SendMouseMove(xPos, yPos, "Left Click");
                    Thread.Sleep(250);

                    var simulator = new InputSimulator();
                    simulator.Keyboard.TextEntry(textToSet);
                    Thread.Sleep(100);
                    break;

                case "Set Secure Text":
                    var secureString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Secure String Variable"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    clickPosition = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Click Position"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "X Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    xAdjust = (int)await xAdjustString.EvaluateCode(engine);

                    yAdjustString = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault();
                    yAdjust = (int)await yAdjustString.EvaluateCode(engine);

                    var secureStrVariable = (SecureString)await secureString.EvaluateCode(engine);

                    secureString = secureStrVariable.ConvertSecureStringToString();

                    Point setSecureTextPositionPoint = GetClickPosition(clickPosition, element);

                    //move mouse to position and set text
                    var xPosition = setSecureTextPositionPoint.X + xAdjust;
                    var yPosition = setSecureTextPositionPoint.Y + yAdjust;
                    User32Functions.SendMouseMove(xPosition, yPosition, "Left Click");
                    Thread.Sleep(250);

                    var simulator2 = new InputSimulator();
                    simulator2.Keyboard.TextEntry(secureString);
                    Thread.Sleep(100);
                    break;

                case "Image Exists":
                    var outputVariable = (from rw in v_ImageActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Output Bool Variable Name"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault();

                    if (element != null)
                    {
                        true.SetVariableValue(engine, outputVariable);
                    }
                    else
                    {
                        false.SetVariableValue(engine, outputVariable);
                    }
                    break;

                default:
                    break;
                }
                FormsHelper.ShowAllForms(engine.EngineContext.IsDebugMode);
            }
            catch (Exception ex)
            {
                FormsHelper.ShowAllForms(engine.EngineContext.IsDebugMode);
                throw ex;
            }
        }
Beispiel #6
0
        public async override Task RunCommand(object sender)
        {
            var    engine     = (IAutomationEngineInstance)sender;
            string windowName = (string)await v_WindowName.EvaluateCode(engine);

            int timeout = (int)await v_Timeout.EvaluateCode(engine);

            var timeToEnd = DateTime.Now.AddSeconds(timeout);

            bool testMode = TestMode;
            //user image to bitmap
            Bitmap userImage = new Bitmap(CommonMethods.Base64ToImage(v_ImageCapture));
            double accuracy;

            try
            {
                accuracy = Convert.ToDouble(await v_MatchAccuracy.EvaluateCode(engine));
                if (accuracy > 1 || accuracy < 0)
                {
                    throw new ArgumentOutOfRangeException("Accuracy value is out of range (0-1)");
                }
            }
            catch (Exception)
            {
                throw new InvalidDataException("Accuracy value is invalid");
            }

            //Activate window if specified
            if (windowName != "None")
            {
                while (timeToEnd >= DateTime.Now)
                {
                    try
                    {
                        if (engine.IsCancellationPending)
                        {
                            break;
                        }

                        User32Functions.ActivateWindow(windowName);

                        if (!User32Functions.GetActiveWindowTitle().Equals(windowName))
                        {
                            throw new Exception($"Window '{windowName}' Not Yet Found... ");
                        }

                        break;
                    }
                    catch (Exception)
                    {
                        engine.ReportProgress($"Window '{windowName}' Not Yet Found... {(timeToEnd - DateTime.Now).Minutes}m, {(timeToEnd - DateTime.Now).Seconds}s remain");
                        Thread.Sleep(500);
                    }
                }

                if (!User32Functions.GetActiveWindowTitle().Equals(windowName))
                {
                    throw new Exception($"Window '{windowName}' Not Found");
                }
                else
                {
                    Thread.Sleep(500);
                }
            }

            dynamic element = null;

            while (timeToEnd >= DateTime.Now)
            {
                try
                {
                    if (engine.IsCancellationPending)
                    {
                        break;
                    }

                    element = CommandsHelper.FindImageElement(userImage, accuracy, engine, timeToEnd);

                    if (element == null)
                    {
                        throw new Exception("Specified image was not found in window!");
                    }
                    else
                    {
                        break;
                    }
                }
                catch (Exception)
                {
                    engine.ReportProgress("Element Not Yet Found... " + (timeToEnd - DateTime.Now).Seconds + "s remain");
                    Thread.Sleep(1000);
                }
            }

            if (element == null)
            {
                FormsHelper.ShowAllForms(engine.EngineContext.IsDebugMode);
                throw new Exception("Specified image was not found in window!");
            }

            PerformImageElementAction(engine, element);
        }