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;
}
}