UIAutomation.HasControlInputCmdletBase.TestControlByPropertiesFromHashtable C# (CSharp) Method

TestControlByPropertiesFromHashtable() protected method

protected TestControlByPropertiesFromHashtable ( IUiElement inputElements, IEnumerable searchCriteria, int timeout ) : bool
inputElements IUiElement
searchCriteria IEnumerable
timeout int
return bool
        protected internal bool TestControlByPropertiesFromHashtable(
            IUiElement[] inputElements,
            IEnumerable<Hashtable> searchCriteria,
            int timeout)
        {
            bool result = false;
            
            if (null == searchCriteria || 0 == searchCriteria.Count()) return result;
            if (null == inputElements || 0 == inputElements.Length) return result;
            
            foreach (Hashtable ht in searchCriteria)
            {
                Dictionary<string, object> dict =
                    ht.ConvertHashtableToDictionary();
                
                var cmdlet = new GetControlCmdletBase();
                
                try { cmdlet.Class = dict["CLASS"].ToString(); } catch {}
                try { cmdlet.AutomationId = dict["AUTOMATIONID"].ToString(); } catch {}
                // 20131128
                // try{ cmdlet.ControlType = dict["CONTROLTYPE"].ToString(); } catch {}
                // 20131203
                try { cmdlet.ControlType = new string[] { dict["CONTROLTYPE"].ToString() }; } catch {}
                try { cmdlet.Name = dict["NAME"].ToString(); } catch {}
                try { cmdlet.Value = dict["VALUE"].ToString(); } catch {}
                
                cmdlet.Timeout = timeout;
                
                if (null != inputElements && null != (inputElements as IUiElement[]) && inputElements.Any()) {
                    cmdlet.InputObject = inputElements;
                } else {
                    if (CurrentData.CurrentWindow == null) {
                        return result;
                    }
                    cmdlet.InputObject = new[]{ CurrentData.CurrentWindow };
                }
                
                var controlSearcher =
                    AutomationFactory.GetSearcherImpl<ControlSearcher>() as ControlSearcher;
                
                List<IUiElement> elementsToWorkWith =
                    controlSearcher.GetElements(
                        controlSearcher.ConvertCmdletToControlSearcherData(cmdlet),
                        cmdlet.Timeout);
                
                // 20140212
                // if (null == elementsToWorkWith) {
                if (null == elementsToWorkWith || 0 == elementsToWorkWith.Count) {
//                    WriteVerbose(this, "couldn't get the control(s)");
                    return result;
                } else {
                    
                    // 20140212
                    bool theCurrentHashtableMatchesAtLeastOneElement = false;
                    
                    foreach (IUiElement elementToWorkWith in elementsToWorkWith) {
                        
                        bool oneControlResult = 
                            elementToWorkWith.TestControlByPropertiesFromDictionary(dict);
                        
                        if (oneControlResult) {
                            
                            if (Preferences.HighlightCheckedControl) {
                                UiaHelper.HighlightCheckedControl(elementToWorkWith);
                            }
                            
                            theCurrentHashtableMatchesAtLeastOneElement = true;
                            // result = true;
                            break;
                        } else { // 20130710
                            // 20140211
                            // return result;
                            // nothing to do
                        }
                    
                    } // 20120824
                    
                    if (!theCurrentHashtableMatchesAtLeastOneElement) return result;
                }
            }
            
            // 20140211
            // 20140211
            result = true;
            
            return result;
        }
    }