<?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>Jayway Team Blog &#187; Davor Crnomat</title>
	<atom:link href="http://blog.jayway.com/author/davorcrnomat/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jayway.com</link>
	<description>Sharing Experience</description>
	<lastBuildDate>Sat, 11 Feb 2012 10:33:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cucumber tests on iPhone/iPad</title>
		<link>http://blog.jayway.com/2011/02/11/cucumber-tests-on-iphoneipad/</link>
		<comments>http://blog.jayway.com/2011/02/11/cucumber-tests-on-iphoneipad/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 10:18:18 +0000</pubDate>
		<dc:creator>Davor Crnomat</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.jayway.com/?p=7129</guid>
		<description><![CDATA[I am sure everybody has heard about Cucumber ( https://github.com/aslakhellesoy/cucumber) – a tool for Behaviour Driver Development where you describe software behavior in natural language that your customer can understand. Through step definitions these behavior descriptions are executed as automated tests. Cucumber serves as documentation, automated tests and development aid. My friend and colleague Christian [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">I am sure everybody has heard about Cucumber ( </span></span></span><span style="color: #000071;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><span style="text-decoration: underline;">https://github.com/aslakhellesoy/cucumber</span></span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">) – a tool for Behaviour Driver Development where you describe software behavior in natural language that your customer can understand. Through step definitions these behavior descriptions are executed as automated tests. Cucumber serves as documentation, automated tests and development aid.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">My friend and colleague Christian Hedin gave me tips on iCuke. Cucumber has been widely used for testing web applications, but now it’s also possible to test iOS (iPhone and iPad) apps with help of the iCuke library (</span></span></span><span style="color: #000071;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><span style="text-decoration: underline;">https://github.com/unboxed/icuke</span></span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">). iCuke uses AppleScript to drive XCode in order to launch your application into the iOS Simulator. A preloaded library is used to inject a small HTTP server into your application. The HTTP server allows you to see an XML representation of the iOS device screen and to emulate input, such as taps, swipes and pinch gestures.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">You can read more about it here:<br />
</span></span></span><span style="font-family: 'Times New Roman', serif; font-size: small; color: #000071;"><span style="text-decoration: underline;">http://www.unboxedconsulting.com/blog/cucumber-iphone-icuke<br />
</span></span><span style="font-family: 'Times New Roman', serif; font-size: small; color: #000071;"><span style="text-decoration: underline;">http://pragprog.com/magazines/2010-07/bdd-on-iphone-icuke</span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Really excited about Cucumber on iPhone we decided to give it a try. After installing iCuke and doing some test runs it was clear that some challenges had to be overcome to make this a truly useful tool for Behaviour Driven Development and automated testing of iOS apps.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong>Challenge 1: Screen returns the previous screen's xml</strong></span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">In our test, we wanted to tap a button, come to another screen and expected to see a text. When the test runs the iPhone is driven to the correct screen, e can see the expected text but the test fails anyway. After little debugging we realized that the method </span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><em>screen.xml</em></span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"> returns old xml directly after changing the screen.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong>Solution: </strong></span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">We needed to refresh screen before checking if the expected text is on the new screen. iCuke has a method to refresh screen but it is private and we could not use it. So we just added a new method to the existing ICukeWorld class.</span></span></span></p>
<pre class="code"><span style="color: #500000;"><span style="font-size: x-small;"><strong>class</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> ICukeWorld</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>def</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> refresh_screen</span></span>
<span style="color: #000000;">   <span style="font-size: x-small;">refresh</span></span>
<span style="color: #000000;">   <span style="font-size: x-small;">screen</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Calling this method before checking for the presence of the text solved this problem. </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Later on, I forked iCuke and added this and some other methods.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Courier New';"><span style="font-size: small;">git://github.com/DavorC/icuke.git</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong>Challenge 2: Timing</strong></span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Everybody knows that using sleep and delays in code is not so flexible.</span></span></span></p>
<pre class="ruby"><span style="color: #210000;"><span style="font-size: x-small;">sleep</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">3</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #444444;"><span style="font-size: x-small;"># wait 3 seconds</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">We want to check something on the screen and give it 3 seconds to finish its loading. </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Is it enough? Maybe, maybe not. Screen content loading could take 0.1 second or 5 seconds or... - You know what I mean. </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">In the first case loading is finished quickly and we unnecessarily spend 3 seconds for doing nothing . If we have a lot of delays in our code then our tests would waste a lot of precious time. </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">In the second case the delay is not long enough and the test fails.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong>Solution:</strong></span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"> </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">We need to write some help functions to wait for different items which are expected: some text, a button, downloading spinner etc.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Example with wait for text:</span></span></span></p>
<pre class="ruby"><span style="color: #500000;"><span style="font-size: x-small;"><strong>def</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> wait_for_text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">text, timeout </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@timeout</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> </span><span style="color: #210000;"><span style="font-size: x-small;">puts</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"#{method_name}(#{text}, #{timeout})"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>if</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@debug</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">refresh_screen</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">start_time </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> Time</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">now</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>until</strong></span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">screen</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">exists?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">))</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>   if</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> Time</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">now </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">-</span></span><span style="color: #000000;"><span style="font-size: x-small;"> start_time &gt; timeout</span></span>
<span style="color: #000000;">     <span style="font-size: x-small;">flunk</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"#{method_name}: Timed out after #{timeout} seconds"</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;">   </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>
<span style="color: #000000;">   </span><span style="color: #210000;"><span style="font-size: x-small;">sleep</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #215f00;"><span style="font-size: x-small;">0.1</span></span>
<span style="color: #000000;">   <span style="font-size: x-small;">refresh_screen</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">As you can see the method is waiting for the text to appear and does checking every 0.1 second. As soon as the text is found the test continues. If, after given timeout, the text is still not found, the test fails.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">I prefer to use unit test assertions in my tests (</span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><em>flunk</em></span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"> is an assert which always fails). To use assertions with cucumber you need to add assertions to the Cucumber World:</span></span></span></p>
<pre class="ruby"><span style="color: #210000;"><span style="font-size: x-small;">require</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">'test/unit/assertions'</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">World</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">Test::Unit::Assertions</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong>Challenge 3: </strong></span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"> </span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong>Different tappable object on screen can have the same text label.</strong></span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Identifying objects on the screen only by text is not enough.</span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong> </strong></span></span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">By default, the first tappable object is tapped. What if we want to tap the second one?</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;"><strong>Solution:</strong></span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">I created a set of help functions for: </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">returning all objects that satisfy some criteria</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">returning a specific object</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">waiting for a specific object</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">checking if a specific object exists</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Objects are described in xml by: type, label, traits and index.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Here is an example of getting an array of all elements satisfying given attribute values.</span></span></span></p>
<pre class="ruby"><span style="color: #500000;"><span style="font-size: x-small;"><strong>def</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> get_all_elements_by_type_label_and_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> </span><span style="color: #210000;"><span style="font-size: x-small;">puts</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"#{method_name}(#{type}, #{label}, #{traits})"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>if</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@debug</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">refresh_screen</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">doc </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> REXML::Document</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>new</strong></span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">screen</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">xml</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">to_s</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">elements </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> REXML::XPath</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">match</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">doc, </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"//#{type}[@label=#{label.inspect}][@traits=#{traits.inspect}]"</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">elements</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Observe how it is easy to parse xml using ruby's REXML library.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Of course I could write more generic methods and decrease number of code lines - something like: </span></span></span></p>
<pre class="ruby"><span style="color: #000000;"><span style="font-size: x-small;">get_all_elements</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, options </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #4f005f;"><span style="font-size: x-small;">{}</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">but I like readability so I wrote a set of help functions with more specific naming:</span></span></span></p>
<p><span style="color: #000000;"><span style="font-size: x-small;">get_element_by_type</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)<br />
</span></span><span style="font-size: 13.2px;"><span style="color: #000000;"><span style="font-size: x-small;">get_element_by_type_and_label</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)<br />
</span></span></span><span style="font-size: 13.2px;"><span style="color: #000000;"><span style="font-size: x-small;">get_element_by_type_and_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, traits, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_element_by_type_label_and_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, traits, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_all_elements_by_type</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_all_elements_by_type_and_label</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_all_elements_by_type_and_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_all_elements_by_type_label_and_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_all_static_texts</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">()</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_all_labels_by_type</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_all_labels_by_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">element_by_type_exists?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">element_by_type_and_label_exists?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">element_by_type_and_traits_exists?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, traits, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">element_by_type_label_and_traits_exists?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, traits, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">text_exists?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">wait_for_element_by_type</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #000000;"><span style="font-size: x-small;">, timeout </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@timeout</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">wait_for_element_by_type_and_label</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #000000;"><span style="font-size: x-small;">, timeout </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@timeout</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">wait_for_element_by_type_and_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, traits, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #000000;"><span style="font-size: x-small;">, timeout </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@timeout</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">wait_for_element_by_type_label_and_traits</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">type, label, traits, index </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #000000;"><span style="font-size: x-small;">, timeout </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@timeout</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">wait_for_text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">text, timeout </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> @@timeout</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">get_center_of_the_element</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">element</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">tap_coordinates</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">x, y</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">double_tap_coordinates</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">x, y</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">tap_element</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">element</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">double_tap_element</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">element</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">tap_text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><br />
<span style="color: #000000;"><span style="font-size: x-small;">double_tap_text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">In order to use these functions you need to use iCuke from:</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Courier New';"><span style="font-size: small;">git://github.com/DavorC/icuke.git</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Don't forget to use –recursive flag when you clone it:</span></span></span></p>
<pre><span style="color: #000000;"><span style="font-family: 'Courier New';"><span style="font-size: small;">git clone --recursive git://github.com/DavorC/icuke.git</span></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">After building and installing the iCuke gem you need to </span></span></span></p>
<pre><span style="color: #210000;"><span style="font-size: x-small;">require</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">'icuke/cucumber_ext'</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">instead of:</span></span></span></p>
<pre><span style="color: #210000;"><span style="font-size: x-small;">require</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">'icuke/cucumber'</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: Arial, sans-serif;"><span style="font-size: medium;">Example of usage</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">In your feature-file:</span></span></span></p>
<pre><span style="color: #000000;"><span style="font-size: x-small;">Background:</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">Given </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"myApp.xcodeproj"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> is loaded </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>in</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> the simulator</span></span>

<span style="color: #000000;"><span style="font-size: x-small;">Scenario Outline: User try to login with different invalid credentials with valid signs</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">When I am in </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Account"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> section</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;"> And I paste in username </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"&lt;user&gt;"</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;"> And I paste in password </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"&lt;pass&gt;"</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;"> And I tap Login button</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">Then I will see alert dialog</span></span>

<span style="color: #000000;"> <span style="font-size: x-small;">Examples:</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">| user            | pass      |</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">| </span></span><span style="color: #210000;"><span style="font-size: x-small;">test</span></span><span style="color: #000000;"><span style="font-size: x-small;">@</span></span><span style="color: #210000;"><span style="font-size: x-small;">test</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">com   | </span></span><span style="color: #210000;"><span style="font-size: x-small;">test</span></span><span style="color: #000000;"><span style="font-size: x-small;">      |</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">| 123456          | qwertyui  |</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">| </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">..</span></span><span style="color: #000000;"><span style="font-size: x-small;">@</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">..</span></span><span style="color: #000000;"><span style="font-size: x-small;">com        | </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;"> €&lt;&gt; |</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">step definitions:</span></span></span></p>
<pre class="ruby"><span style="color: #000000;"><span style="font-size: x-small;">When </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">/</span></span><span style="color: #000000;"><span style="font-size: x-small;">I am </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>in</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"(.*)"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> section</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">/</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> |section|</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">wait_for_text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">section</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">tap</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">section</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> <span style="font-family: Courier, 'Courier New', monospace;"><span style="font-size: x-small;">wait_for_element_by_type_and_label</span></span></span><span style="color: #6d6e1d;"><span style="font-family: Courier, 'Courier New', monospace;"><span style="font-size: x-small;">(</span></span></span><span style="color: #0400e6;"><span style="font-family: Courier, 'Courier New', monospace;"><span style="font-size: x-small;">"UINavigationItemView"</span></span></span><span style="color: #000000;"><span style="font-family: Courier, 'Courier New', monospace;"><span style="font-size: x-small;">, section</span></span></span><span style="color: #6d6e1d;"><span style="font-family: Courier, 'Courier New', monospace;"><span style="font-size: x-small;">)</span></span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>

<span style="color: #000000;"><span style="font-size: x-small;">When </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">/</span></span><span style="color: #000000;"><span style="font-size: x-small;">I paste </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>in</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> username </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"(.*)"</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">/</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> |user|</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">label </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"E-mail"</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">refresh_screen</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">assert</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">get_all_static_texts</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">().</span></span><span style="color: #000000;"><span style="font-size: x-small;">include?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">label</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><span style="color: #000000;"><span style="font-size: x-small;">, </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"No text field with label #{label} was found"</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">write_to_mac_clipboard</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">user</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">paste_clipboard_to_text_field</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"UITextFieldLabel"</span></span><span style="color: #000000;"><span style="font-size: x-small;">, label</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>

<span style="color: #000000;"><span style="font-size: x-small;">When </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"I tap Login button"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">wait_for_text</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Login"</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">tap</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Login"</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #5a5c00;"> </span><span style="color: #000000;"><span style="font-size: x-small;">wait_for_download_indicator_finish</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>

<span style="color: #000000;"><span style="font-size: x-small;">Then </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"I will see alert dialog"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">wait_for_element_by_type</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"UIAlertView"</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: Arial, sans-serif;"><span style="font-size: medium;">Testing both iPhone and iPad</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">If you’re testing a universal app that runs on both iPhone and iPad I recommend writing different scenarios for the platforms. iPad in landscape mode is most likely to reuse most of code you have written for iPhone. Place them in different feature files and tag them with e.g. @iphone respective @ipad tags.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">In your env.rb file:</span></span></span></p>
<pre class="ruby"><span style="color: #000000;"><span style="font-size: x-small;">$PLATFORM </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"iphone"</span></span>

<span style="color: #000000;"><span style="font-size: x-small;">Before</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">'@ipad'</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">$PLATFORM </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"ipad"</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>

<span style="color: #000000;"><span style="font-size: x-small;">Before</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">'@iphone'</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">$PLATFORM </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"iphone"</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Use in your feature files:</span></span></span></p>
<pre><span style="color: #000000;"><span style="font-size: small;">Given I have started application</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Implementation:</span></span></span></p>
<pre class="ruby"><span style="color: #000000;"><span style="font-size: x-small;"><strong>Given </strong></span></span><span style="color: #0000ea;"><span style="font-size: x-small;"><strong>"I have started the application"</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"><strong> </strong></span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span>
<span style="color: #000000;"> </span><span style="color: #444444;"><span style="font-size: x-small;"># ... some code</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">Given </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"\"</span></span><span style="color: #000000;"><span style="font-size: x-small;">myApp\</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">" from \"</span></span><span style="color: #000000;"><span style="font-size: x-small;">myApp</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">xcodeproj\</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">" is loaded in the #{$PLATFORM} simulator"</span></span>
<span style="color: #000000;"> </span><span style="color: #444444;"><span style="font-size: x-small;"># ... more code</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">If you wants to run iPad simulator in landscape mode:</span></span></span></p>
<pre class="ruby"><span style="color: #500000;"><span style="font-size: x-small;"><strong>def</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> switch_ipad_to_landscape</span></span>
<span style="color: #500000;"> <span style="font-size: x-small;"><strong>if</strong></span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">get_ipad_orientation </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">==</span></span><span style="color: #000000;"><span style="font-size: x-small;"> PORTRAIT</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;">   <span style="font-size: x-small;">rotate_simulator_left</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">where</span></span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong> </strong></span></span><span style="color: #000000;"><span style="font-size: x-small;">get_ipad_orientation </span></span><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">is some application specific method to decide if the simulator is in portrait or landscape mode.</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: Arial, sans-serif;"><span style="font-size: medium;">Running iCuke tests on Hudson server</span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">It’s really nice to be able to run your test suite at given intervals, or when you commit to the source code repository. To run your iCuke tests on Hudson (which is a popular continuous integration build server) you must start your iPhone simulator from a terminal window. This is easiest to do by launching an AppleScript from Hudson. </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Below are two scripts, one AppleScript and one shell script, that I used to run my iCuke tests from Hudson. </span></span></span></p>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">- run_cuke.scpt</span></span></span></p>
<pre><span style="color: #5a5c00;"><span style="font-size: x-small;">--</span></span><span style="color: #000000;"><span style="font-size: x-small;"> run_cuke.scpt</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>tell</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> application </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Finder"</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>set</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> my_folder_path to container of </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">path to me</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span><span style="color: #000000;"><span style="font-size: x-small;"> as </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>text</strong></span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>set</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> posixPath to POSIX path of </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>file</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> my_folder_path</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>set</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> scriptPath to posixPath </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">&amp;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"cuke.sh"</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">end </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>tell</strong></span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>tell</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> application </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Terminal"</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">activate</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">do script scriptPath</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">end </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>tell</strong></span></span>
<span style="color: #000000;"><span style="font-size: x-small;">delay </span></span><span style="color: #246b00;"><span style="font-size: x-small;">1200</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">--</span></span><span style="color: #000000;"><span style="font-size: x-small;"> it should be enough to finish all tests</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>set</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> logscript to </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"grep -c FAILED "</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">&amp;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> posixPath </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">&amp;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"cuke.log"</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">&amp;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">" | cat"</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>set</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> cuke_failed to do shell script logscript</span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>if</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> cuke_failed </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">&gt;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #000000;"><span style="font-size: x-small;"> then</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>error</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Cucumber tests failed"</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">end </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>if</strong></span></span>
<span style="color: #000000;"><span style="font-size: x-small;">try </span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">--</span></span><span style="color: #000000;"><span style="font-size: x-small;"> do not leave terminals </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>after</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> test run</span></span>
<span style="color: #000000;"> <span style="font-size: x-small;">do shell script </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"killall 'Terminal'"</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">end try</span></span></pre>
<p><span style="color: #000000;"><span style="font-size: x-small;">- cuke.sh</span></span></p>
<pre><span style="color: #444444;"><span style="font-size: x-small;">#!/bin/bash</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">scriptpath</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;">$</span></span><span style="color: #4f005f;"><span style="font-size: x-small;">(</span></span><span style="color: #92504f;"><span style="font-size: x-small;"><strong>cd</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> ${</span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #000000;"><span style="font-size: x-small;">%</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">*</span></span><span style="color: #000000;"><span style="font-size: x-small;">} </span></span><span style="color: #4f005f;"><span style="font-size: x-small;">&amp;&amp;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #92504f;"><span style="font-size: x-small;"><strong>echo</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> $PWD</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/</span></span><span style="color: #000000;"><span style="font-size: x-small;">${</span></span><span style="color: #246b00;"><span style="font-size: x-small;">0</span></span><span style="color: #444444;"><span style="font-size: x-small;">##*/})</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">SCRIPTFOLDER</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;">`dirname </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"$scriptpath"</span></span><span style="color: #000000;"><span style="font-size: x-small;">`</span></span>
<span style="color: #92504f;"><span style="font-size: x-small;"><strong>echo</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> Cucumber script is run </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>in</strong></span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">:</span></span><span style="color: #000000;"><span style="font-size: x-small;"> $SCRIPTFOLDER</span></span>
<span style="color: #92504f;"><span style="font-size: x-small;"><strong>cd</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> $SCRIPTFOLDER</span></span>
<span style="color: #000000;"><span style="font-size: x-small;">cucumber $SCRIPTFOLDER</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/features</span></span><span style="color: #000000;"><span style="font-size: x-small;"> --format</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #000000;"><span style="font-size: x-small;">html --out $SCRIPTFOLDER</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/cuke_results</span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>.</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;">html </span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&gt;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> $SCRIPTFOLDER</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/cuke</span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>.</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;">log</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Add these two scripts to your project.</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Then, add this Cucumber hook to your env.rb file:</span></span></span></p>
<pre class="ruby"><span style="color: #000000;"><span style="font-size: x-small;">After </span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>do</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;"> |s|</span></span>
<span style="color: #500000;"> <span style="font-size: x-small;"><strong>if</strong></span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">(</span></span><span style="color: #000000;"><span style="font-size: x-small;">s</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">failed?</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">)</span></span>
<span style="color: #000000;">   </span><span style="color: #210000;"><span style="font-size: x-small;">puts</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Scenario FAILED: &lt;#{s.name}&gt;"</span></span>
<span style="color: #000000;">   </span><span style="color: #210000;"><span style="font-size: x-small;">puts</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"More info about failure: SCREEN XML"</span></span>
<span style="color: #000000;">   </span><span style="color: #210000;"><span style="font-size: x-small;">puts</span></span><span style="color: #000000;"><span style="font-size: x-small;"> screen</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">.</span></span><span style="color: #000000;"><span style="font-size: x-small;">xml</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>else</strong></span></span>
<span style="color: #000000;">   </span><span style="color: #210000;"><span style="font-size: x-small;">puts</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"Scenario PASS: &lt;#{s.name}&gt;"</span></span>
<span style="color: #000000;"> </span><span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span>
<span style="color: #500000;"><span style="font-size: x-small;"><strong>end</strong></span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">On Hudson, create a new job and copy the configuration from your project's existing job.</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Configure job: </span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">add to description:</span></span></span></p>
<pre><span style="color: #bc00d7;"><span style="font-size: x-small;">&lt;</span></span><span style="color: #000000;"><span style="font-size: x-small;">a href</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/hudson/job/Helios_Cuke/ws/cuke_results</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">.html"</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&gt;</span></span><span style="color: #000000;"><span style="font-size: x-small;">Cucumber Results</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&lt;</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/a</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&gt;</span></span>
<span style="color: #bc00d7;"><span style="font-size: x-small;">&lt;</span></span><span style="color: #000000;"><span style="font-size: x-small;">b</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&gt;</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">|</span></span><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&lt;</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/b</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&gt;</span></span>
<span style="color: #bc00d7;"><span style="font-size: x-small;">&lt;</span></span><span style="color: #000000;"><span style="font-size: x-small;">a href</span></span><span style="color: #5a5c00;"><span style="font-size: x-small;">=</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">"</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/hudson/job/Helios_Cuke/ws/cuke</span></span><span style="color: #0000ea;"><span style="font-size: x-small;">.log"</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&gt;</span></span><span style="color: #000000;"><span style="font-size: x-small;">Debug</span></span><span style="color: #500000;"><span style="font-size: x-small;"><strong>.</strong></span></span><span style="color: #000000;"><span style="font-size: x-small;">log</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&lt;</span></span><span style="color: #20003c;"><span style="font-size: x-small;">/a</span></span><span style="color: #bc00d7;"><span style="font-size: x-small;">&gt;</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">add build step (execute shell):</span></span></span></p>
<pre><span style="color: #000000;"><span style="font-size: x-small;">osascript ${WORKSPACE}/run_cuke.scpt</span></span></pre>
<p><span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">Of course you can change all scripts according your needs.</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">At the end you should have your iCuke tests running on Hudson and you will get both a nice test report in HTML and the debug output as a plain text.</span></span></span><br />
<span style="color: #000000;"><span style="font-family: 'Times New Roman', serif;"><span style="font-size: small;">There is a lot of potential for doing automated feature tests for iOS using Cucumber and with iCuke and the additions above you’ll hopefully be well on your way for doing BDD in your next iOS project!</span></span></span><br />
<script src="js/shCore.js">// <![CDATA[
  mce:0
// ]]&gt;</script> <script src="js/shBrushCSharp.js">// <![CDATA[
  mce:1
// ]]&gt;</script><br />
<script src="js/shBrushXml.js">// <![CDATA[
  mce:2
// ]]&gt;</script> <script type="text/javascript">// <![CDATA[
  mce:3
// ]]&gt;</script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jayway.com/2011/02/11/cucumber-tests-on-iphoneipad/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Maven, FindBugs and Dashboard Reports</title>
		<link>http://blog.jayway.com/2010/01/29/maven-findbugs-and-dashboard-reports/</link>
		<comments>http://blog.jayway.com/2010/01/29/maven-findbugs-and-dashboard-reports/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 20:02:59 +0000</pubDate>
		<dc:creator>Davor Crnomat</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.jayway.com/?p=4571</guid>
		<description><![CDATA[There are a few simple steps to get nice graphic presentations of FindBugs results using Maven.

First, to enable FindBugs reporting in Maven, just add report section to your pom files, something like example below, but of course, you can do your own configuration.]]></description>
			<content:encoded><![CDATA[<p>There are a few simple steps to get nice graphic presentations of FindBugs results using Maven.</p>
<p>First, to enable FindBugs reporting in Maven, just add report section to your pom files, something like example below, but of course, you can do your own configuration.</p>
<pre class="brush:xml">
&lt;reporting&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;findbugs-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.3&lt;/version&gt;
      &lt;configuration&gt;
        &lt;excludeFilterFile&gt;exclude.xml&lt;/excludeFilterFile&gt;
        &lt;findbugsXmlOutput&gt;true&lt;/findbugsXmlOutput&gt;
        &lt;findbugsXmlWithMessages&gt;true&lt;/findbugsXmlWithMessages&gt;
        &lt;threshold&gt;Low&lt;/threshold&gt;
        &lt;effort&gt;Max&lt;/effort&gt;
        &lt;xmlOutput&gt;true&lt;/xmlOutput&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/reporting&gt;
</pre>
<p>Then you can just use command <strong>mvn site </strong>if you want to generate<strong> </strong>more comprehensive project information or <strong>mvn findbugs:findbugs </strong>for only FindBugs reports.</p>
<p>Finally use <strong>mvn dashboard:dashboard</strong> to generate charts.</p>
<p>Voila. We have got nice graphic reports.<br />
Well, not so nice. We have bugs we need to fix.</p>
<p><a href="http://blog.jayway.com/wordpress/wp-content/uploads/2010/01/findbugs_report.jpg" rel="lightbox"><img class="size-full wp-image-4572 alignleft" title="findbugs_report" src="http://blog.jayway.com/wordpress/wp-content/uploads/2010/01/findbugs_report.jpg" alt="FindBugs report charts" width="621" height="686" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jayway.com/2010/01/29/maven-findbugs-and-dashboard-reports/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

