Мы используем код ниже, чтобы получить список элементов из ComboBox внутри окна другого приложения. Этот код работает (правильно получает список элементов) для ComboBox в любом другом приложении, на котором мы тестировали этот код, однако для этого конкретного приложения искаженное свойство Name, полученное для каждого ListItem.
Вот код:
using System.Windows.Automation;
var condition = new PropertyCondition(AutomationElement.NameProperty, "Change/Add/Delete Setting");
var condition2 = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window);
var condition3 = new AndCondition(new Condition[] {condition, condition2});
var window = AutomationElement.RootElement.FindFirst(TreeScope.Subtree, condition3);
condition = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ComboBox);
var combo = window.FindFirst(TreeScope.Subtree, condition);
condition = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ListItem);
AutomationElementCollection children = combo.FindAll(TreeScope.Subtree, condition);
var comboItems = new List<string>();
foreach (AutomationElement child in children)
{
comboItems.Add(child.Current.Name);
}
А вот скриншот того, чем мы закончим для этого приложения.
- Что может привести к искажению свойства Name следующим образом? Может ли это быть проблемой кодирования?
- Как мы можем получить правильный текст для каждого элемента?