UIAutomation مع ToolStripStatusLabel
-
06-07-2019 - |
سؤال
ولدي التطبيق WinForms عناصر، وأنا لا يمكن أن يبدو للوصول إلى نص ToolStripStatusLabel
من خلال UIAutomation. مايكروسوفت يعني أن الدعم ل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.
المحلول
وتعيين الخاصية AccessibleName
بالإضافة إلى .Text
على السيطرة ToolStripStatusLabel
. بالنسبة لي كان يعمل باستخدام الأبيض في سيناريو مماثل:
وstatusLabel.Text = statusLabel.AccessibleName = "New status value";
نصائح أخرى
ولقد كان للتغلب على ذلك من خلال وجود اثنين من بطاقات منفصلة مع نص مختلف، وإظهار وإخفاء مناسبة واحدة. وهذا يكفي لأغراض بلدي (اختبار مع الأبيض)، ولكن أنا مندهش جدا أن UIAutomation لا السطح قيمة النص - وهو ما يعني في الأساس عن النص في أشرطة المعلومات في تطبيقات WinForms عناصر غير قابلة للوصول إلى قارئات الشاشة
ولقد كان أبدا مشكلة استرجاع نص التسمية على غرار ما تصفون. في الواقع AutomationId
، بل هو نفسه في طلبي. حقيقة أن يظهر ControlType
كما ControlType.Edit
مضلل. مثلا التالية سوف تعمل
statusText = (string)automationElement.GetCurrentPropertyValue(ValuePattern.ValueProperty);
وأين كان يوجد automationElement
باستخدام أسلوب بحث ضد ControlType.Edit
مع AutomationId
من "StatusBar.Pane0"
.