public static void xtSelectFromComboBox(this IUIAutomationElement element, string Option) { var childrenOfCombobox = element.xtGetAllChildren(); IUIAutomationElement listItemToSelect = null; bool IsInsideTable = element.xtGetRelative(RelativeType.Parent).CurrentLocalizedControlType == "dataitem"; // Seeing if the intended Option to Select even exists bool found = false; for (int i = 0; i < childrenOfCombobox.Length; i++) { if (childrenOfCombobox.GetElement(i).CurrentName == Option) { found = true; listItemToSelect = (IUIAutomationElement)childrenOfCombobox.GetElement(i); break; } } if (!found) { Console.WriteLine($"List Item is not an Option!!! ComboBox Name: [{element.CurrentName}] - ComboBox ID: [{element.CurrentAutomationId}] - List Item Selection: [{Option}] ."); throw new Exception($"List Item is not an Option!!! ComboBox Name: [{element.CurrentName}] - ComboBox ID: [{element.CurrentAutomationId}] - List Item Selection: [{Option}] ."); } // If intended list item is already selected - just skip everything - no need if (listItemToSelect.xtIsItemSelected()) { return; } // Seeing if a blank option exists bool blankOptionExists = false; for (int i = 0; i < childrenOfCombobox.Length; i++) { if (childrenOfCombobox.GetElement(i).CurrentName == " ") { blankOptionExists = true; break; } } // Block to Complete selection if the combo box is inside a table row if (IsInsideTable) { try { element.xtScrollIntoView(); } catch (Exception e) { } Thread.Sleep(50); element.xtFocus(); Thread.Sleep(50); element.xtClickCenterOfBounds(); for (int i = 0; i < (childrenOfCombobox.Length + 2); i++) { Keyboard.Instance.PressSpecialKey(TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.UP); } for (int i = 0; i < (childrenOfCombobox.Length + 2); i++) { if (listItemToSelect.xtIsItemSelected()) { break; } Keyboard.Instance.PressSpecialKey(TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.DOWN); } goto czCheckpoint; } // Block to complete the ComboBox Selection if (blankOptionExists) { Thread.Sleep(50); element.SetFocus(); Thread.Sleep(50); Keyboard.Instance.PressSpecialKey(TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.SPACE); element.xtCollapse(); for (int i = 0; i < childrenOfCombobox.Length + 2; i++) { Keyboard.Instance.PressSpecialKey(TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.DOWN); if (listItemToSelect.xtIsItemSelected()) { break; } } } else if (!blankOptionExists) { Thread.Sleep(50); element.SetFocus(); Thread.Sleep(50); element.SetFocus(); for (int i = 0; i < (childrenOfCombobox.Length + 2); i++) { Keyboard.Instance.PressSpecialKey(TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.UP); } for (int i = 0; i < (childrenOfCombobox.Length + 2); i++) { Thread.Sleep(50); if (listItemToSelect.xtIsItemSelected()) { break; } Keyboard.Instance.PressSpecialKey(TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.DOWN); } } czCheckpoint: if (!listItemToSelect.xtIsItemSelected()) { Console.WriteLine($"ComboBox list item was not properly selected!!! Element Name: [{element.CurrentName}] - Element ID: [{element.CurrentAutomationId}] - List Item Selection: [{Option}] ."); throw new Exception($"ComboBox list item was not properly selected!!! Element Name: [{element.CurrentName}] - Element ID: [{element.CurrentAutomationId}] - List Item Selection: [{Option}] ."); } Keyboard.Instance.PressSpecialKey(TestStack.White.WindowsAPI.KeyboardInput.SpecialKeys.TAB); Thread.Sleep(100); }