ToolStripTextBox, ToolStripComboBox не автоматизированы

В UI Automation при автоматизации элементов панели инструментов мы сталкиваемся с проблемой, которая описана ниже.

Я добавляю элементы панели инструментов следующим образом

this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripButton1, this.toolStripButton2, this.toolStripComboBox1, this.toolStripButton3});

При запуске автоматизации пользовательского интерфейса (System.Windows.Automation) автоматизация пользовательского интерфейса находит элементы управления до тех пор, пока toolStripButton2 (т.е.) элементы управления в левой части поля со списком инструментов не будут распознаны, но в элементах управления с правой стороны. (Если я заставлю поле со списком идти правый самый пульт все работает нормально)

Примечание. В инструменте Inspect.exe из наборов Windows отображаются все элементы управления, но при попытке доступа к последнему инструментуStripButton3 возвращается значение null.

Здесь я прикрепил упрощенный код, ожидается, что buttonCollection получит 3 кнопки, но в моем случае это только две.

AutomationElement toolstrip = viewTab.FindFirst(TreeScope.Children,
            new PropertyCondition(AutomationElement.AutomationIdProperty, "toolStrip1"));

        AutomationElementCollection buttonCollection = toolstrip.FindAll(TreeScope.Children,
            new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "button"));

И ToolStripTextBox, и ToolStripComboBox демонстрируют одинаковое поведение.

Я хотел бы знать, что происходит не так, как мой подход.


person Kesavan D    schedule 08.10.2015    source источник


Ответы (1)


Я опубликовал один подход, который позволит вам получить доступ ко всем кнопкам, в ответ на ваш вопрос по адресу https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/2363de9f-3bf0.-48dc-a914-1eef5bcf1482/toolstriptextbox-toolstripcombobox-not-automated?forum=windowsaccessibilityandautomation.

Спасибо,

Парень

person Guy Barker - Microsoft    schedule 12.10.2015
comment
что вы сказали, используя Windows UIA API. Тем временем мы почти завершили все наши работы с использованием .NET UIA API в нашем приложении, поэтому мы не могли откатиться назад и начать все технико-экономическое обоснование и написание сценариев с нуля. Я хотел бы поделиться обходным путем, который мы использовали на нашей стороне, на основе нашего приложения. 1. У нас есть все элементы панели инструментов с указанным ограничивающим прямоугольником 2. Следовательно, с последним распознаваемым элементом панели инструментов мы получили его ограничивающий прямоугольник и вычислили расположение следующих элементов 3. Мы распознали пропущенную панель инструментов с помощью AutomationElement.FromPoint() - person Kesavan D; 13.10.2015