UIElement вернуть пустой текст - PullRequest
0 голосов
/ 04 февраля 2019

Я пишу программное обеспечение, которое должно перехватывать AutomationElement приложения.Это AutomationElement определяется в пределах ListBox.Когда я использую inspect.exe, чтобы проверить, как я могу получить значение, соответствующий AutomationElement не имеет дочерних элементов.

Вот код, который я использую, чтобы попытаться получить ListItem:

AutomationElement desktop = AutomationElement.FromHandle (tskBarHwndTest);
AutomationElement dataGrid1 = desktop.FindFirst (System.Windows.Automation.TreeScope.Descendants, new PropertyCondition (AutomationElement.AutomationIdProperty, "QueueListView"));
if (dataGrid1! = null)
{
    AutomationElementCollection lines1 = dataGrid1.FindAll (System.Windows.Automation.TreeScope.Descendants, new PropertyCondition (AutomationElement.ControlTypeProperty, ControlType.ListItem));
    GridPattern pattern = GetGridPattern (dataGrid1);
    AutomationElement tempElement = pattern.GetItem (0, 2)
}

Screenshot Inspect

1 Ответ

0 голосов
/ 10 февраля 2019

Я вижу, что вы ищете "QueueListView", но на скриншоте inspect.exe я не вижу AutomationElement, который является потомком рабочего стола с AutomationId, подобным этому.

Я бы предложил использовать System.Windows.Automation.TreeScope.Children для вашего TreeScope и переходить по одному элементу за раз.При использовании Descendants будет очень медленно что-либо находить, если ваше приложение нетривиально.

Поскольку я не вижу все проверяемые значения, оно будет выглядеть примерно так:

AutomationElement desktop = AutomationElement.RootElement;
AutomationElment mainWindow = desktop.FindFirst(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "<Your Main Window Name>");
//... add code here to get from main window to where your screen shot starts
AutomationElement panello1 = mainWindow.FindAll(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "pannello"))[2];
AutomationElement tabulazione = panello1.FindFirst(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "tabulazione"));
AutomationElement panello2 = tabulazione.FindFirst(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "panello"));
AutomationElement interazioniPersonali = panello2.FindFirst(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Interazioni personali"));
AutomationElement elenco = interazioniPersonali.FindFirst(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "elenco"));
AutomationElement voceDiElenco = interazioniPersonali.FindFirst(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "voce di elenco"));
AutomationElement numero = voceDiElenco.FindAll(System.Windows.Automation.TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "testo"))[2];
//... in if you expand the selected AutomationElement in your screenshot there should be a text element that contains the text you want to get

Это определенно можно уточнить, но это только на основе того, что я вижу на скриншоте.

...