UIAавтоматизация с ToolStripStatusLabel - PullRequest
1 голос
/ 17 июня 2009

У меня есть приложение 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.

Ответы [ 3 ]

1 голос
/ 14 марта 2013

Установите свойство AccessibleName в дополнение к .Text в элементе управления ToolStripStatusLabel. У меня это работает с использованием белых по похожему сценарию:

statusLabel.Text = statusLabel.AccessibleName = "New status value";

0 голосов
/ 18 августа 2009

У меня никогда не было проблем с извлечением текста метки, подобного тому, что вы описываете. На самом деле AutomationId в моем приложении даже одно и то же. Тот факт, что ControlType отображается как ControlType.Edit, вводит в заблуждение. например следующее будет работать

statusText = (string)automationElement.GetCurrentPropertyValue(ValuePattern.ValueProperty);

Где automationElement было найдено с использованием метода Find против ControlType.Edit с AutomationId из "StatusBar.Pane0".

0 голосов
/ 26 июня 2009

Я должен был обойти это, имея две отдельные метки с разным текстом, показывая и скрывая соответствующую. Этого достаточно для моих целей (тестирование с White), но я очень удивлен, что UIAutomation не отображает текстовое значение - это означает, что весь текст в строках состояния в приложениях WinForms недоступен для программ чтения с экрана.

...