Sebastian Basner / 08.06.2009 / 1 Entwicklung einer GUI Testsoftware für WPF Diplomkolloquium Sebastian Basner Matrikel-Nr.: 381392.

Slides:



Advertisements
Ähnliche Präsentationen
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Advertisements

FH-Hof Einbindung von JavaScript Anweisungen
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Ein Beispiel in Java.
XML-Schema HKI Proseminar Wintersemester 2010/11 Dozentin: Frau Kurz von Jan Kohl und Christian Lütticke.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
Abstrakter Datentyp in C++ I - Klasse -
Einführung in Visual C++
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Klassen und Schnittstellen Klasse: Definiert Zustandsraum ihrer Instanzen vollständig (Implementierung der Struktur, soweit Voraussetzung für die Methoden-
Wizards & Builders GmbH Einführung in die objektorientierte Programmierung Norbert Abb.
Erstellen von COM-Servern in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow COM.
VFP Class Browser. © 1999 TMN-Systemberatung GmbH Einsatz des Class Browser n Managen von Klassen inklusive, ändern, umbenennen, löschen und umdefinieren.
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Silverlight Eine Einführung. Agenda 1.Was ist Silverlight? 2.Die Silverlight Philosophie 3.Vorstellung des Szenarios 4.Einführendes Beispiel 5.Konzepte.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 3 Folie 2 Windows Presentation Foundation (WPF) s.a.
Automated Software Testing
Michael Köster User Experience Specialist Microsoft Corporation.
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Game Development mit LUA Integration und Kommunikation von LUA mit C++ Referat von Paul van Hemmen Seminar: Reusable Content in 3D und Simulationssystemen.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Informatik Wintercamp 2009
Kurzpräsentation von Herbert Schlechta
Avenue - Kleine Scripte, große Wirkung
TDD mit MSTest Stefan Lieser Web:
TDD mit MSTest Stefan Lieser
Stefan Lieser Web:
Javelin Internet-based parallel computing using Java.
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
TDD mit MSTest Stefan Lieser Web:
A Workshop About this chapter General description Units Time Schedule
© Zühlke 2013 Romano Roth Workshop 6 (ws6C) native Entwicklung für mobile Geräte Lektion 5-6: Mega CRM 25. Februar 2013 Folie 1 von 10.
Sammlungsklassen Array.
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
ATOS Weiterentwicklung GUI-Capture nach dem WinRunner Konzept Lösung des Timing-Problems.
Microsoft Silverlight Autor: Christian Pirker. Inhalt Einführung Silverlight Einführung XAML Silverlight 1.0 und 1.1 Silverlight 2.0 Silverlight 3.0 Ausblick.
Objektorientierte Programmierung §Klassen §Objekte §Attribute §Eigenschaften §Methoden §Datenkapselung §Ereignisse §Vererbung §Entwicklungszeit §Laufzeit.
Java Programme nur ein bisschen objektorientiert.
Entwicklung einer Webapplikation mittels HTML, PHP, MySQL, jQuery, und Smarty-Templates am Beispiel einer Studienarbeitsverwaltung.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Seminarvortrag Möglichkeiten zur dreidimensionalen Darstellung von Straßenoberflächen Matthias Baumgarten.
Seminararbeitsvortrag Nils Lange
Das IT - Informationssystem
Applikation-Mining als Methode zur Forms 9i-Migration
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Wesentliche Bestandteile:
Programmierung und Vererbung in Java
Objektorientierte Programmierung
Devops David Jaroš
Überblick zur Protokoll-/ Verbindungswahl zwischen Backend-Server und Gateway ITC-MEETING Tobias Hänel.
 Präsentation transkript:

Sebastian Basner / / 1 Entwicklung einer GUI Testsoftware für WPF Diplomkolloquium Sebastian Basner Matrikel-Nr.:

Sebastian Basner / / 2 Entwicklung einer GUI Testsoftware für WPF Aufgabenstellung Entwicklung einer GUI Testsoftware mit Record & Replay Funktionalität für WPF

Sebastian Basner / / 3 Entwicklung einer GUI Testsoftware für WPF Themen ● Überblick über UI Automation ● Implementierung ● Fazit und Ausblick

Sebastian Basner / / 4 Entwicklung einer GUI Testsoftware für WPF Überblick über UI Automation

Sebastian Basner / / 5 Entwicklung einer GUI Testsoftware für WPF UI Automation ● Nachfolgetechnologie von Microsoft Active Accessibility (MSAA) ● Teil der Windows Automation API ● Zielsetzungen: – Unterstützung von Behinderten – Automatisierung für UI Tests ● Cross Plattform „by design“

Sebastian Basner / / 6 Entwicklung einer GUI Testsoftware für WPF UI Automation ● Steuern von: – WPF – Forms – Win32 – GTK (als GTK# durch Novell implementiert)

Sebastian Basner / / 7 Entwicklung einer GUI Testsoftware für WPF UI Automation ● Elementidentifikation über: – Baumstruktur mit Desktop als root – Automation ID (Anwendung) – Control ID (Steuerelement) ● Zugriff über UI Automation Control Patterns

Sebastian Basner / / 8 Entwicklung einer GUI Testsoftware für WPF Implementierung ● Das GUI ● Festlegen der Testapplikation/Testelemente ● Skript Recording ● Testskript im Überblick ● Skript Replay

Sebastian Basner / / 9 Entwicklung einer GUI Testsoftware für WPF Das GUI

Sebastian Basner / / 10 Entwicklung einer GUI Testsoftware für WPF Das GUI ● WPF ● Panels und Grids ● Möglichst simpel für geringe Einstiegshürde ● Logfenster in der Mitte zur Kontrolle; kein editieren

Sebastian Basner / / 11 Entwicklung einer GUI Testsoftware für WPF Festlegen der Testapplikation ● Referenzierung der Testapplikation ● Aufbau eines Automation Baumes ● Wurzelelement ● Kindelemente ersten und zweiten Grades ● Datentyp AutomationElement

Sebastian Basner / / 12 Entwicklung einer GUI Testsoftware für WPF Festlegen der Testapplikation ● Anwendung muss vollständig gestartet sein ● Desktop ist Wurzelelement AutomationElement aeDesktop = AutomationElement.RootElement; ● Applikationen sind Kinder

Sebastian Basner / / 13 Entwicklung einer GUI Testsoftware für WPF Festlegen der Testapplikation ● Testapplikation finden über Prozessvariable p ● Alternativ über AutomationID ● Referenz auf Hauptfenster aeForm = AutomationElement.FromHandle(p.MainWindowHandle);

Sebastian Basner / / 14 Entwicklung einer GUI Testsoftware für WPF Festlegen der Testelemente ● Im Automation Baum Kindelemente der Applikationen ● Identifikation über Control ID ● Ablegen in AutomationElement AutomationElement ae = aeForm.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, ControlID)); ● Gefahr von manueller Doppelbenennung der Control ID

Sebastian Basner / / 15 Entwicklung einer GUI Testsoftware für WPF Skript Recording ● Kann bei manueller Erstellung übersprungen werden ● Testapplikation muss über GUI gestartet werden ● Eventbasiert

Sebastian Basner / / 16 Entwicklung einer GUI Testsoftware für WPF Skript Recording ● Registrieren eines neuen Eventhandlers AutomationEventHandler invokeHandler = new AutomationEventHandler(OnInvoke); ● Abonnieren des Events Automation.AddAutomationEventHandler(InvokePattern. InvokedEvent, aeForm, TreeScope.Descendants, invokeHandler);

Sebastian Basner / / 17 Entwicklung einer GUI Testsoftware für WPF Skript Recording private void OnInvoke(object source, AutomationEventArgs e) { AutomationElement ae = source as AutomationElement; events.Add("wrapper.Invoke(\"" + ae.Current.AutomationId + "\");"); string result = "Sie haben den Button " + ae.Current.AutomationId + " gedrückt"; GetRecordEventArgs es = new GetRecordEventArgs(result); onGetRecord(es); }

Sebastian Basner / / 18 Entwicklung einer GUI Testsoftware für WPF Testskript im Überblick ● C# statt eigene Skriptsprache ● Einfach änderbar ● Auf das Nötigste beschränkt ● Durch jede andere.NET Sprache ersetzbar

Sebastian Basner / / 19 Entwicklung einer GUI Testsoftware für WPF Testskript im Überblick wrapper.SetValue("textBox1", "1"); wrapper.SetValue("textBox1", "15"); wrapper.SetValue("textBox1", "1556"); wrapper.SetValue("textBox2", "1"); wrapper.SetValue("textBox2", "12"); wrapper.Invoke("button1"); wrapper.GetText("textBox3", "1568"); wrapper.Toggle("quadrierer"); wrapper.GetText("textBox3", " "); wrapper.errors(); Controller.CloseApp();

Sebastian Basner / / 20 Entwicklung einer GUI Testsoftware für WPF Skript Replay ● Kompilierung zur Laufzeit über CodeDOM ● Übergebene Assemblys, DLLs und Objektinstanzen werden hier definiert ● CompileUnit als oberstes Baumelement – CodeCompileUnit compU = new CodeCompileUnit(); ● Namespace Definition – CodeNamespace nameSpace = new CodeNamespace("UIASkript");

Sebastian Basner / / 21 Entwicklung einer GUI Testsoftware für WPF Skript Replay ● Skriptklasse: – Codetype erstellen – Zur Klasse machen CodeTypeDeclaration className = new CodeTypeDeclaration("Skript"); className.IsClass = true;

Sebastian Basner / / 22 Entwicklung einer GUI Testsoftware für WPF Skript Replay ● Skriptmethode: – Instanz vom Typ CodeMemberMethod – Attribute festlegen – Rückgabewert festlegen – Namen festlegen CodeMemberMethod methodName = new CodeMemberMethod(); methodName.Attributes = MemberAttributes.Public; methodName.ReturnType = new CodeTypeReference(typeof(void)); methodName.Name = "testSkript";

Sebastian Basner / / 23 Entwicklung einer GUI Testsoftware für WPF Skript Replay ● Benötigte DLLs in Namespace importieren nameSpace.Imports.Add(new CodeNamespaceImport("System")); ● Klasseninstanzen für Methode bereitstellen methodName.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IAWrapper), "wrapper")); ● Skript auslesen methodName.Statements.Add(new CodeSnippetExpression(ReadFile(content)));

Sebastian Basner / / 24 Entwicklung einer GUI Testsoftware für WPF Skript Replay ● Baum zusammensetzen compU.Namespaces.Add(nameSpace); nameSpace.Types.Add(className); className.Members.Add(methodName); ● Compilerparameter übergeben CompilerParameters compilerParameters = new CompilerParameters((string[])assemblyNames.ToArray()); compilerParameters.GenerateInMemory = true; compilerParameters.CompilerOptions = "/target:library /optimize";

Sebastian Basner / / 25 Entwicklung einer GUI Testsoftware für WPF Skript Replay ● Kompilieren Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider(); res = csc.CompileAssemblyFromDom(compilerParameters, compU); ● Skript ruft Automatisierungsmethoden im Wrapper auf ● Identifizieren des Elements über Control ID

Sebastian Basner / / 26 Entwicklung einer GUI Testsoftware für WPF Skript Replay ● Ausführen des Skriptbefehls über AutomationPatterns InvokePattern ip = (InvokePattern)ae.GetCurrentPattern(InvokePattern.Patter n); ip.Invoke(); ● Rückmeldungen ans GUI string result = "Es wurde der Button " + ae.Current.AutomationId + " gedrückt"; GetTextEventArgs e = new GetTextEventArgs(result); onGetText(e);

Sebastian Basner / / 27 Entwicklung einer GUI Testsoftware für WPF Fazit

Sebastian Basner / / 28 Entwicklung einer GUI Testsoftware für WPF Fazit ● WPF GUI Testtool erfolgreich erstellt ● Nicht „Feature Complete“ – Steuerbare Bedienelemente noch zu vervollständigen ● Stabil ● Diverse Erweiterungsszenarien denkbar – Weitere GUI Typen – Andere „Skriptsprachen“

Sebastian Basner / / 29 Entwicklung einer GUI Testsoftware für WPF Vielen Dank für Ihre Aufmerksamkeit!