2015-09-28 2 views
1

Кто-нибудь знает, как получить имя/значение элемента AutomationElement пользовательского типа управления? См. Изображение со ссылкой ниже. Я заинтересован в получении имени/значения выделенного AutomationElement, который Microsoft может получить с помощью инструмента Inspect. Я попытался проверить, поддерживает ли AutomationElement IAccessible, поскольку с помощью инструмента Inspect, поскольку IsLegacyIAccessiblePatternAvailableProperty является истинным. Мне не повезло со следующим фрагментом кода, и все, что у меня было, было пустой строкой для всех дочерних элементов AutomationElement элемента управления таблицей (родительский элемент выделенного элемента AutomationElement на изображении). Пожалуйста, порекомендуйте.Как получить имя/значение из настраиваемого элемента управления, например, инструмент «Проверка» от Microsoft?

AutomationElement sibling = TreeWalker.RawViewWalker.GetFirstChild(table); 

      while (sibling != null) 
      { 

       if ((Boolean)sibling.GetCurrentPropertyValue(AutomationElementIdentifiers.IsLegacyIAccessiblePatternAvailableProperty)) 
       { 
        var pattern = ((LegacyIAccessiblePattern)sibling.GetCurrentPattern(LegacyIAccessiblePattern.Pattern)); 
        var name = pattern.GetIAccessible().accValue; 

        //allChildren.Add(sibling); 
        if (((string)name).IndexOf(deviceId) != -1) 
        { 
         AutomationElement device = TreeWalker.RawViewWalker.GetPreviousSibling(sibling); 

         if (device != null) 
         { 
          checkBox = TreeWalker.RawViewWalker.GetPreviousSibling(device); 
          break; 
         } 
        } 
       } 

       sibling = TreeWalker.RawViewWalker.GetNextSibling(sibling); 
      } 

http://i.stack.imgur.com/78I8g.png

ответ

0

Чтобы получить NameProperty использование этого:

объект Temp = yourElement.GetCurrentPropertyValue (AutomationElement.NameProperty); temp.ToString();

примечание: ваш элемент является элементом автоматизации. Например. элемент AutomationElement IPad в таблице

Чтобы получить значение некоторого элемента AutomationElement, вам понадобится ValuePattern, который будет реализован. Который я не вижу на вашем скриншоте. (Исправьте меня, если я ошибаюсь)

btw: Предоставленный снимок экрана не показывает свойство NameProperty или Value - я думаю, что обновление Inspect будет делать это (чтобы избавиться от многих [не поддерживается]. если осмотр теряет след окна (например, окно было закрыто)

btw2: с моей точки зрения AutomationElement.FindFirst & AutomationElement.FindAll довольно удобный API по сравнению с TreeWalker - только в некоторых редких случаях я предпочитаю TreeWalker over FindFirst/Все

+0

Hansa, спасибо за ваш комментарий. Программа, которую я пытаюсь автоматизировать - это сторонняя программа, поэтому я не контролирую ее. Мне просто интересно, как Inspect удалось извлечь текст без наличия свойства Name Property или Value Pattern. Я попытался пройти маршрут IAccessible, поскольку я видел IsLegacyIAccessiblePatternAvailableProperty, но я получаю пустую строку для имени и значения. Я думаю, что должен быть способ сделать это, если Inspect сможет. –

Смежные вопросы