<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog @ SIB Visions &#187; Test</title>
	<atom:link href="http://blog.sibvisions.com/tag/test/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sibvisions.com</link>
	<description>Blog @ SIB Visions</description>
	<lastBuildDate>Fri, 10 Apr 2026 10:13:07 +0000</lastBuildDate>
		<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>GUI Testing with VisionX</title>
		<link>https://blog.sibvisions.com/2017/07/13/gui-testing-with-visionx/</link>
		<comments>https://blog.sibvisions.com/2017/07/13/gui-testing-with-visionx/#comments</comments>
		<pubDate>Thu, 13 Jul 2017 11:43:14 +0000</pubDate>
		<dc:creator>rjahn</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[VisionX]]></category>

		<guid isPermaLink="false">https://blog.sibvisions.com/?p=7063</guid>
		<description><![CDATA[A new AddOn for VisionX is coming  
Our GUI testing tool
A first impression
The tool is a recorder for VisionX/JVx applications. It has an option to export created tests as JUnit tests which makes it easy for Software developers to integrate the GUI tests in their CI systems. It's a super easy tool with so [...]]]></description>
			<content:encoded><![CDATA[<p>A new AddOn for VisionX is coming <img src='https://blog.sibvisions.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><center><strong style="font-size: 20px">Our GUI testing tool</strong></center></p>
<p>A first impression<br />
<div id="attachment_7064" class="wp-caption aligncenter" style="width: 310px"><a href="https://blog.sibvisions.com/wp-content/uploads/2017/07/apptester_preview.png" rel="lightbox[7063]"><img src="https://blog.sibvisions.com/wp-content/uploads/2017/07/apptester_preview-300x166.png" alt="Application tester" title="apptester_preview" width="300" height="166" class="size-medium wp-image-7064" /></a><p class="wp-caption-text">Application tester</p></div></p>
<p>The tool is a recorder for VisionX/JVx applications. It has an option to export created tests as JUnit tests which makes it easy for Software developers to integrate the GUI tests in their CI systems. It's a super easy tool with so much value for you!</p>
<p>The App Tester will be available in our solution store and will be an AddOn for VisionX.</p>
<p>If you are interested in details, leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sibvisions.com/2017/07/13/gui-testing-with-visionx/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Next big feature - Automate your GUI Tests</title>
		<link>https://blog.sibvisions.com/2014/09/12/next-big-feature-automate-your-gui-tests/</link>
		<comments>https://blog.sibvisions.com/2014/09/12/next-big-feature-automate-your-gui-tests/#comments</comments>
		<pubDate>Fri, 12 Sep 2014 17:10:11 +0000</pubDate>
		<dc:creator>rjahn</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JVx]]></category>
		<category><![CDATA[Test]]></category>

		<guid isPermaLink="false">http://blog.sibvisions.com/?p=3193</guid>
		<description><![CDATA[It's not a problem to automate GUI tests, nowadays. There are different approaches and tools. A nice tool overview is available on wikipedia.
The tools have different techniques to perform tests. On technique is sending/simulating mouse clicks to components. The problem is that the GUI shouldn't be changed between tests and you should use a special [...]]]></description>
			<content:encoded><![CDATA[<p>It's not a problem to automate GUI tests, nowadays. There are different approaches and tools. A nice <a href="http://en.wikipedia.org/wiki/List_of_GUI_testing_tools">tool overview</a> is available on wikipedia.</p>
<p>The tools have different techniques to perform tests. On technique is sending/simulating mouse clicks to components. The problem is that the GUI shouldn't be changed between tests and you should use a special test environment/system. Another technique is tricky but there's a nice implementation from MIT. It works with image recognition. And finally there's a solution based on unique component identifiers.</p>
<p>We like the last technique, based on unique component identifiers because it allows changing the UI without changing test cases - we love flexibility. The only problem with JVx was that we didn't have unique identifiers and a developer won't set an identifier for every component. We didn't have a mechanism to create unique identifiers... BUT now... we have.</p>
<p>With upcoming JVx releases, it will be possible to test GUIs automatically based on unique identifiers. This identifiers will be available also for VaadinUI. Another advantage for VaadinUIs will be that the id could be used for styling via CSS.</p>
<p>There are still some todos for us but we're happy to be able to show you some examples.</p>
<p>We made some test-cases with different test tools. To test our VaadinUI, we use <a href="http://www.seleniumhq.org/">Selenium</a> together with <a href="http://phantomjs.org/">PhantomJS</a>.</p>
<p>The source code might look like this one:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">class</span> TestCaseB<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw1">final</span> <span class="kw4">int</span> TIMEOUT_IN_SECONDS <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw1">final</span> <span class="kw3">String</span> TIMEOUT_IN_MILLISECONDS_AS_STRING <span class="sy0">=</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Integer</span>.<span class="me1">toString</span><span class="br0">&#40;</span>TIMEOUT_IN_SECONDS <span class="sy0">*</span> 1000<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="kw1">private</span> WebDriver driver<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> Selenium selenium<span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @Before<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setUp<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; driver <span class="sy0">=</span> configureDriver<span class="br0">&#40;</span>createPhantomJsDriver<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> baseUrl <span class="sy0">=</span> <span class="st0">&quot;http://localhost:8080/&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium <span class="sy0">=</span> <span class="kw1">new</span> WebDriverBackedSelenium<span class="br0">&#40;</span>driver, baseUrl<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">setTimeout</span><span class="br0">&#40;</span>TIMEOUT_IN_MILLISECONDS_AS_STRING<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @Test<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> testDemoerptest<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">open</span><span class="br0">&#40;</span><span class="st0">&quot;/VisionX.Server/app/web/ui/DemoERP/&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; waitForPage<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">type</span><span class="br0">&#40;</span><span class="st0">&quot;id=UserName&quot;</span>, <span class="st0">&quot;admin&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">type</span><span class="br0">&#40;</span><span class="st0">&quot;id=Password&quot;</span>, <span class="st0">&quot;admin&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;id=OK&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; waitForPage<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;id=DemoERP_P1_P1_P2_B1&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; waitForPage<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;//div[@id='NavigationTable']/div[2]/div/table/tbody/tr[2]/td[2]/div&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;//div[@id='NavigationTable']/div[2]/div/table/tbody/tr[3]/td[2]/div&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;//div[@id='NavigationTable']/div[2]/div/table/tbody/tr[2]/td[2]/div&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;//div[@id='NavigationTable']/div[2]/div/table/tbody/tr/td[2]/div&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;id=DemoERP_P1_P1_P2_B2&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; waitForPage<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;//div[@id='NavigationTable']/div[2]/div/table/tbody/tr[2]/td/div&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;//div[@id='NavigationTable']/div[2]/div/table/tbody/tr[3]/td/div&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;//div[@id='NavigationTable']/div[2]/div/table/tbody/tr[4]/td/div&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;id=DemoERP_P1_P1_P2_B3&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; waitForPage<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;xpath=(//button[@type='button'])[7]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; waitForPage<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @After<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> tearDown<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; driver.<span class="me1">quit</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">private</span> WebDriver configureDriver<span class="br0">&#40;</span>WebDriver pWebDriver<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pWebDriver.<span class="me1">manage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">timeouts</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">implicitlyWait</span><span class="br0">&#40;</span>TIMEOUT_IN_SECONDS, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TimeUnit.<span class="me1">SECONDS</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pWebDriver.<span class="me1">manage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">timeouts</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">pageLoadTimeout</span><span class="br0">&#40;</span>TIMEOUT_IN_SECONDS, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TimeUnit.<span class="me1">SECONDS</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pWebDriver.<span class="me1">manage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">timeouts</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setScriptTimeout</span><span class="br0">&#40;</span>TIMEOUT_IN_SECONDS, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TimeUnit.<span class="me1">SECONDS</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pWebDriver.<span class="me1">manage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">window</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setSize</span><span class="br0">&#40;</span><span class="kw1">new</span> <span class="kw3">Dimension</span><span class="br0">&#40;</span>1920, 1080<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> pWebDriver<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @SuppressWarnings<span class="br0">&#40;</span><span class="st0">&quot;unused&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> WebDriver createChromeDriver<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ChromeOptions options <span class="sy0">=</span> <span class="kw1">new</span> ChromeOptions<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; options.<span class="me1">addArguments</span><span class="br0">&#40;</span><span class="st0">&quot;-incognito&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">new</span> ChromeDriver<span class="br0">&#40;</span>options<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">private</span> WebDriver createPhantomJsDriver<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; DesiredCapabilities capabilities <span class="sy0">=</span> <span class="kw1">new</span> DesiredCapabilities<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; capabilities.<span class="me1">setCapability</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PhantomJSDriverService.<span class="me1">PHANTOMJS_EXECUTABLE_PATH_PROPERTY</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;D:<span class="es0">\\</span>opt<span class="es0">\\</span>phantomjs<span class="es0">\\</span>phantomjs.exe&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">new</span> PhantomJSDriver<span class="br0">&#40;</span>capabilities<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">void</span> waitForPage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; selenium.<span class="me1">waitForPageToLoad</span><span class="br0">&#40;</span>TIMEOUT_IN_MILLISECONDS_AS_STRING<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>We use <a href="https://code.google.com/p/fest/">FEST</a> (<a href="http://docs.codehaus.org/display/FEST/Home">doc</a>) for Swing UIs. The library is old (like Swing) but still works!</p>
<p>A very simple example with FEST:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">class</span> TestUI <span class="kw1">extends</span> FestSwingTestCaseTemplate<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> FrameFixture window<span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @After<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> cleanItUp<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">super</span>.<span class="me1">cleanUp</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @Before<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setUp<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">super</span>.<span class="me1">setUpRobot</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; UIFactoryManager.<span class="me1">getFactoryInstance</span><span class="br0">&#40;</span>SwingFactory.<span class="kw1">class</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; WorkScreenCreatingGuiQuery query <span class="sy0">=</span> <span class="kw1">new</span> WorkScreenCreatingGuiQuery<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Frame</span> frame <span class="sy0">=</span> GuiActionRunner.<span class="me1">execute</span><span class="br0">&#40;</span>query<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; window <span class="sy0">=</span> <span class="kw1">new</span> FrameFixture<span class="br0">&#40;</span>robot<span class="br0">&#40;</span><span class="br0">&#41;</span>, frame<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; query.<span class="me1">afterShow</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @Test<br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> testTheUIStuff<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Check if the editor does have the correct value.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// The WorkScreen does select the first line for us.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Assert</span>.<span class="me1">assertEquals</span><span class="br0">&#40;</span><span class="st0">&quot;John Smith&quot;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">textBox</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_E_TESTDATABOOK_NAME&quot;</span><span class="br0">&#41;</span>.<span class="me1">text</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Select the next line in the table.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">table</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_T_TESTDATABOOK&quot;</span><span class="br0">&#41;</span>.<span class="me1">selectRows</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Assert</span>.<span class="me1">assertEquals</span><span class="br0">&#40;</span><span class="st0">&quot;Ian McIrish&quot;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">textBox</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_E_TESTDATABOOK_NAME&quot;</span><span class="br0">&#41;</span>.<span class="me1">text</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Select the tab that has that TextField-Button-Label combo on it.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">tabbedPane</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_TP1&quot;</span><span class="br0">&#41;</span>.<span class="me1">selectTab</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">tabbedPane</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_TP1_P2_TP1&quot;</span><span class="br0">&#41;</span>.<span class="me1">selectTab</span><span class="br0">&#40;</span>2<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Enter something into the textfield, press the button and the label</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// should now have the same text.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">textBox</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_TP1_P2_TP1_P3_P1_TF1&quot;</span><span class="br0">&#41;</span>.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;This is an automated test.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">button</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_TP1_P2_TP1_P3_P1_B1&quot;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Assert</span>.<span class="me1">assertEquals</span><span class="br0">&#40;</span><span class="st0">&quot;This is an automated test.&quot;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">label</span><span class="br0">&#40;</span><span class="st0">&quot;UITWS_TP1_P2_TP1_P3_P1_L2&quot;</span><span class="br0">&#41;</span>.<span class="me1">text</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw1">final</span> <span class="kw1">class</span> WorkScreenCreatingGuiQuery <span class="kw1">extends</span> GuiQuery<span class="sy0">&lt;</span>Frame<span class="sy0">&gt;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> UIFrame frame<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> WorkScreen workscreen<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">void</span> afterShow<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Important so that everything gets a name.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// There is a window constructed, but outside of the JVx scope.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; frame.<span class="me1">addNotify</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; workscreen.<span class="me1">notifyRepaint</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw3">Frame</span> executeInEDT<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Throwable</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; frame <span class="sy0">=</span> <span class="kw1">new</span> UIFrame<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; workscreen <span class="sy0">=</span> <span class="kw1">new</span> UITestingWorkScreen<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; frame.<span class="me1">add</span><span class="br0">&#40;</span>workscreen<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><span class="kw3">Frame</span><span class="br0">&#41;</span> frame.<span class="me1">getResource</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw3">String</span> dumpStructure<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> dumpStructure<span class="br0">&#40;</span>frame, 1<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>https://blog.sibvisions.com/2014/09/12/next-big-feature-automate-your-gui-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
