Не удается получить шаблон для элемента управления при использовании библиотеки System.WindowsAutomation - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь автоматизировать приложение WinForms с помощью System.Windows.Automation, я могу получить элемент (элемент табуляции)

var tab = window.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Tab));

, но не могу получить шаблон длявыберите его (SelectionItemPattern).Вот список шаблонов и их доступность для этого элемента (т.е. ни одного):

Patterns for ControlType.TabItem: Is DockPatternIdentifiers.Pattern available: no Is ExpandCollapsePatternIdentifiers.Pattern available: no Is GridItemPatternIdentifiers.Pattern available: no Is GridPatternIdentifiers.Pattern available: no Is InvokePatternIdentifiers.Pattern available: no Is ItemContainerPatternIdentifiers.Pattern available: no Is MultipleViewPatternIdentifiers.Pattern available: no Is RangeValuePatternIdentifiers.Pattern available: no Is ScrollItemPatternIdentifiers.Pattern available: no Is ScrollPatternIdentifiers.Pattern available: no Is SelectionItemPatternIdentifiers.Pattern available: no <------------ Is SelectionPatternIdentifiers.Pattern available: no Is SynchronizedInputPatternIdentifiers.Pattern available: no Is TableItemPatternIdentifiers.Pattern available: no Is TablePatternIdentifiers.Pattern available: no Is TextPatternIdentifiers.Pattern available: no Is TogglePatternIdentifiers.Pattern available: no Is TransformPatternIdentifiers.Pattern available: no Is ValuePatternIdentifiers.Pattern available: no Is VirtualizedItemPatternIdentifiers.Pattern available: no Is WindowPatternIdentifiers.Pattern available: no

Когда я проверяю приложение с помощью inspect.exe или VisualUIAVerifyNative.exe, я вижу, чтошаблон есть и доступен, вывод из inspect.exe:

IsAnnotationPatternAvailable: false IsDragPatternAvailable: false IsDockPatternAvailable: false IsDropTargetPatternAvailable: false IsExpandCollapsePatternAvailable: false IsGridItemPatternAvailable: false IsGridPatternAvailable: false IsInvokePatternAvailable: false IsItemContainerPatternAvailable: false IsLegacyIAccessiblePatternAvailable: true IsMultipleViewPatternAvailable: false IsObjectModelPatternAvailable: false IsRangeValuePatternAvailable: false IsScrollItemPatternAvailable: false IsScrollPatternAvailable: false IsSelectionItemPatternAvailable: true <--------------------------------- IsSelectionPatternAvailable: false IsSpreadsheetItemPatternAvailable: false IsSpreadsheetPatternAvailable: false IsStylesPatternAvailable: false IsSynchronizedInputPatternAvailable: false IsTableItemPatternAvailable: false IsTablePatternAvailable: false IsTextChildPatternAvailable: false IsTextEditPatternAvailable: false IsTextPatternAvailable: false IsTextPattern2Available: false IsTogglePatternAvailable: false IsTransformPatternAvailable: false IsTransform2PatternAvailable: false IsValuePatternAvailable: false IsVirtualizedItemPatternAvailable: false IsWindowPatternAvailable: false

Отлично работает для небольшого приложения, созданного с использованием чистых элементов управления WinForms.В этом случае приложение построено с использованием сторонних компонентов.Мой вывод заключается в том, что проблема в том, как автоматизация реализована в этих элементах управления.

Так действительно ли шаблон доступен?inspect.exe получает использование через другой API?

Я могу запустить тесты доступности в VisualUIAVerifyNative (а именно Pattern Tests> Priority 3 Tests> Select.1.4 test), чтобы выбрать вкладку.Или я могу выбрать, выполнив команду в сетке свойств (Patterns> SelectionItemPattern> Select).

Похоже, я упустил что-то важное в моем коде C #.

Кто-нибудь может помочь?Спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018

Я нашел решение - вместо ссылки System.Windows.Automation.dll я сейчас ссылаюсь Interop.UIAutomationClient.dll.Эта DLL является частью дистрибутива UIAutomationVerify или может быть сгенерирована с помощью TlbImp.exe (см. Как создать dll взаимодействия из UIAutomationClient.dll ).

...