Вопрос:

AutomationElement не извлекает невидимые элементы

c# automation ui-automation

319 просмотра

1 ответ

1848 Репутация автора

Я пытаюсь получить все элементы в моей программе Skype (включая все вкладки чата), но получаю только видимые элементы.

Вот этот код:

var window = AutomationElement.RootElement.FindFirst(TreeScope.Subtree,
                new PropertyCondition(AutomationElement.ClassNameProperty, "tSkMainForm"));

if (window != null)
{
    var items = window.FindAll(TreeScope.Subtree, Condition.TrueCondition);
    //DO SOME CODE...
}

Свойство items не содержит все невидимые элементы (например, внутренние детали чата с кем-то, скажем, Dan). Но если чат с Дэном будет открыт в моем Skype, то свойство items будет содержать также внутренние детали этого чата с Дэном. Я хочу, чтобы свойство items содержало внутренние детали чата, даже если в моем скайпе не открыта вкладка.

Почему мой код не получает все данные? Как я могу получить все данные (включая все вкладки чата, даже если они не открыты)?

Автор: Misha Zaslavsky Источник Размещён: 19.03.2017 03:20

Ответы (1)


0 плюса

183 Репутация автора

перебирая все строки GridControl, используйте реализацию интерфейса IScrollProvider GridControlAutomationPeer

private void Button_Click_1(object sender, RoutedEventArgs e) {
            var p = Process.GetProcessesByName(ProcName).FirstOrDefault(x => x != null);
            if (p == null) {
                Console.WriteLine("proccess: {0} was not found", ProcName); return;
            }
            var root = AutomationElement.RootElement.FindChildByProcessId(p.Id);
            AutomationElement devexGridAutomationElement = root.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, DevexGridAutomationId));
            if (devexGridAutomationElement == null) {
                Console.WriteLine("No AutomationElement was found with id: {0}", DevexGridAutomationId);
                return;
            }

            var cond = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem);
            var devexGridItems = devexGridAutomationElement.FindAll(TreeScope.Descendants, cond);
            GridPattern gridPat = devexGridAutomationElement.GetCurrentPattern(GridPattern.Pattern) as GridPattern;
            Console.WriteLine("number of elements in the grid: {0}", gridPat.Current.RowCount);
        }
Автор: Shilpa Размещён: 28.03.2017 12:40
Вопросы из категории :
32x32