<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://doc.expecco.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chzeiher</id>
	<title>expecco Wiki (Version 25.x) - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://doc.expecco.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chzeiher"/>
	<link rel="alternate" type="text/html" href="https://doc.expecco.de/wiki/Spezial:Beitr%C3%A4ge/Chzeiher"/>
	<updated>2026-04-26T03:15:59Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Datei:OPCUATutorial.mp4&amp;diff=15200</id>
		<title>Datei:OPCUATutorial.mp4</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Datei:OPCUATutorial.mp4&amp;diff=15200"/>
		<updated>2019-02-28T10:28:30Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: Video ohne Ton für weitere Bearbeitung (Beachte Werbung links unten weil Freeware Aufnahme. also evtl alles nochmal neu)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Video ohne Ton für weitere Bearbeitung (Beachte Werbung links unten weil Freeware Aufnahme. also evtl alles nochmal neu)&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tutorials&amp;diff=15199</id>
		<title>Tutorials</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tutorials&amp;diff=15199"/>
		<updated>2019-02-28T10:08:34Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Erste Schritte OPCUA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Erste Schritte mit expecco =&lt;br /&gt;
&lt;br /&gt;
Die ersten Schritte richten sich an alle, die expecco zum ersten Mal benutzen und sollen als erste Starthilfe dienen. Anhand eines einfachen Beispiels wollen wir Ihnen einen Überblick über expecco verschaffen. Es empfiehlt sich expecco parallel zum Tutorial zu starten um alle Schritte innerhalb von expecco nachvollziehen zu können.&lt;br /&gt;
&lt;br /&gt;
[[Medium:Erste_Schritte_mit_expecco.pdf|Erste Schritte mit expecco.pdf]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte mit Android =&lt;br /&gt;
&lt;br /&gt;
Mit dem Mobile Testing Plugin lassen sich Tests für Apps auf Android- oder iOS-Mobilgeräten erstellen und ausführen. Dieses Tutorial beschreibt das grundsätzliche Vorgehen anhand eines mit gelieferten Beispiels für Android, bestehend aus einer einfachen App und einer expecco-Testsuite. Die App expecco Mobile Demo berechnet und überprüft verschiedene alltägliche Codes: die IBAN aus dem europäischen Zahlungsverkehr, die internationalen GTIN-13-Produktcodes, wie man sie bei Strichcodes im Einzelhandel findet, und die Seriennummern auf Euro-Banknoten. Die Testsuite enthält Testfälle für einzelne Funktionen der App. Dabei sind noch nicht alle Funktionen abgedeckt, sondern werden im Laufe des Tutorials ergänzt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Erste Schritte mit Android&amp;quot; als pdf:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Medium:Erste_Schritte_mit_Android.pdf|Erste Schritte mit Android.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorial als Video bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=H8H4gQO_Tx8 Testing with Android]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Web Test =&lt;br /&gt;
&lt;br /&gt;
Dieses Tutorial führt Sie in das Testen bzw. Automatisieren von Web-Anwendungen in Browsern (chrome, firefox, edge, etc.) ein.&lt;br /&gt;
&lt;br /&gt;
*[[Web Test Tutorial - Teil 1]]&lt;br /&gt;
*[[Web Test Tutorial - Teil 2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Manueller Test =&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial erfahren Sie, wie geführte manuelle Tests mit expecco durchgeführt werden können.&lt;br /&gt;
Manuel Tests können aus bestehenden Testfallbeschreibungen (aus Excel oder anderen Dokumenten) importiert werden,&lt;br /&gt;
und danach schrittweise teil- oder vollautomatisiert werden.&lt;br /&gt;
&lt;br /&gt;
*[[Manueller Test Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Scripting =&lt;br /&gt;
&lt;br /&gt;
*[[Scripting Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Erste Schritte OPCUA=&lt;br /&gt;
&lt;br /&gt;
*[[OPC/en|Kurzbeschreibung zur OPC Library]]&lt;br /&gt;
[[Datei:OPCUATutorial.mp4|Video Tutorial]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bibliotheken =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video &amp;quot;Verwendung von Bibliotheken&amp;quot; bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=moi3AiexalQ Verwendung von Bibliotheken]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tutorial: Generieren von Testdaten =&lt;br /&gt;
&lt;br /&gt;
Eine der am häufigsten gestellten Fragen ist &amp;quot;Wie kann ich Testdaten generieren&amp;quot;. Aufgrund der Flexibilität von expecco gibt es mehrere Lösungen zur Lösung dieser Aufgabe. Je nach Art und Umfang der zu erzeugenden Daten gilt eines von mehreren Mustern. Im Folgenden erhalten Sie einen groben Überblick über dieses Thema. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Generating Test Data|Tutorial: Generieren von Testdaten]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Der Umgang mit Bausteinen =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video &amp;quot;Umgang mit Bausteinen bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=GYXXyJWmNT8 Umgang mit Bausteinen]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Testing Java Applications using Groovy blocks]] =&lt;br /&gt;
Through this tutorial, we&#039;ll use a simple &amp;quot;Bank Account&amp;quot; application as system under test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[expecco API]] =&lt;br /&gt;
Bevor Sie mit der Programmierung beginnen, lesen Sie bitte das Dokument [[How_to_Program/en|&amp;quot;How to Program&amp;quot;]], das den Umgang mit dem Programmcode in expecco beschreibt.&lt;br /&gt;
Sie werden mehr Spaß haben und produktiver sein, wenn Sie die Leistungsfähigkeit der Tools kennen. Das beste Entwicklungserlebnis bietet der Debugger, der Arbeitsbereich (Notepad) und die Dateninspektoren.&lt;br /&gt;
Der Rest dieses Dokuments beschreibt die Syntax und Semantik der elementaren Aktionssprachen; für die Verwendung der Werkzeuge lesen Sie bitte das [[How_to_Program/en|HowTo]] Dokument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Parametrizing Tests|Parametrisierung von Tests]] =&lt;br /&gt;
Parameterwerte (wie Hostnamen, Portnummern, Benutzernamen, DB-Namen usw.) sollten normalerweise nicht buchstäblich als Freeze-Wert verwendet werden oder fest in den Code eines elementaren Aktionsbausteins verdrahtet werden, da dies die Pflege der Suite erschweren kann. Da Sie nach solchen Werten suchen müssen, wenn eine Änderung erforderlich ist (über die Stringsuchfunktion in der linken Baumansicht).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Common_Errors/en|Common Errors and how to Deal with Them]] =&lt;br /&gt;
Dieses Dokument beschreibt die häufigsten Fehlersituationen und gibt Hinweise zur Behebung. Sie ist unvollständig und deckt nicht alle möglichen Fehler ab. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Executor =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Executor#Activity =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Reimport Tool|Reimporting a Library]] =&lt;br /&gt;
Diese Seite erklärt, wie Sie Ihre Bibliotheken mit dem Reimporting-Tool auf dem aktuellsten Stand halten können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[The Use of Tags|Nutzung von Etiketten (Tags)]] =&lt;br /&gt;
&lt;br /&gt;
Elemente in expecco können mit Etiketten (Tags) markiert werden. So werden funktionale Gruppen von Elementen gebildet und das Finden von Elementen in Such-Dialogen vereinfacht. Suchdialoge enthalten dafür eine eine Auswahlbox.&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tutorials&amp;diff=15198</id>
		<title>Tutorials</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tutorials&amp;diff=15198"/>
		<updated>2019-02-28T10:08:16Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Erste Schritte OPCUA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Erste Schritte mit expecco =&lt;br /&gt;
&lt;br /&gt;
Die ersten Schritte richten sich an alle, die expecco zum ersten Mal benutzen und sollen als erste Starthilfe dienen. Anhand eines einfachen Beispiels wollen wir Ihnen einen Überblick über expecco verschaffen. Es empfiehlt sich expecco parallel zum Tutorial zu starten um alle Schritte innerhalb von expecco nachvollziehen zu können.&lt;br /&gt;
&lt;br /&gt;
[[Medium:Erste_Schritte_mit_expecco.pdf|Erste Schritte mit expecco.pdf]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte mit Android =&lt;br /&gt;
&lt;br /&gt;
Mit dem Mobile Testing Plugin lassen sich Tests für Apps auf Android- oder iOS-Mobilgeräten erstellen und ausführen. Dieses Tutorial beschreibt das grundsätzliche Vorgehen anhand eines mit gelieferten Beispiels für Android, bestehend aus einer einfachen App und einer expecco-Testsuite. Die App expecco Mobile Demo berechnet und überprüft verschiedene alltägliche Codes: die IBAN aus dem europäischen Zahlungsverkehr, die internationalen GTIN-13-Produktcodes, wie man sie bei Strichcodes im Einzelhandel findet, und die Seriennummern auf Euro-Banknoten. Die Testsuite enthält Testfälle für einzelne Funktionen der App. Dabei sind noch nicht alle Funktionen abgedeckt, sondern werden im Laufe des Tutorials ergänzt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Erste Schritte mit Android&amp;quot; als pdf:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Medium:Erste_Schritte_mit_Android.pdf|Erste Schritte mit Android.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorial als Video bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=H8H4gQO_Tx8 Testing with Android]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Web Test =&lt;br /&gt;
&lt;br /&gt;
Dieses Tutorial führt Sie in das Testen bzw. Automatisieren von Web-Anwendungen in Browsern (chrome, firefox, edge, etc.) ein.&lt;br /&gt;
&lt;br /&gt;
*[[Web Test Tutorial - Teil 1]]&lt;br /&gt;
*[[Web Test Tutorial - Teil 2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Manueller Test =&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial erfahren Sie, wie geführte manuelle Tests mit expecco durchgeführt werden können.&lt;br /&gt;
Manuel Tests können aus bestehenden Testfallbeschreibungen (aus Excel oder anderen Dokumenten) importiert werden,&lt;br /&gt;
und danach schrittweise teil- oder vollautomatisiert werden.&lt;br /&gt;
&lt;br /&gt;
*[[Manueller Test Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Scripting =&lt;br /&gt;
&lt;br /&gt;
*[[Scripting Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Erste Schritte OPCUA=&lt;br /&gt;
&lt;br /&gt;
*[[OPC|Kurzbeschreibung zur OPC Library]]&lt;br /&gt;
[[Datei:OPCUATutorial.mp4|Video Tutorial]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bibliotheken =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video &amp;quot;Verwendung von Bibliotheken&amp;quot; bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=moi3AiexalQ Verwendung von Bibliotheken]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tutorial: Generieren von Testdaten =&lt;br /&gt;
&lt;br /&gt;
Eine der am häufigsten gestellten Fragen ist &amp;quot;Wie kann ich Testdaten generieren&amp;quot;. Aufgrund der Flexibilität von expecco gibt es mehrere Lösungen zur Lösung dieser Aufgabe. Je nach Art und Umfang der zu erzeugenden Daten gilt eines von mehreren Mustern. Im Folgenden erhalten Sie einen groben Überblick über dieses Thema. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Generating Test Data|Tutorial: Generieren von Testdaten]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Der Umgang mit Bausteinen =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video &amp;quot;Umgang mit Bausteinen bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=GYXXyJWmNT8 Umgang mit Bausteinen]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Testing Java Applications using Groovy blocks]] =&lt;br /&gt;
Through this tutorial, we&#039;ll use a simple &amp;quot;Bank Account&amp;quot; application as system under test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[expecco API]] =&lt;br /&gt;
Bevor Sie mit der Programmierung beginnen, lesen Sie bitte das Dokument [[How_to_Program/en|&amp;quot;How to Program&amp;quot;]], das den Umgang mit dem Programmcode in expecco beschreibt.&lt;br /&gt;
Sie werden mehr Spaß haben und produktiver sein, wenn Sie die Leistungsfähigkeit der Tools kennen. Das beste Entwicklungserlebnis bietet der Debugger, der Arbeitsbereich (Notepad) und die Dateninspektoren.&lt;br /&gt;
Der Rest dieses Dokuments beschreibt die Syntax und Semantik der elementaren Aktionssprachen; für die Verwendung der Werkzeuge lesen Sie bitte das [[How_to_Program/en|HowTo]] Dokument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Parametrizing Tests|Parametrisierung von Tests]] =&lt;br /&gt;
Parameterwerte (wie Hostnamen, Portnummern, Benutzernamen, DB-Namen usw.) sollten normalerweise nicht buchstäblich als Freeze-Wert verwendet werden oder fest in den Code eines elementaren Aktionsbausteins verdrahtet werden, da dies die Pflege der Suite erschweren kann. Da Sie nach solchen Werten suchen müssen, wenn eine Änderung erforderlich ist (über die Stringsuchfunktion in der linken Baumansicht).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Common_Errors/en|Common Errors and how to Deal with Them]] =&lt;br /&gt;
Dieses Dokument beschreibt die häufigsten Fehlersituationen und gibt Hinweise zur Behebung. Sie ist unvollständig und deckt nicht alle möglichen Fehler ab. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Executor =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Executor#Activity =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Reimport Tool|Reimporting a Library]] =&lt;br /&gt;
Diese Seite erklärt, wie Sie Ihre Bibliotheken mit dem Reimporting-Tool auf dem aktuellsten Stand halten können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[The Use of Tags|Nutzung von Etiketten (Tags)]] =&lt;br /&gt;
&lt;br /&gt;
Elemente in expecco können mit Etiketten (Tags) markiert werden. So werden funktionale Gruppen von Elementen gebildet und das Finden von Elementen in Such-Dialogen vereinfacht. Suchdialoge enthalten dafür eine eine Auswahlbox.&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tutorials&amp;diff=15197</id>
		<title>Tutorials</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tutorials&amp;diff=15197"/>
		<updated>2019-02-28T09:48:49Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Erste Schritte Scripting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Erste Schritte mit expecco =&lt;br /&gt;
&lt;br /&gt;
Die ersten Schritte richten sich an alle, die expecco zum ersten Mal benutzen und sollen als erste Starthilfe dienen. Anhand eines einfachen Beispiels wollen wir Ihnen einen Überblick über expecco verschaffen. Es empfiehlt sich expecco parallel zum Tutorial zu starten um alle Schritte innerhalb von expecco nachvollziehen zu können.&lt;br /&gt;
&lt;br /&gt;
[[Medium:Erste_Schritte_mit_expecco.pdf|Erste Schritte mit expecco.pdf]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte mit Android =&lt;br /&gt;
&lt;br /&gt;
Mit dem Mobile Testing Plugin lassen sich Tests für Apps auf Android- oder iOS-Mobilgeräten erstellen und ausführen. Dieses Tutorial beschreibt das grundsätzliche Vorgehen anhand eines mit gelieferten Beispiels für Android, bestehend aus einer einfachen App und einer expecco-Testsuite. Die App expecco Mobile Demo berechnet und überprüft verschiedene alltägliche Codes: die IBAN aus dem europäischen Zahlungsverkehr, die internationalen GTIN-13-Produktcodes, wie man sie bei Strichcodes im Einzelhandel findet, und die Seriennummern auf Euro-Banknoten. Die Testsuite enthält Testfälle für einzelne Funktionen der App. Dabei sind noch nicht alle Funktionen abgedeckt, sondern werden im Laufe des Tutorials ergänzt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Erste Schritte mit Android&amp;quot; als pdf:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Medium:Erste_Schritte_mit_Android.pdf|Erste Schritte mit Android.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorial als Video bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=H8H4gQO_Tx8 Testing with Android]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Web Test =&lt;br /&gt;
&lt;br /&gt;
Dieses Tutorial führt Sie in das Testen bzw. Automatisieren von Web-Anwendungen in Browsern (chrome, firefox, edge, etc.) ein.&lt;br /&gt;
&lt;br /&gt;
*[[Web Test Tutorial - Teil 1]]&lt;br /&gt;
*[[Web Test Tutorial - Teil 2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Manueller Test =&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial erfahren Sie, wie geführte manuelle Tests mit expecco durchgeführt werden können.&lt;br /&gt;
Manuel Tests können aus bestehenden Testfallbeschreibungen (aus Excel oder anderen Dokumenten) importiert werden,&lt;br /&gt;
und danach schrittweise teil- oder vollautomatisiert werden.&lt;br /&gt;
&lt;br /&gt;
*[[Manueller Test Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erste Schritte Scripting =&lt;br /&gt;
&lt;br /&gt;
*[[Scripting Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Erste Schritte OPCUA=&lt;br /&gt;
&lt;br /&gt;
*[[Scripting Tutorial]]&lt;br /&gt;
[[Datei:OPCUATutorial.mp4|Video Tutorial]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bibliotheken =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video &amp;quot;Verwendung von Bibliotheken&amp;quot; bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=moi3AiexalQ Verwendung von Bibliotheken]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tutorial: Generieren von Testdaten =&lt;br /&gt;
&lt;br /&gt;
Eine der am häufigsten gestellten Fragen ist &amp;quot;Wie kann ich Testdaten generieren&amp;quot;. Aufgrund der Flexibilität von expecco gibt es mehrere Lösungen zur Lösung dieser Aufgabe. Je nach Art und Umfang der zu erzeugenden Daten gilt eines von mehreren Mustern. Im Folgenden erhalten Sie einen groben Überblick über dieses Thema. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Generating Test Data|Tutorial: Generieren von Testdaten]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Der Umgang mit Bausteinen =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video &amp;quot;Umgang mit Bausteinen bei &amp;quot;YouTube&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=GYXXyJWmNT8 Umgang mit Bausteinen]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Testing Java Applications using Groovy blocks]] =&lt;br /&gt;
Through this tutorial, we&#039;ll use a simple &amp;quot;Bank Account&amp;quot; application as system under test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[expecco API]] =&lt;br /&gt;
Bevor Sie mit der Programmierung beginnen, lesen Sie bitte das Dokument [[How_to_Program/en|&amp;quot;How to Program&amp;quot;]], das den Umgang mit dem Programmcode in expecco beschreibt.&lt;br /&gt;
Sie werden mehr Spaß haben und produktiver sein, wenn Sie die Leistungsfähigkeit der Tools kennen. Das beste Entwicklungserlebnis bietet der Debugger, der Arbeitsbereich (Notepad) und die Dateninspektoren.&lt;br /&gt;
Der Rest dieses Dokuments beschreibt die Syntax und Semantik der elementaren Aktionssprachen; für die Verwendung der Werkzeuge lesen Sie bitte das [[How_to_Program/en|HowTo]] Dokument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Parametrizing Tests|Parametrisierung von Tests]] =&lt;br /&gt;
Parameterwerte (wie Hostnamen, Portnummern, Benutzernamen, DB-Namen usw.) sollten normalerweise nicht buchstäblich als Freeze-Wert verwendet werden oder fest in den Code eines elementaren Aktionsbausteins verdrahtet werden, da dies die Pflege der Suite erschweren kann. Da Sie nach solchen Werten suchen müssen, wenn eine Änderung erforderlich ist (über die Stringsuchfunktion in der linken Baumansicht).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Common_Errors/en|Common Errors and how to Deal with Them]] =&lt;br /&gt;
Dieses Dokument beschreibt die häufigsten Fehlersituationen und gibt Hinweise zur Behebung. Sie ist unvollständig und deckt nicht alle möglichen Fehler ab. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Executor =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- = Executor#Activity =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Reimport Tool|Reimporting a Library]] =&lt;br /&gt;
Diese Seite erklärt, wie Sie Ihre Bibliotheken mit dem Reimporting-Tool auf dem aktuellsten Stand halten können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[The Use of Tags|Nutzung von Etiketten (Tags)]] =&lt;br /&gt;
&lt;br /&gt;
Elemente in expecco können mit Etiketten (Tags) markiert werden. So werden funktionale Gruppen von Elementen gebildet und das Finden von Elementen in Such-Dialogen vereinfacht. Suchdialoge enthalten dafür eine eine Auswahlbox.&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=OPC/en&amp;diff=15196</id>
		<title>OPC/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=OPC/en&amp;diff=15196"/>
		<updated>2019-02-27T11:51:16Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OPC is a wellknown communication framework used in manufactoring, factory automation and the IoT (&amp;quot;&#039;&#039;Internet of Things&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Traditionally, OPC used COM/DCOM as underlying transport and was therefore more or less bound to Windows architectures (or required expensive COM/DCOM frameworks under Unix/Linux).&lt;br /&gt;
In contrast, the more recent OPC-UA (&amp;quot;&#039;&#039;OPC-Unified Architecture&#039;&#039;&amp;quot;) uses standard TCP communication on top of which either binary data or XML-based HTTP requests are exchanged.&lt;br /&gt;
&lt;br /&gt;
This plugin provides both a server and a client implementation of OPC-UA, by interfacing an open source (and license free) OPC-UA implementation written for NodeJS.&lt;br /&gt;
&lt;br /&gt;
==Node Installation==&lt;br /&gt;
NodeJS is mandatory to be installed on our machine.&lt;br /&gt;
&lt;br /&gt;
Check if node is already present (by entering on the command line): &lt;br /&gt;
 &amp;lt;code&amp;gt;node --version&amp;lt;/code&amp;gt;&lt;br /&gt;
or open the expecco settings-dialog and navigate to &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot;.&lt;br /&gt;
If node is not installed, download and install it from &amp;quot;https://nodejs.org/en/download&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Also make sure that the node package manager (npm) is installed with&lt;br /&gt;
 &amp;lt;code&amp;gt;npm -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Node-OPC-UA Installation==&lt;br /&gt;
&amp;quot;node-opcua&amp;quot; is an open source, license free and pure JavaScript implementation of OPC-UA for nodeJS. &lt;br /&gt;
For more information, consult &amp;quot;https://github.com/node-opcua&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;npm&amp;quot;, the node package manager, install the &amp;quot;node-opcua&amp;quot; package:&amp;lt;br&amp;gt;&lt;br /&gt;
Disclaimer! using &amp;lt;code&amp;gt;install&amp;lt;/code&amp;gt; in this way will install the files locally in your current directory.&lt;br /&gt;
If you wish for a globally available module, add a &amp;lt;code&amp;gt;-g&amp;lt;/code&amp;gt; at the end.&lt;br /&gt;
 npm install node-opcua &lt;br /&gt;
and optionally, the demo examples with:&lt;br /&gt;
 npm install node-opcua-samples&lt;br /&gt;
&lt;br /&gt;
Verify that the modules are present in your &amp;quot;&amp;lt;code&amp;gt;~/node_modules&amp;lt;/code&amp;gt;&amp;quot; folder.&lt;br /&gt;
(the OPC_UA_Interface library contains a action block named &amp;quot;Assert &amp;quot;node-opcua&amp;quot; module is present&amp;quot; to verify that the module is found.&lt;br /&gt;
&lt;br /&gt;
If it is not found (typically, because the &amp;quot;node_modules&amp;quot; folder is not configured to be found by node), you can adjust the &amp;lt;code&amp;gt;NODE_PATH&amp;lt;/code&amp;gt; setting in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; dialog, or set it in the shell environment before starting expecco.&lt;br /&gt;
&lt;br /&gt;
==Launching a Demo Server==&lt;br /&gt;
&lt;br /&gt;
===The node-opcua Sample Server===&lt;br /&gt;
If you installed the samples (as above), a server can be started with:&lt;br /&gt;
 node ~/node_modules/node-opcua-samples/bin/simple_server.js&lt;br /&gt;
&lt;br /&gt;
If warning messages about missing modules are shown, you may restart it after&lt;br /&gt;
installing additional packages:&lt;br /&gt;
 npm install usage&lt;br /&gt;
&lt;br /&gt;
==Connecting to the Demo Server==&lt;br /&gt;
&lt;br /&gt;
===The node-opcua Sample Client===&lt;br /&gt;
&lt;br /&gt;
For a quick smoke test, run the node sample client against the above sample server:&lt;br /&gt;
 &lt;br /&gt;
 node ~/node_modules/node-opcua-samples/bin/simple_client.js&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;!-- You can now run the &amp;quot;&amp;lt;code&amp;gt;Demo Testplan&amp;lt;/code&amp;gt;&amp;quot; contained in the &amp;quot;&amp;lt;code&amp;gt;MQTT_Interface_Library.ets&amp;lt;/code&amp;gt;&amp;quot; delivered with expecco. &lt;br /&gt;
If your MQTT docker container is running on a different host than expecco, change the &amp;lt;code&amp;gt;MQTT_HOST&amp;lt;/code&amp;gt; environment variable from &amp;quot;&amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;&amp;quot; to the hostname or IP-Address of the docker host. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2&amp;gt;Using the Library OPC_UA_Interface&amp;lt;/H2&amp;gt;&lt;br /&gt;
First and foremost, you can find documentation as well as a working example for each Action in the &amp;quot;Documentation&amp;quot; and &amp;quot;Test/Demo&amp;quot; Sections respectively.&lt;br /&gt;
&lt;br /&gt;
==Testsuite Samples==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;You will find a server to test against in &amp;quot;&amp;lt;i&amp;gt;MenuActions&amp;lt;/i&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;quot;&amp;lt;i&amp;gt;Start Sample Server in Background&amp;lt;/i&amp;gt;&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;It runs the attached &amp;quot;&amp;lt;code&amp;gt;opcuaDemoServerScript.js&amp;lt;/code&amp;gt;&amp;quot; script which you can change freely for your own testing purposes.&lt;br /&gt;
&amp;lt;br&amp;gt;If you wish, you may also try the &amp;quot;Server&amp;quot; blocks (see the attached readme in that folder) which enable you to create a very basic server as well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H3&amp;gt;Troubleshooting:&amp;lt;/H3&amp;gt;&lt;br /&gt;
The following errors may or may not occur, here is how you deal with them:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;&amp;lt;code&amp;gt;node-opcua not found&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;may occur if the module path to opcua is not set correctly in the Expecco settings.&lt;br /&gt;
&amp;lt;br&amp;gt;This may also occur with a global opcua installation with Windows10; &lt;br /&gt;
if this should apply to you, do a local installation instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;&amp;quot;ERROR_write other&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;may occur if you manually shut down a node server which the still running bridge tries to access.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;&amp;lt;code&amp;gt;port undefined&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;already in use&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;may occur if you are trying to start an opc server while another still holds the tcp socket you are trying to use.&lt;br /&gt;
&amp;lt;br&amp;gt;If your created session runs into a timeout, it may be that node&lt;br /&gt;
still holds an expired session token.&lt;br /&gt;
&amp;lt;br&amp;gt;In that case (within expecco) navigate to &amp;quot;&amp;lt;i&amp;gt;Plugins&amp;lt;/i&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;quot;&amp;lt;i&amp;gt;Bridges&amp;lt;/i&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;quot;&amp;lt;i&amp;gt;Node Bridge&amp;lt;/i&amp;gt;&amp;quot; &amp;gt; &amp;quot;&amp;lt;i&amp;gt;Disconnect All Open Connections&amp;lt;/i&amp;gt;&amp;quot; &lt;br /&gt;
and try again.&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=OPC/en&amp;diff=14726</id>
		<title>OPC/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=OPC/en&amp;diff=14726"/>
		<updated>2019-01-28T10:14:22Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Node-OPC-UA Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OPC is a wellknown communication framework used in manufactoring, factory automation and the IoT (&amp;quot;&#039;&#039;Internet of Things&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Traditionally, OPC used COM/DCOM as underlying transport and was therefore more or less bound to Windows architectures (or required expensive COM/DCOM frameworks under Unix/Linux).&lt;br /&gt;
In contrast, the more recent OPC-UA (&amp;quot;&#039;&#039;OPC-Unified Architecture&#039;&#039;&amp;quot;) uses standard TCP communication on top of which either binary data or XML-based HTTP requests are exchanged.&lt;br /&gt;
&lt;br /&gt;
This plugin provides both a server and a client implementation of OPC-UA, by interfacing an open source (and license free) OPC-UA implementation written for NodeJS.&lt;br /&gt;
&lt;br /&gt;
==Node Installation==&lt;br /&gt;
NodeJS is mandatory to be installed on our machine.&lt;br /&gt;
&lt;br /&gt;
Check if node is already present (by entering on the command line): &lt;br /&gt;
 &amp;lt;code&amp;gt;node --version&amp;lt;/code&amp;gt;&lt;br /&gt;
or open the expecco settings-dialog and navigate to &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot;.&lt;br /&gt;
If node is not installed, download and install it from &amp;quot;https://nodejs.org/en/download&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Also make sure that the node package manager (npm) is installed with&lt;br /&gt;
 &amp;lt;code&amp;gt;npm -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Node-OPC-UA Installation==&lt;br /&gt;
&amp;quot;node-opcua&amp;quot; is an open source, license free and pure JavaScript implementation of OPC-UA for nodeJS. &lt;br /&gt;
For more information, consult &amp;quot;https://github.com/node-opcua&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;npm&amp;quot;, the node package manager, install the &amp;quot;node-opcua&amp;quot; package:&amp;lt;br&amp;gt;&lt;br /&gt;
Disclaimer! using &amp;lt;code&amp;gt;install&amp;lt;/code&amp;gt; in this way will install the files locally in your current directory.&lt;br /&gt;
If you wish for a globally available module, add a &amp;lt;code&amp;gt;-g&amp;lt;/code&amp;gt; at the end.&lt;br /&gt;
 npm install node-opcua &lt;br /&gt;
and optionally, the demo examples with:&lt;br /&gt;
 npm install node-opcua-samples&lt;br /&gt;
&lt;br /&gt;
Verify that the modules are present in your &amp;quot;&amp;lt;code&amp;gt;~/node_modules&amp;lt;/code&amp;gt;&amp;quot; folder.&lt;br /&gt;
(the OPC_UA_Interface library contains a action block named &amp;quot;Assert &amp;quot;node-opcua&amp;quot; module is present&amp;quot; to verify that the module is found.&lt;br /&gt;
&lt;br /&gt;
If it is not found (typically, because the &amp;quot;node_modules&amp;quot; folder is not configured to be found by node), you can adjust the &amp;lt;code&amp;gt;NODE_PATH&amp;lt;/code&amp;gt; setting in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; dialog, or set it in the shell environment before starting expecco.&lt;br /&gt;
&lt;br /&gt;
==Launching a Demo Server==&lt;br /&gt;
&lt;br /&gt;
===The node-opcua Sample Server===&lt;br /&gt;
If you installed the samples (as above), a server can be started with:&lt;br /&gt;
 node ~/node_modules/node-opcua-samples/bin/simple_server.js&lt;br /&gt;
&lt;br /&gt;
If warning messages about missing modules are shown, you may restart it after&lt;br /&gt;
installing additional packages:&lt;br /&gt;
 npm install usage&lt;br /&gt;
&lt;br /&gt;
==Connecting to the Demo Server==&lt;br /&gt;
&lt;br /&gt;
===The node-opcua Sample Client===&lt;br /&gt;
&lt;br /&gt;
For a quick smoke test, run the node sample client against the above sample server:&lt;br /&gt;
 &lt;br /&gt;
 node ~/node_modules/node-opcua-samples/bin/simple_client.js&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;!-- You can now run the &amp;quot;&amp;lt;code&amp;gt;Demo Testplan&amp;lt;/code&amp;gt;&amp;quot; contained in the &amp;quot;&amp;lt;code&amp;gt;MQTT_Interface_Library.ets&amp;lt;/code&amp;gt;&amp;quot; delivered with expecco. &lt;br /&gt;
If your MQTT docker container is running on a different host than expecco, change the &amp;lt;code&amp;gt;MQTT_HOST&amp;lt;/code&amp;gt; environment variable from &amp;quot;&amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;&amp;quot; to the hostname or IP-Address of the docker host. --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=OPC/en&amp;diff=14725</id>
		<title>OPC/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=OPC/en&amp;diff=14725"/>
		<updated>2019-01-28T10:14:04Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Node-OPC-UA Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OPC is a wellknown communication framework used in manufactoring, factory automation and the IoT (&amp;quot;&#039;&#039;Internet of Things&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Traditionally, OPC used COM/DCOM as underlying transport and was therefore more or less bound to Windows architectures (or required expensive COM/DCOM frameworks under Unix/Linux).&lt;br /&gt;
In contrast, the more recent OPC-UA (&amp;quot;&#039;&#039;OPC-Unified Architecture&#039;&#039;&amp;quot;) uses standard TCP communication on top of which either binary data or XML-based HTTP requests are exchanged.&lt;br /&gt;
&lt;br /&gt;
This plugin provides both a server and a client implementation of OPC-UA, by interfacing an open source (and license free) OPC-UA implementation written for NodeJS.&lt;br /&gt;
&lt;br /&gt;
==Node Installation==&lt;br /&gt;
NodeJS is mandatory to be installed on our machine.&lt;br /&gt;
&lt;br /&gt;
Check if node is already present (by entering on the command line): &lt;br /&gt;
 &amp;lt;code&amp;gt;node --version&amp;lt;/code&amp;gt;&lt;br /&gt;
or open the expecco settings-dialog and navigate to &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot;.&lt;br /&gt;
If node is not installed, download and install it from &amp;quot;https://nodejs.org/en/download&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Also make sure that the node package manager (npm) is installed with&lt;br /&gt;
 &amp;lt;code&amp;gt;npm -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Node-OPC-UA Installation==&lt;br /&gt;
&amp;quot;node-opcua&amp;quot; is an open source, license free and pure JavaScript implementation of OPC-UA for nodeJS. &lt;br /&gt;
For more information, consult &amp;quot;https://github.com/node-opcua&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;npm&amp;quot;, the node package manager, install the &amp;quot;node-opcua&amp;quot; package:&lt;br /&gt;
Disclaimer! using &amp;lt;code&amp;gt;install&amp;lt;/code&amp;gt; in this way will install the files locally in your current directory.&lt;br /&gt;
If you wish for a globally available module, add a &amp;lt;code&amp;gt;-g&amp;lt;/code&amp;gt; at the end.&lt;br /&gt;
 npm install node-opcua &lt;br /&gt;
and optionally, the demo examples with:&lt;br /&gt;
 npm install node-opcua-samples&lt;br /&gt;
&lt;br /&gt;
Verify that the modules are present in your &amp;quot;&amp;lt;code&amp;gt;~/node_modules&amp;lt;/code&amp;gt;&amp;quot; folder.&lt;br /&gt;
(the OPC_UA_Interface library contains a action block named &amp;quot;Assert &amp;quot;node-opcua&amp;quot; module is present&amp;quot; to verify that the module is found.&lt;br /&gt;
&lt;br /&gt;
If it is not found (typically, because the &amp;quot;node_modules&amp;quot; folder is not configured to be found by node), you can adjust the &amp;lt;code&amp;gt;NODE_PATH&amp;lt;/code&amp;gt; setting in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; dialog, or set it in the shell environment before starting expecco.&lt;br /&gt;
&lt;br /&gt;
==Launching a Demo Server==&lt;br /&gt;
&lt;br /&gt;
===The node-opcua Sample Server===&lt;br /&gt;
If you installed the samples (as above), a server can be started with:&lt;br /&gt;
 node ~/node_modules/node-opcua-samples/bin/simple_server.js&lt;br /&gt;
&lt;br /&gt;
If warning messages about missing modules are shown, you may restart it after&lt;br /&gt;
installing additional packages:&lt;br /&gt;
 npm install usage&lt;br /&gt;
&lt;br /&gt;
==Connecting to the Demo Server==&lt;br /&gt;
&lt;br /&gt;
===The node-opcua Sample Client===&lt;br /&gt;
&lt;br /&gt;
For a quick smoke test, run the node sample client against the above sample server:&lt;br /&gt;
 &lt;br /&gt;
 node ~/node_modules/node-opcua-samples/bin/simple_client.js&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;!-- You can now run the &amp;quot;&amp;lt;code&amp;gt;Demo Testplan&amp;lt;/code&amp;gt;&amp;quot; contained in the &amp;quot;&amp;lt;code&amp;gt;MQTT_Interface_Library.ets&amp;lt;/code&amp;gt;&amp;quot; delivered with expecco. &lt;br /&gt;
If your MQTT docker container is running on a different host than expecco, change the &amp;lt;code&amp;gt;MQTT_HOST&amp;lt;/code&amp;gt; environment variable from &amp;quot;&amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;&amp;quot; to the hostname or IP-Address of the docker host. --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14566</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14566"/>
		<updated>2018-12-21T11:45:56Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Warnhinweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Unterstützte Java-Technologien ==&lt;br /&gt;
expecco unterstützt die Automatisierung von Java-Anwendungen, die mit Java Swing, Java SWT oder JavaFX implementiert sind. Ebenso weden Anwendungen unterstützt, die mehrere dieser Technologien vereinen, z.B. eine Swing-Anwendung mit eingebettetem JavaFX-Inhalt.&lt;br /&gt;
&lt;br /&gt;
=== Java Swing ===&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
==== Hauptmerkmale ====&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Java SWT ===&lt;br /&gt;
&lt;br /&gt;
=== JavaFX ===&lt;br /&gt;
Ab Java 11 ist JavaFX nicht mehr im JDK enthalten. Daher müssen Sie zusätzlich ein JavaFX SDK installieren, z.B. von [https://openjfx.io/ OpenJFX]. Kopieren Sie dann die jar-Dateien aus dem lib-Verzeichnis des JavaFX JDKs nach &amp;lt;code&amp;gt;packages\exept\expecco\plugin\javafx\lib&amp;lt;/code&amp;gt; im expecco-Installationsverzeichnis.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Anforderungen ==&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zugriffsberechtigungen===&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei nicht mehr funktionieren, falls die Zielapplikation eine festgelegte Modulkapselung besitzt ([https://stackoverflow.com/questions/46741907/what-is-an-automatic-module Details]).&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren, weshalb Sie diese selbstständig herausfinden müssen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;jdeps list-deps JARNAME.jar&amp;lt;/code&amp;gt; Jdeps ist dafür ein frei verfügbares (teil der jdk) sehr nützliches Werkzeug.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollten Sie dennoch einen &amp;lt;code&amp;gt;java.lang.IllegalAccessError&amp;lt;/code&amp;gt; erhalten, müssen Sie diese Parameter in folgender Weise erweitern:&lt;br /&gt;
* Fehlertext der Art &amp;lt;code&amp;gt;module &amp;lt;module&amp;gt; does not &amp;quot;opens &amp;lt;package&amp;gt;&amp;quot; to unnamed module&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;--add-opens &amp;lt;module&amp;gt;/&amp;lt;package&amp;gt;=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
: &#039;&#039;Beispiel:&#039;&#039; &amp;lt;code&amp;gt;module java.base does not &amp;quot;opens java.lang&amp;quot; to unnamed module&amp;lt;/code&amp;gt; &#039;&#039;lösen Sie mit&#039;&#039; &amp;lt;code&amp;gt;--add-opens java.base/java.lang=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
* Fehlertext der Art &amp;lt;code&amp;gt;cannot access class &amp;lt;package&amp;gt;.&amp;lt;class name&amp;gt; (in module &amp;lt;module&amp;gt;) because module &amp;lt;module&amp;gt; does not export &amp;lt;package&amp;gt; to unnamed module&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;--add-exports &amp;lt;module&amp;gt;/&amp;lt;package&amp;gt;=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
: &#039;&#039;Beispiel:&#039;&#039; &amp;lt;code&amp;gt;cannot access class com.sun.javafx.scene.input.ExtendedInputMethodRequests (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.input to unnamed module&amp;lt;/code&amp;gt; &#039;&#039;lösen Sie mit&#039;&#039; &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Installation auf dem expecco Rechner ===&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
=== Installation auf dem Testanwendungsrechner ===&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== expecco GUI Browser ==&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
=== Verbindungsaufbau ===&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verbindung zu Entfernten Systemen ===&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
=== Warnhinweise ===&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen.&amp;lt;br&amp;gt; Eine Remote Verbindung müsste das Programm stattdessen manuell mit der gewollten Java Version starten.&amp;lt;br&amp;gt; Der Java Agent, wenn über das &amp;lt;code&amp;gt;startAgentLoader&amp;lt;/code&amp;gt; skript aufgerufen, wählt die Version Anhand von &amp;lt;code&amp;gt;JAVA_HOME&amp;lt;/code&amp;gt; auf dem remote System&lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
== Technologieübergreifende Verbindungen ==&lt;br /&gt;
Falls eine Anwendung mehrere Java-Technologien verwendet, müssen Sie nur eine Verbindung aufbauen und dann die Bausteine aus der Library entsprechend der Technologie des anzusprechenden Elements verwenden.&lt;br /&gt;
&lt;br /&gt;
== JavaSwingLibrary ==&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ich kann mich nicht verbinden aber alle Einstellungen stimmen&#039;&#039;&#039;&lt;br /&gt;
:Auch wenn dies generell nicht passieren sollte, hier ein paar Aspekte, die Einfluss auf die Verbindung nehmen können.&lt;br /&gt;
::{|&lt;br /&gt;
|FIREWALL &lt;br /&gt;
|Die Firewall kann das kommunizieren des Java Agenten mit der Anwendung stören. &amp;lt;br&amp;gt;Entweder man richtet eine Ausnahmeregel für den Agenten ein oder aber man deaktiviert die Firewall für die Dauer des Tests.&lt;br /&gt;
|-&lt;br /&gt;
|SOCKET BELEGT&lt;br /&gt;
|Es kann vorkommen, besonders beim Debuggen, dass eine vorherige Instanz eines Java Agenten nicht korrekt geschlossen wurde. Das kann dazu führen, dass dieser den Socket belegt und andere Verbindungen abweist.&amp;lt;br&amp;gt;Über &amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen&amp;lt;/code&amp;gt; werden vorherige Instanzen entfernt. &amp;lt;br&amp;gt;Bitte beachten, dass damit auch alle anderen bestehenden (lokalen) Expecco Verbindungen geschlossen werden. Im Fall Remote sollte ein Neustart des Agenten und evtl. auch der Anwendung Abhilfe schaffen.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14517</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14517"/>
		<updated>2018-12-17T08:59:08Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Fehlerbehandlung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei nicht mehr funktionieren, falls die Zielapplikation eine festgelegte Modulkapselung besitzt ([https://stackoverflow.com/questions/46741907/what-is-an-automatic-module Details]).&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren, weshalb Sie diese selbstständig herausfinden müssen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;jdeps list-deps JARNAME.jar&amp;lt;/code&amp;gt; Jdeps ist dafür ein frei verfügbares (teil der jdk) sehr nützliches Werkzeug.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Warnhinweise ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ich kann mich nicht verbinden aber alle Einstellungen stimmen&#039;&#039;&#039;&lt;br /&gt;
:Auch wenn dies generell nicht passieren sollte, hier ein paar Aspekte, die Einfluss auf die Verbindung nehmen können.&lt;br /&gt;
::{|&lt;br /&gt;
|FIREWALL &lt;br /&gt;
|Die Firewall kann das kommunizieren des Java Agenten mit der Anwendung stören. &amp;lt;br&amp;gt;Entweder man richtet eine Ausnahmeregel für den Agenten ein oder aber man deaktiviert die Firewall für die Dauer des Tests.&lt;br /&gt;
|-&lt;br /&gt;
|SOCKET BELEGT&lt;br /&gt;
|Es kann vorkommen, besonders beim Debuggen, dass eine vorherige Instanz eines Java Agenten nicht korrekt geschlossen wurde. Das kann dazu führen, dass dieser den Socket belegt und andere Verbindungen abweist.&amp;lt;br&amp;gt;Über &amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen&amp;lt;/code&amp;gt; werden vorherige Instanzen entfernt. &amp;lt;br&amp;gt;Bitte beachten, dass damit auch alle anderen bestehenden (lokalen) Expecco Verbindungen geschlossen werden. Im Fall Remote sollte ein Neustart des Agenten und evtl. auch der Anwendung Abhilfe schaffen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14516</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14516"/>
		<updated>2018-12-17T08:48:09Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei nicht mehr funktionieren, falls die Zielapplikation eine festgelegte Modulkapselung besitzt ([https://stackoverflow.com/questions/46741907/what-is-an-automatic-module Details]).&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren, weshalb Sie diese selbstständig herausfinden müssen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;jdeps list-deps JARNAME.jar&amp;lt;/code&amp;gt; Jdeps ist dafür ein frei verfügbares (teil der jdk) sehr nützliches Werkzeug.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein &#039;&#039;Neustart der Anwendung und des Agenten&#039;&#039; (im Fall remote), sowie das Ausführen von &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen &amp;lt;/code&amp;gt; sollte helfen. &amp;lt;br&amp;gt; (Achtung dies schließt ALLE offenen Expecco-Java Verbindungen) &amp;lt;br&amp;gt; Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre &#039;&#039;Firewall Einstellungen&#039;&#039;, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Ich kann mich nicht verbinden aber alle Einstellungen stimmen&#039;&#039;&#039;&lt;br /&gt;
:Auch wenn dies generell nicht passieren sollte, hier ein paar Aspekte, die Einfluss auf die Verbindung nehmen können.&lt;br /&gt;
::{|&lt;br /&gt;
|FIREWALL &lt;br /&gt;
|Die Firewall kann das kommunizieren des Java Agenten mit der Anwendung stören. &amp;lt;br&amp;gt;Entweder man richtet eine Ausnahmeregel für den Agenten ein oder aber man deaktiviert die Firewall für die Dauer des Tests.&lt;br /&gt;
|-&lt;br /&gt;
|SOCKET BELEGT&lt;br /&gt;
|Es kann vorkommen, besonders beim Debuggen, dass eine vorherige Instanz eines Java Agenten nicht korrekt geschlossen wurde. Das kann dazu führen, dass dieser den Socket belegt und andere Verbindungen abweist.&amp;lt;br&amp;gt;Über &amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen&amp;lt;/code&amp;gt; werden vorherige Instanzen entfernt. &amp;lt;br&amp;gt;Bitte beachten, dass damit auch alle anderen bestehenden (lokalen) Expecco Verbindungen geschlossen werden. Im Fall Remote sollte ein Neustart des Agenten und evtl. auch der Anwendung Abhilfe schaffen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14493</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14493"/>
		<updated>2018-12-13T15:41:32Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei nicht mehr funktionieren, falls die Zielapplikation eine festgelegte Modulkapselung besitzt ([https://stackoverflow.com/questions/46741907/what-is-an-automatic-module Details]).&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren, weshalb Sie diese selbstständig herausfinden müssen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;jdeps list-deps JARNAME.jar&amp;lt;/code&amp;gt; Jdeps ist dafür ein frei verfügbares (teil der jdk) sehr nützliches Werkzeug.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein &#039;&#039;Neustart der Anwendung und des Agenten&#039;&#039; (im Fall remote), sowie das Ausführen von &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen &amp;lt;/code&amp;gt; sollte helfen. &amp;lt;br&amp;gt; (Achtung dies schließt ALLE offenen Expecco-Java Verbindungen) &amp;lt;br&amp;gt; Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre &#039;&#039;Firewall Einstellungen&#039;&#039;, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14492</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14492"/>
		<updated>2018-12-13T15:35:30Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Zugriffsberechtigungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei nicht mehr funktionieren, falls die Zielapplikation eine festgelegte Modulkapselung besitzt ([https://stackoverflow.com/questions/46741907/what-is-an-automatic-module Details]).&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren, weshalb Sie diese selbstständig herausfinden müssen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;jdeps --list-deps JARNAME.jar&amp;lt;/code&amp;gt; Jdeps ist dafür ein frei verfügbares (teil der jdk) sehr nützliches Werkzeug.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein &#039;&#039;Neustart der Anwendung und des Agenten&#039;&#039; (im Fall remote), sowie das Ausführen von &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen &amp;lt;/code&amp;gt; sollte helfen. &amp;lt;br&amp;gt; (Achtung dies schließt ALLE offenen Expecco-Java Verbindungen) &amp;lt;br&amp;gt; Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre &#039;&#039;Firewall Einstellungen&#039;&#039;, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14491</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14491"/>
		<updated>2018-12-13T15:30:27Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Zugriffsberechtigungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei nicht mehr funktionieren, falls die Zielapplikation eine festgelegte Modulkapselung besitzt ([https://stackoverflow.com/questions/46741907/what-is-an-automatic-module Details]).&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein &#039;&#039;Neustart der Anwendung und des Agenten&#039;&#039; (im Fall remote), sowie das Ausführen von &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen &amp;lt;/code&amp;gt; sollte helfen. &amp;lt;br&amp;gt; (Achtung dies schließt ALLE offenen Expecco-Java Verbindungen) &amp;lt;br&amp;gt; Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre &#039;&#039;Firewall Einstellungen&#039;&#039;, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14490</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14490"/>
		<updated>2018-12-13T14:23:17Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Fehlerbehandlung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein &#039;&#039;Neustart der Anwendung und des Agenten&#039;&#039; (im Fall remote), sowie das Ausführen von &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extrax =&amp;gt; Fehleranalyse =&amp;gt; Alle BridgeVerbindung schließen / Alle Socketverbindungen schließen &amp;lt;/code&amp;gt; sollte helfen. &amp;lt;br&amp;gt; (Achtung dies schließt ALLE offenen Expecco-Java Verbindungen) &amp;lt;br&amp;gt; Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre &#039;&#039;Firewall Einstellungen&#039;&#039;, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14489</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14489"/>
		<updated>2018-12-13T14:15:44Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies im Dialogfenster nach durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14488</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14488"/>
		<updated>2018-12-13T14:12:54Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden: [[Expecco_GUI_Tests_Extension_Reference| GUI Test Referenz]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14487</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14487"/>
		<updated>2018-12-13T12:51:09Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Anforderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
ParameterListe (ausklappbar)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14486</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14486"/>
		<updated>2018-12-13T12:16:49Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Anforderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [https://doc.expecco.de/w2.x/images/0/03/Java_module_cheat_sheet.pdf hier] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein.&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14485</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14485"/>
		<updated>2018-12-13T12:15:40Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Anforderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [[:Datei:java_module_cheat_sheet.pdf|hier]] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein.&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Datei:Java_module_cheat_sheet.pdf&amp;diff=14484</id>
		<title>Datei:Java module cheat sheet.pdf</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Datei:Java_module_cheat_sheet.pdf&amp;diff=14484"/>
		<updated>2018-12-13T11:59:14Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: © https://zeroturnaround.com/rebellabs/java-9-modules-cheat-sheet/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;© https://zeroturnaround.com/rebellabs/java-9-modules-cheat-sheet/&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14483</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14483"/>
		<updated>2018-12-13T11:58:20Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Zugriffsberechtigungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Eine kurze Übersicht der Kommandos findet man [[Datei:java_module_cheat_sheet.pdf|hier]] [https://zeroturnaround.com/rebellabs ©]&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein.&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14482</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14482"/>
		<updated>2018-12-13T11:41:19Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Anforderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
* (Alternativ kann man Zugriffsrechte in den module-info.java Dateien direkt verändern, dies ist jedoch alles andere als praktikabel)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden Parameter müssen beim Start der Java Anwendung vorhanden sein.&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14481</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14481"/>
		<updated>2018-12-13T11:32:51Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Zugriffsberechtigungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen (&#039;&#039;Am Beispiel JDK_JAVA_OPTIONS welche bei jedem JVM Start geladen wird&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Windows Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;für Unix Systeme&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14480</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14480"/>
		<updated>2018-12-13T11:29:50Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Zugriffsberechtigungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bis Java 11&#039;&#039;&#039; sollte es ausreichen, folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab Java 11&#039;&#039;&#039; erfolgt für die Kapselung von Modulen eine striktere Trennung:&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; wird dabei in manchen Fällen nicht mehr funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall müssen beim Programmstart zusätzliche Parameter angegeben werden, welche Expecco einen Zugriff auf die innewohnenden Ressourcen gewähren.&lt;br /&gt;
&lt;br /&gt;
Je nach verwendeter Technologie können die benötigten Parameter variieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel JavaFX&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
Die Umgebungsvariable &amp;lt;code&amp;gt;PATH_TO_FX&amp;lt;/code&amp;gt; die auf das JavaFX Verzeichnis zeigt muss gesetzt sein (Funktionsweise s.o.)&lt;br /&gt;
*&amp;lt;code&amp;gt;--module-path &amp;quot;%PATH_TO_FX%&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.controls &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.swing &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-modules=javafx.web &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.layout=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.control.skin=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/javafx.scene.chart=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.charts=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.image=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.shape=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.text=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.application=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.geometry=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.robot=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/com.sun.glass.ui.win=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.graphics/javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/javafx.event=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-opens javafx.base/com.sun.javafx.runtime=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.util=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.graphics/com.sun.javafx.scene.input=ALL-UNNAMED &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--add-exports javafx.web/com.sun.webkit.dom=ALL-UNNAMED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14479</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14479"/>
		<updated>2018-12-13T10:53:28Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Java Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Zugriffsberechtigungen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung (sowie des Java Agenten) zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariablen die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Bis Java 11 reicht es aus folgende Parameter zu setzen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen einer Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14478</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14478"/>
		<updated>2018-12-13T09:50:24Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Java Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14477</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14477"/>
		<updated>2018-12-13T09:50:06Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Java Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14476</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14476"/>
		<updated>2018-12-13T09:49:35Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Java Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14475</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14475"/>
		<updated>2018-12-13T09:49:23Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Java Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14474</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14474"/>
		<updated>2018-12-13T09:46:01Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14473</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14473"/>
		<updated>2018-12-13T09:45:36Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* expecco GUI Browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14472</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14472"/>
		<updated>2018-12-13T09:45:06Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
^Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;50%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Datei:Windows_Setenvironment.png&amp;diff=14471</id>
		<title>Datei:Windows Setenvironment.png</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Datei:Windows_Setenvironment.png&amp;diff=14471"/>
		<updated>2018-12-13T09:34:36Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14470</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14470"/>
		<updated>2018-12-13T09:25:14Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Anforderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Java Optionen=====&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung auf dem Zielsystem garantieren zu können, müssen beim Start der zu testenden Anwendung sowie des Java Agenten zwei zusätzliche Parameter mitgegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ergeben sich zwei Möglichkeiten dies zu tun&lt;br /&gt;
&lt;br /&gt;
* Setzen einer Umgebungsvariable die automatisch beim Start jeder Java Anwendung geladen wird&amp;lt;br&amp;gt;&lt;br /&gt;
* Manuelle Übergabe der Parameter bei jedem Start einer Java Anwendung&lt;br /&gt;
&lt;br /&gt;
Die Parameter lauten wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;-Djdk.attach.allowAttachSelf=true&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;--illegal-access=permit&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen der Umgebungsvariable funktioniert folgendermaßen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;für Windows Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;setx JDK_JAVA_OPTIONS &amp;quot;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* oder über das GUI (Windowstaste + Pause).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Windows Setenvironment.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;für Unix Systeme&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* Bash: &amp;lt;code&amp;gt;export _JAVA_OPTIONS=&#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt; &lt;br /&gt;
* C Shell: &amp;lt;code&amp;gt;setenv _JAVA_OPTIONS &#039;-Djdk.attach.allowAttachSelf=true; --illegal-access=permit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14452</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14452"/>
		<updated>2018-12-12T15:12:07Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14451</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14451"/>
		<updated>2018-12-12T15:06:00Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Installation auf dem expecco Rechner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14450</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14450"/>
		<updated>2018-12-12T15:04:53Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Anforderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Aufgrund von JDK Änderungen zwischen den Java Versionen, können potentiell Versionskonflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14449</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14449"/>
		<updated>2018-12-12T15:01:36Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Anforderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt. [[Java GUI Plugins#Fehlerbehandlung|Weitere Informationen dazu.]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14448</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14448"/>
		<updated>2018-12-12T14:57:55Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14447</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14447"/>
		<updated>2018-12-12T14:57:11Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Fehlerbehandlung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell auftreten und sind einfach behebbar:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14446</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14446"/>
		<updated>2018-12-12T14:55:50Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; (roter Kreis) aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14445</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14445"/>
		<updated>2018-12-12T14:55:26Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den &amp;lt;code&amp;gt;GUI Browser&amp;lt;/code&amp;gt; (schwarzer Kreis) im Reiter &amp;lt;code&amp;gt;Verbinden&amp;lt;/code&amp;gt; die Option &amp;lt;code&amp;gt;Java&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14444</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14444"/>
		<updated>2018-12-12T14:54:31Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsaufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als &#039;&#039;&#039;Leitfaden&#039;&#039;&#039; dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den GUI Browser (schwarzer Kreis) im Reiter Verbinden die Option Java aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14443</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14443"/>
		<updated>2018-12-12T14:54:00Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als Leitfaden dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den GUI Browser (schwarzer Kreis) im Reiter Verbinden die Option Java aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zu Entfernten Systemen ====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
==== Fehlerbehandlung ====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Datei:JavaSwing_GUI_Browser.png&amp;diff=14442</id>
		<title>Datei:JavaSwing GUI Browser.png</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Datei:JavaSwing_GUI_Browser.png&amp;diff=14442"/>
		<updated>2018-12-12T14:52:48Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: Chzeiher lud eine neue Version von „Datei:JavaSwing GUI Browser.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14441</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14441"/>
		<updated>2018-12-12T14:47:04Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsdialog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als Leitfaden dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
=====Verbindungsdialog=====&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den GUI Browser (schwarzer Kreis) im Reiter Verbinden die Option Java aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Verbindung zu Entfernten Systemen=====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
=====Fehlerbehandlung=====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14440</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14440"/>
		<updated>2018-12-12T14:46:53Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsdialog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als Leitfaden dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
=====Verbindungsdialog=====&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|550px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den GUI Browser (schwarzer Kreis) im Reiter Verbinden die Option Java aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Verbindung zu Entfernten Systemen=====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
=====Fehlerbehandlung=====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14439</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14439"/>
		<updated>2018-12-12T14:46:30Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsdialog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als Leitfaden dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
=====Verbindungsdialog=====&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|500px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den GUI Browser (schwarzer Kreis) im Reiter Verbinden die Option Java aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Verbindung zu Entfernten Systemen=====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
=====Fehlerbehandlung=====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14438</id>
		<title>Java GUI Plugins</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Java_GUI_Plugins&amp;diff=14438"/>
		<updated>2018-12-12T14:46:16Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: /* Verbindungsdialog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:AllJavaInterfaces.png|thumb|300px]]&lt;br /&gt;
expecco unterstützt unterschiedliche UI-Frameworks. Hierzu zählen unter anderem auch JavaFX,&lt;br /&gt;
Java Swing und Java SWT. Die folgenden Abschnitte sollen einen Überblick in die von expecco unterstützten Java UI-Frameworks geben, um Ihnen einen schnellen und einfachen Einstieg zu ermöglichen.&lt;br /&gt;
In diesem Zusammenhang wird Ihnen bei dieser Einführung von den Hauptmerkmalen der einzelnen Frameworks über die Funktionsweise, die Konfigurationen und den Anforderungen bis hin zu der Verwendung einzelner Funktionsbausteine aus den jeweiligen &#039;Funktionsbibliotheken&#039; näher erläutert.&lt;br /&gt;
Um das Verständnis zum theoretischen Teil noch zu festigen, wird im Anschluss ein Praxisnahes Beispiel Schritt für Schritt durchgearbeitet und beschrieben, bei dem Sie aktiv mitarbeiten können. Die dazu benötigten Testsuiten und Anwendungen laden Sie sich bitte über die in den Abschnitten zu Verfügung gestellten Links herunter.&lt;br /&gt;
&lt;br /&gt;
== Java Swing ==&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung für expecco ermöglicht die Benutzeroberflächen Testautomatisierung für Java Anwendungen deren Benutzeroberflächen mit Swing erstellt wurden. Die Baustein-Bibliothek beinhaltet Blöcke zur Steuerung und Überprüfung von Swing Benutzeroberflächen. Zudem integriert sich diese Erweiterung in die expecco GUI Test Extension. Diese dient der Unterstützung bei der Entwicklung von Testsequenzen.&lt;br /&gt;
&lt;br /&gt;
=== Hauptmerkmale ===&lt;br /&gt;
&lt;br /&gt;
* Automatisierte Bedienung und Überprüfung von Swing Benutzeroberflächen&lt;br /&gt;
* Gleichzeitige Bedienung mehrerer Anwendungen&lt;br /&gt;
* Steuerung von Swing Benutzeroberflächen auf entfernten Zielsystemen&lt;br /&gt;
* Steuerung von bereits eigenständig Laufenden Java Anwendungen (keine Änderung am Quell-Code notwendig, Keine Rekompilierung der Anwendung nötig)&lt;br /&gt;
* Adressierung der Bedienelemente durch Pfade ähnliche dem XPath&lt;br /&gt;
* Zugriff auf Objektebene durch Java Bridge Interface Library möglich&lt;br /&gt;
* Integration in die expecco GUI Tests Extension&lt;br /&gt;
* Block-Bibliothek mit Aktionen und Überprüfungen für Swing Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
&lt;br /&gt;
Das Interface baut eine Verbindung zur Java VM auf, und stellt Funktionen zum Lesen von Widget-Attributen, Aufnehmen von Benutzereingaben sowie zum Fernsteuern der Anwendung zur Verfügung. Außerdem werden in einer Bibliothek zusätzliche Bausteine zur Automatisierung von Tests bereitgestellt.&lt;br /&gt;
Im wesentlichen besteht das Java Swing plugin aus zwei Teilen, der Erweiterung&lt;br /&gt;
für expecco und der Applikationssteuerung (Agent). Zur Steuerung der Swing Anwendung wird ein so genannter Agent in die Java Virtual Machine der laufenden Java Anwendung geladen. Um den Agenten zu laden wird ein Java Development Kit 1.8 (JDK) oder höher benötigt. Die zu Testende Anwendung kann jedoch in einer normalen Java Runtime Edition 1.8 (JRE) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Anforderungen ===&lt;br /&gt;
&lt;br /&gt;
Auf dem Rechner auf dem die zu testende Anwendung laufen soll (lokal oder entfernt):&lt;br /&gt;
&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java Development Kit 1.8] oder höher (zum laden des Agents)&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Java Runtime Edition 1.8] oder höher (zur Ausführung der zu testenden Anwendung)&lt;br /&gt;
&lt;br /&gt;
Auf dem expecco Rechner gelten die expecco Anforderungen.&lt;br /&gt;
&lt;br /&gt;
Bitte nehmen Sie zur Kenntnis, dass sowohl der Agent als auch die zu testende Anwendung, jeweils beide entweder mit 32 oder 64 Bit Java gestartet werden müssen, da ansonsten keine Verbindung möglich ist.&lt;br /&gt;
Aufgrund von JDK Änderungen zwischen den Java Versionen, können bei falscher Handhabung Konflikte auftreten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Die Kompatibilität der Versionen ist wie folgt.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Bridge Compatibility.png|border|400px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Installation auf dem expecco Rechner ====&lt;br /&gt;
&lt;br /&gt;
Die Java Swing Erweiterung wird automatisch durch ein Installationsprogramm in expecco Installiert.&lt;br /&gt;
Wird die zu Testende Anwendung zur Entwicklung von Testsequenzen auf dem gleichen Rechner ausgeführt sollte nach dem Start von expecco unter&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Extras =&amp;gt; Einstellungen =&amp;gt; Erweiterungen =&amp;gt; Java Bridge&amp;lt;/code&amp;gt; &lt;br /&gt;
der Lokale Pfad zu einem Java Development Kit 1.8 oder höher angegeben werden. &amp;lt;br&amp;gt;Die unbedingt erforderliche Einstellung hier ist &amp;lt;code&amp;gt;Pfad zur JDK Installation&amp;lt;/code&amp;gt; welcher für die Hauptverbindung genutzt wird.&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;Pfad zur Java Installation&amp;lt;/code&amp;gt; ist eine alternative Einstellung für Groovy, welches nur ein JRE benötigt. Der Java Agent wird in lokalen Verbindungen automatisch mit diesen Einstellungen gestartet. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JDKPfadEinstellungen.png|border|600px|]]&lt;br /&gt;
&lt;br /&gt;
==== Installation auf dem Testanwendungsrechner ====&lt;br /&gt;
&lt;br /&gt;
Es muss das javaBin Verzeichnis des Expecco Bridge Frameworks auf den Testrechner kopiert werden. Dieses befindet sich im expecco Installationsverzeichnis unter:&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;nowiki&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expecco GUI Browser ===&lt;br /&gt;
&lt;br /&gt;
Der expecco GUI-Browser ist ein zusätzliches &#039;Werkzeug&#039;, welches die Möglichkeit bietet, laufende Anwendungen zu analysieren und Testsequenzen zu entwickeln. Anschließend kann man die Informationen, wie beispielsweise Namen und Eigenschaften einzelner Elemente dazu verwenden, um mit der Funktionsbibliothek Aktionen auszuführen bzw. mit einzelnen Elementen zu interagieren.&lt;br /&gt;
&lt;br /&gt;
==== Verbindungsaufbau ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden eine kurze Bilderstrecke, die Ihnen beim Einrichten einer Verbindung als Leitfaden dienen kann&amp;lt;br&amp;gt;&lt;br /&gt;
=====Verbindungsdialog=====&lt;br /&gt;
[[Datei:JavaSwing GUI Browser.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zunächst wählt man über den GUI Browser (schwarzer Kreis) im Reiter Verbinden die Option Java aus.&lt;br /&gt;
Im sich öffnenden Dialog kann man nun zwischen 3 Optionen wählen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anwendung auf der lokalen Maschine starten&#039;&#039;&#039; &amp;lt;br&amp;gt; liefert eine bequeme Möglichkeit eine lokale Java Anwendung per Kommandozeilenbefehl zu starten&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf der lokalen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu lokal laufenden Java Anwendungen&amp;lt;br&amp;gt;Der Java Agent wird automatisch mit der Java Version, die Sie in den Expecco Einstellungen festgelegt haben, gestartet.&lt;br /&gt;
* &#039;&#039;&#039;Zu einer laufenden Anwendung auf einer anderen Maschine verbinden&#039;&#039;&#039; &amp;lt;br&amp;gt; Ermöglicht die Verbindung zu einem bereits gestarteten Java Agenten auf einer anderen Maschine &amp;lt;br&amp;gt;Dieser stellt dann die Verbindung zur dort laufenden Java Anwendung her.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Window.png|border|500px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Suche nach Java Anwendungen listet uns alle laufenden Java Virtuellen Maschinen auf, die sich auf dem Zielsystem befinden&amp;lt;br&amp;gt; &lt;br /&gt;
(im Beispiel: localhost). Eine Auswahl der einzelnen Einträge listet weitere Informationen über die betreffende Anwendung auf.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Connected.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn eine Verbindung erfolgreich aufgebaut wurde, wird sie automatisch in die Expecco Konfigurationsliste eingetragen.&amp;lt;br&amp;gt;&lt;br /&gt;
Dort kann auch der GUI Aufbau der Anwendung als hierarchischer Baum eingesehen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Informationen zum weiteren Vorgehen können Sie hier finden [[Expecco_GUI_Tests_Extension_Reference]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:JavaSwing Connection Reconnect.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn Sie zu einer zuvor verbundenen Anwendung erneut eine Verbindung aufstellen möchten, können Sie dies durch Rechtsklick auf den Eintrag.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls Sie die Anwendung (oder im Fall entferntes System auch den Agenten) zwischenzeitlich neu gestartet haben, müssen Sie die Verbindung eventuell neu aufbauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Verbindung zu Entfernten Systemen=====&lt;br /&gt;
[[Datei:JavaSwing Connection RemoteSetup.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um eine Verbindung remote zu erstellen, muss zunächst auf dem Zielrechner der Java Agent gestartet werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Dazu navigieren Sie auf dem Rechner zum zuvor kopierten Verzeichnis &amp;lt;code&amp;gt;...\exept\bridgeFramework\javaBridge\javaBin&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Dort liegt ein Skript, welches automatisch die Java Version in JAVA_HOME erkennt und den korrekten Agenten startet.&lt;br /&gt;
* Windows Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.bar&amp;lt;/code&amp;gt;&lt;br /&gt;
* UNIX Nutzer starten &amp;lt;code&amp;gt;startAgentLoader.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Skripte können über die Kommandozeile wie im Bild gezeigt mit Parametern versehen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ip &amp;lt;HostnameOderIP&amp;gt;&amp;lt;/code&amp;gt; gibt dem Agenten eine spezielle IP an, auf der auf eine Verbindung gewartet werden soll. Nützlich für spezifische Netzwerkmasken.&amp;lt;br&amp;gt; StandardHost ist 0.0.0.0.&lt;br /&gt;
* &amp;lt;code&amp;gt;-port &amp;gt;PortNummer&amp;lt;/code&amp;gt; gibt dem Agenten einen spezifischen Port an, auf dem auf Verbindungen von Expecco gewartet werden soll.&amp;lt;br&amp;gt; Standardport ist 56784.&lt;br /&gt;
&lt;br /&gt;
=====Fehlerbehandlung=====&lt;br /&gt;
[[Datei:JavaSwing Connection Warnings.png|border|600px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sollten bei den Anwendungen in dieser Liste Probleme auftreten wie im oben stehenden Bild zu sehen ist,&lt;br /&gt;
liefert der Verbindungsdialog automatisch einen Lösungsvorschlag.&amp;lt;br&amp;gt; Wenn der auftretende Fehler eine Verbindung unmöglich machen würde, wird der Entsprechende Eintrag automatisch als ungültig markiert.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Fehlermeldungen könnten eventuell Probleme machen und sind leicht zu beheben:&lt;br /&gt;
::{|&lt;br /&gt;
|JAVA VERSION MISMATCH&lt;br /&gt;
|Wie im Bild zu sehen, kann es zu Java Versionskonflikten zwischen dem Agenten und der Anwendung kommen.&amp;lt;br&amp;gt; In diesem Fall ist es am einfachsten die Expecco Einstellungen für Java Bridge anzupassen. &lt;br /&gt;
|-&lt;br /&gt;
|32 BIT - 64 BIT KONFLIKT&lt;br /&gt;
|32 und 64 Bit Versionen von Java sind nicht miteinander Kompatibel. &amp;lt;br&amp;gt;Sowohl der Agent als auch die Anwendung müssen mit der selben &amp;quot;Bit Version&amp;quot; von Java gestartet werden.&lt;br /&gt;
|-&lt;br /&gt;
|UNABLE TO DETERMINE VERSION&lt;br /&gt;
|Der Agent kann nicht feststellen, welche Java Version die Anwendung nutzt. &amp;lt;br&amp;gt;Eine Verbindung ist eventuell möglich, es kann aber potentiell ein Versionskonflikt auftreten.&lt;br /&gt;
|-&lt;br /&gt;
|CONNECTION REFUSED&lt;br /&gt;
|In seltenen Fällen, kann die Socket-Verbindung zu einer Anwendung oder dem Agent durch eine vorherige Verbindung blockiert werden. &amp;lt;br&amp;gt;Ein Neustart der Anwendung und des Agenten (im Fall remote) sollte helfen. &amp;lt;br&amp;gt;Sollte das Problem bestehen bleiben, prüfen Sie bitte auch ihre Firewall Einstellungen, die eine Verbindung verhindern können.&lt;br /&gt;
|}&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
=== JavaSwingLibrary ===&lt;br /&gt;
=== Example ===&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
*&#039;&#039;&#039;Der Baum im GUI-Browsers zeigt nicht alle Elemente meiner Applikation&#039;&#039;&#039;&lt;br /&gt;
:Eine Applikation besteht aus vielen verschiedenen Elementen. Manche davon sind nicht interaktiv, das heißt sie sind für den Anwender nicht direkt sichtbar und dienen lediglich der Formatierung, wie beispielsweise Panels. Das Vorhandensein solcher Elemente führt dazu, dass der Baum sehr groß und tief werden kann. Da diese Elemente in der Regel für die Automatisierung uninteressant sind, werden sie in expecco standardmäßig ausgeblendet.&lt;br /&gt;
:Wenn Sie in Ihrem Fall auf eines dieser Elemente zugreifen wollen oder es für das Erstellen eines eindeutigen Pfades brauchen, können Sie dieses Verhalten ändern. In der JavaSwingLibrary gibt es dafür den Baustein &#039;&#039;Set Skip Mode&#039;&#039;. Dabei sind vier Modi auswählbar:&lt;br /&gt;
::{|&lt;br /&gt;
|INTERACTIVE &lt;br /&gt;
|nur interaktive Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|ALL&lt;br /&gt;
|alle Elemente einsammeln&lt;br /&gt;
|-&lt;br /&gt;
|INTERACTIVE_HYBRID&lt;br /&gt;
|wie INTERACTIVE, aber mit dem Fallback zu ALL wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|-&lt;br /&gt;
|ALL_HYBRID&lt;br /&gt;
|wie ALL, aber mit dem Fallback auf INTERACTIVE wenn ein Pfad nicht aufgelöst werden kann&lt;br /&gt;
|}&lt;br /&gt;
:Durch das Ausführen des Bausteins ändert sich das Verhalten für die aktuelle Verbindung. Es bezieht sich sowohl darauf, was im Baum angezeigt wird, als auch, wie mit den Pfaden an den Bausteinen umgegangen wird.&lt;br /&gt;
&lt;br /&gt;
== Java SWT ==&lt;br /&gt;
== JavaFX ==&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Datei:JavaSwing_GUI_Browser.png&amp;diff=14437</id>
		<title>Datei:JavaSwing GUI Browser.png</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Datei:JavaSwing_GUI_Browser.png&amp;diff=14437"/>
		<updated>2018-12-12T14:45:42Z</updated>

		<summary type="html">&lt;p&gt;Chzeiher: Chzeiher lud eine neue Version von „Datei:JavaSwing GUI Browser.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chzeiher</name></author>
	</entry>
</feed>