WinForms Anwendungen sind bereits Bestandteil des .NET Frameworks seit der ersten Version und haben eine entsprechend hohe Verbreitung bei geschäftskritischen Anwendungen. Ähnlich wie bei den WPF-Anwendungen gibt es sehr oft Probleme beim Zusammenspiel zwischen UI Test (Coded UI) Frameworks und der jeweiligen Oberfläche der Anwendung. Nachdem wir im letzten Beitrag die ersten Schritte zur Optimierung von WPF-Anwendungen mit Standard-Controls unternommen haben, betrachten wir jetzt die Frage: Wie passe ich WinForms an, sodass diese optimal vom CodedUI Framework angesprochen werden können?
Im Rahmen des aktuellen Artikels habe ich eine einfache WinForms-Anwendung mit einem Button und einer TextBox geschrieben, um die Grundprinzipien zu erläutern. Als ersten Schritt habe ich meine einfache Anwendung mit dem UI Accessability Scanner (siehe Teil 1) überprüft und als Ergebnis wurden Probleme mit der TextBox diagnostiziert (siehe folgenden Screenshot). Speziell die TextBox wurde in meiner Beispielanwendung als kritisch identifziert, weil Sie kein Label als Bezeichner hat und deshalb schlecht für das Framework identifizierbar ist.
Um die im oberen Screenshot gezeigten Probleme zu lösen, müssen wir bei den WinForms Controls die Accessible-Eigenschaften setzen. Die Accessible-Properties sorgen dafür, dass das UITest-Framework unsere WinForms-Controls via MSAA besser ansprechen kann. Als Entwickler kann man die Accessible Properties als Gegenpart zur AutomationProperty bei den WPF Controls sehen. Die wichtigste Eigenschaft aus der Familie der Accessible Properties ist AccessibleName (siehe Screenshot). Der AccessibleName ermöglicht die eindeutige Identifizierung eines Controls und sollte auf einen eindeutigen nicht lokalisierten Wert gesetzt werden.
Fazit
Mit einfachen Tricks ist auch die Optimierung von bestehenden bzw. zukünftigen WinForms Anwendungen mit einfachen Mitteln möglich. Die Entscheidung über die Verfolgbarkeit von Controls wird letzendlich oft über die Accessible-Properties-Familie bestimmt.
Links und weiterführende Informationen
[1] Control.AccessibleName-Eigenschaft: http://msdn.microsoft.com/de-de/library/system.windows.forms.control.accessiblename%28VS.80%29.aspx