Установите AccessibleName
свойство в дополнение к .Text
элементу ToolStripStatusLabel
управления. Он работает для меня с использованием White в аналогичном сценарии:
statusLabel.Text = statusLabel.AccessibleName = "New status value";
У меня есть приложение WinForms, и я не могу получить доступ к тексту ToolStripStatusLabel
сквозной UIAutomation. Microsoft подразумевает, что поддержка StatusStrip
s (и предположительно элементов внутри них) ограничена, но это похоже на достаточно простой вариант использования, чтобы он работал.
Элемент управления отображается ControlType.Edit
в UISpy и отображается как текстовое поле только для чтения, однако его значение всегда совпадает с его именем, а не его текстом.
Свойства в UISpy следующие:
AutomationElement
General Accessibility
AccessKey: ""
AcceleratorKey: ""
IsKeyboardFocusable: "False"
LabeledBy: "(null)"
HelpText: ""
State
IsEnabled: "True"
HasKeyboardFocus: "False"
Identification
ClassName: ""
ControlType: "ControlType.Edit"
Culture: "(null)"
AutomationId: "StatusBar.Pane0"
LocalizedControlType: "edit"
Name: "My Label"
ProcessId: "3972 (*****)"
RuntimeId: "42 134002 0"
IsPassword: "False"
IsControlElement: "True"
IsContentElement: "True"
Visibility
BoundingRectangle: "(9, 273, 79, 17)"
ClickablePoint: "48,281"
IsOffscreen: "False"
ControlPatterns
GridItem
Row: "0"
Column: "0"
RowSpan: "1"
ColumnSpan: "1"
ContainingGrid: ""status bar" "statusStrip""
Value
Value: "My Label"
IsReadOnly: "True"
В принципе, я надеюсь на какой-то способ пойти myLabel.Text = "something"
и смогу получить эту ценность как-то через UIAutomation.
.net,windows,winforms,accessibility,ui-automation,
Я должен был обойти это, имея две отдельные метки с разным текстом, и показывать и скрывать соответствующий. Этого достаточно для моих целей (тестирование с White), но я очень удивлен тем, что UIAutomation не отображает текстовое значение - в основном это означает, что весь текст в барах состояния в приложениях WinForms недоступен для чтения с экрана.
У меня никогда не было проблемы с извлечением текста ярлыка, подобного тому, что вы описываете. На самом деле AutomationId
в моем приложении все равно. Тот факт, который ControlType
показан как ControlType.Edit
, вводит в заблуждение. например, следующее будет работать
statusText = (string)automationElement.GetCurrentPropertyValue(ValuePattern.ValueProperty);
Где automationElement
находится метод поиска ControlType.Edit
с помощью AutomationId
метода "StatusBar.Pane0"
.