예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="element"></param>
        /// <param name="autoElement"></param>
        /// <returns></returns>
        private bool SetElementProperties(IElement element, AutomationElement autoElement, Dictionary <string, int> mapUnknowCounter)
        {
            element.Attributes.DesignedId           = autoElement.Current.AutomationId;
            element.Attributes.DesignedName         = autoElement.Current.Name;
            element.Attributes.AcceleratorKey       = autoElement.Current.AcceleratorKey;
            element.Attributes.AccessKey            = autoElement.Current.AccessKey;
            element.Attributes.ClassName            = autoElement.Current.ClassName;
            element.Attributes.FrameworkId          = autoElement.Current.FrameworkId;
            element.Attributes.HasKeyboardFocus     = autoElement.Current.HasKeyboardFocus;
            element.Attributes.HelpText             = autoElement.Current.HelpText;
            element.Attributes.IsContentElement     = autoElement.Current.IsContentElement;
            element.Attributes.IsControlElement     = autoElement.Current.IsControlElement;
            element.Attributes.IsEnabled            = autoElement.Current.IsEnabled;
            element.Attributes.IsKeyboardFocusable  = autoElement.Current.IsKeyboardFocusable;
            element.Attributes.IsOffscreen          = autoElement.Current.IsOffscreen;
            element.Attributes.IsPassword           = autoElement.Current.IsPassword;
            element.Attributes.IsRequiredForForm    = autoElement.Current.IsRequiredForForm;
            element.Attributes.ItemStatus           = autoElement.Current.ItemStatus;
            element.Attributes.ItemType             = autoElement.Current.ItemType;
            element.Attributes.LocalizedControlType = autoElement.Current.LocalizedControlType;
            element.Attributes.NativeWindowHandle   = autoElement.Current.NativeWindowHandle;
            element.Attributes.ProcessId            = autoElement.Current.ProcessId;
            element.Id = GUI_Utils.GenerateUUID();
            element.Attributes.Name = GetNameElement(element, mapUnknowCounter);

            //get element's screenshot, store as encoded base64
            //ignore path to save image
            var rectBound = autoElement.Current.BoundingRectangle;

            element.Attributes.RectBounding = rectBound;
            string strEncoded = CaptureElement.CaptureScreen(rectBound, null);

            element.Attributes.ImageCaptureEncoded = strEncoded;
            return(true);
        }
예제 #2
0
        private string GetNameElement(IElement element, Dictionary <string, int> mapUnknowCounter)
        {
            string elementType = element.Attributes.ElementType;
            string rawName     = "";

            if (element.Attributes.DesignedName != null && element.Attributes.DesignedName != "")
            {
                if (element.Attributes.DesignedName.Length > MAX_LENGTH_DESIGN_NAME)
                {
                    // TODO: implement better cut string here
                    rawName = element.Attributes.DesignedName.Substring(0, MAX_LENGTH_DESIGN_NAME);
                }
                else
                {
                    rawName = element.Attributes.DesignedName;
                }
            }
            else if (element.Attributes.DesignedId != null && element.Attributes.DesignedId != "")
            {
                rawName = element.Attributes.DesignedId;
            }
            else
            {
                int counter = 0;
                mapUnknowCounter.TryGetValue(elementType, out counter);
                counter++;
                mapUnknowCounter[elementType] = counter;
                rawName = "Unknow_" + counter;
            }
            return
                (elementType + " " + GUI_Utils.NormalizeString(rawName));
        }
예제 #3
0
        private IElement DoConvert(AutomationElement autoElement, IElement parent, Dictionary <string, int> mapUnknowCounter, bool add2Runtime = true)
        {
            IElement re = ConvertElement(autoElement, parent, mapUnknowCounter);

            if (add2Runtime)
            {
                RuntimeInstance.listAutoElement.Add(autoElement);
                try
                {
                    RuntimeInstance.mappingUIElement.Add(autoElement, re);
                }
                catch (ArgumentException)
                {
                    logger.Error("An element with Key = " + GUI_Utils.TryAutoElementToString(autoElement) +
                                 " already exists.");
                }
            }
            if (re == null)
            {
                return(null);
            }
            if (parent == null)
            {
                re.Attributes.ElementPath = new ElementPath(re.Attributes.Name);
            }
            else
            {
                re.Attributes.ElementPath = parent.Attributes.ElementPath.AppendWith(re.Attributes.Name);
                if (parent.Children == null)
                {
                    parent.Children = new List <IElement>();
                }
                parent.Children.Add(re);
            }
            re.Parent = parent;

            /**
             * when 2 or more elements have the same name
             **/
            NormalizeChildrenName(re.Children);
            return(re);
        }
예제 #4
0
 public void AppendNewElement(IElement element, ElementItemVisual parentVisual)
 {
     try
     {
         ElementItemVisual newElementVisual = new ElementItemVisual(element);
         mappingElements.Add(element, newElementVisual);
         if (parentVisual.Children == null)
         {
             parentVisual.Children = new ObservableCollection <ElementItemVisual>();
         }
         parentVisual.Children.Add(newElementVisual);
         newElementVisual.Parent = parentVisual;
         if (element.Children != null)
         {
             foreach (IElement child in element.Children)
             {
                 AppendNewElement(child, newElementVisual);
             }
         }
     } catch (ArgumentException)
     {
         logger.Error("Element " + GUI_Utils.ElementToString(element) + " already existed");
     }
 }
        public void NormalizeStringTest()
        {
            string temp = GUI_Utils.NormalizeString("Header:Abc - Type__d");

            Assert.AreEqual(temp, "Header_Abc_Type_d");
        }