UIauTomation mit ToolstripStatusLabel
-
06-07-2019 - |
Frage
Ich habe eine WinForms -App und kann nicht auf den Text von a zugreifen ToolStripStatusLabel
Durch UIAUTOMATION. Microsoft impliziert dass die Unterstützung für StatusStrip
S (und vermutlich in ihnen) sind begrenzt, aber dies scheint ein grundlegender Anwendungsfall zu sein, damit er funktionieren sollte.
Die Kontrolle zeigt sich mit ControlType.Edit
in uispy und scheint nur schreibgeschütztes Textfeld zu sein, aber sein Wert ist immer der gleiche wie sein Name, nicht seinen Text.
Die Eigenschaften in uispy sind wie folgt:
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"
Grundsätzlich hoffe ich auf eine Möglichkeit zu gehen myLabel.Text = "something"
und in der Lage sein, diesen Wert irgendwie durch Uiautomation herauszuholen.
Lösung
Setzen Sie die AccessibleName
Eigenschaft zusätzlich zu .Text
auf der ToolStripStatusLabel
Kontrolle. Es funktioniert für mich mit Weiß in einem ähnlichen Szenario:
statusLabel.Text = statusLabel.AccessibleName = "New status value";
Andere Tipps
Ich musste dies umgehen, indem ich zwei separate Etiketten mit unterschiedlichem Text habe und den entsprechenden Zeigen und Verstecken zeigte. Dies reicht für meine Zwecke aus (Tests mit Weiß), aber ich bin sehr überrascht, dass UIAUTOMATION den Textwert nicht auffließt - es bedeutet im Grunde, dass alle Text in Statusbalken in WinForms -Anwendungen für Bildschirmleser nicht zugänglich sind.
Ich hatte noch nie ein Problem damit, den Text eines Etiketts zu rufen, das dem ähnlich ist, was Sie beschreiben. In der Tat das AutomationId
ist sogar in meiner Bewerbung dasselbe. Die Tatsache, dass ControlType
wird als angezeigt ControlType.Edit
ist irreführend. zB der folgende wird funktionieren
statusText = (string)automationElement.GetCurrentPropertyValue(ValuePattern.ValueProperty);
Wo automationElement
wurde mit einer Fundmethode gegen gefunden ControlType.Edit
mit einem AutomationId
von "StatusBar.Pane0"
.