<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <title>ArtOfTest Blogs</title>
    <description>Rss Feed for all ArtOfTest Blogs.</description>
    <link>http://www.artoftest.com/community/blogs.aspx</link>
    <docs>http://backend.userland.com/rss</docs>
    <item>
      <title>Design Canvas 2.0 Released</title>
      <description>&lt;div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; " id="pageContainer"&gt;&lt;p&gt;It is official! WebAii 2.0 and Design Canvas 2.0 are released. Since Beta in early November we have fixed over 122 issues reported from our internal testing, our partners and end users. Design Canvas 2.0 and WebAii 2.0 are packed with new features and most importantly first class support for Silverlight record/playback automation.&lt;/p&gt;&lt;p&gt;Download WebAii 2.0 / Design Canvas 2.0 from &lt;a href="http://www.artoftest.com/products/downloads.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We are also conducting a joined &lt;strong&gt;(free)&lt;/strong&gt; &lt;a href="http://blogs.telerik.com/blogs/posts/09-12-04/webui_test_studio_2_0_webinar_join_for_a_chance_to_win_a_free_license.aspx"&gt;webinar&lt;/a&gt; with Telerik today Dec 10th @ 11:00AM-12:00PM EST, to introduce the new features in Design Canvas 2.0. We will also be giving out a free license to one of the attendees. So sign-up today!&lt;/p&gt;&lt;p&gt;To get familiar with Design Canvas 2.0 new features, please check out our beta post &lt;a href="http://www.artoftest.com/community/blogs/09-11-04/Design_Canvas_2_0_Beta_Released.aspx"&gt;here&lt;/a&gt;. Since the beta we have enhanced and added several features to help make recording and playback much more reliable. Some of the key enhancements since the beta:&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Silverlight Automation:&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt; &lt;li&gt;&lt;strong&gt;Custom Control Support:&lt;/strong&gt; When DC2.0 detects a custom control on the surface, it now instead of showing the generic list of quick tasks for that control, it will automatically detect the base class that the control inherits from and show the quick tasks for that base control. So for example, if you have &lt;strong&gt;MyButton&lt;/strong&gt; control that inherits from &lt;strong&gt;Button&lt;/strong&gt;, we will automatically show the quick tasks for &lt;strong&gt;Button&lt;/strong&gt; on the surface and codegen against &lt;strong&gt;Button&lt;/strong&gt; instead of &lt;strong&gt;FrameworkElement&lt;/strong&gt;. This is gives customers that have applications that heavily utilize custom controls a richer out-of-box experience.  &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Playback Reliability: &lt;/strong&gt;On playback, our execution engine not only waits for an element to be visible, it also waits for the item to stop its animations (Wait.ForNoMotion) which is common in Silverlight as buttons and other UI widgets you are trying to automation fly-in, scroll up or expand (which drive testers crazy!). Further more, if the element is contained in ScrollViewer, we will automatically detected if the element is scrolled into view, and if not, scroll it. Only then, we perform the action.  &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Smarter ScrollToVisible: &lt;/strong&gt;This was something we enhanced as per the requirement of #2 above. The ScrollToVisible on FrameworkElement now can detect ScrollViewers and intelligently scroll the item within them to view - including scrolling the browser content if needed.  &lt;/li&gt; &lt;li&gt;&lt;strong&gt;New Sentence Editor UI: &lt;/strong&gt;We skinned the sentence editor to match the new 3D View&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_4.sflb"&gt;&lt;img style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_1.sflb" width="659" height="321" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;ol&gt; &lt;li&gt;&lt;strong&gt;Expanded property verification for Silverlight objects: &lt;/strong&gt;You can now verify almost all public properties on your Silverlight control. We will be expand this support to include ALL properties including attached properties in the next update:&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_6.sflb"&gt;&lt;img style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_2.sflb" width="508" height="458" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;ol&gt; &lt;li&gt;&lt;strong&gt;Better recording performance in the external browser: &lt;/strong&gt;In beta the overlay surface was a bit sluggish when run against Silverlight applications. Now, it should be on par with the hosted browser.  &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Better support for multi-Silverlight app scenarios and app in frames. &lt;/strong&gt;In beta, we had few issue when an application hosted several Silverlight application islands on the same page or when a Silverlight application was hosted in a sub frame. All these issues are now resolved.  &lt;/li&gt; &lt;li&gt;&lt;strong&gt;SilverligthApp Connect timeout setting. &lt;/strong&gt;You now can customize the connect timeout for your Silverlight application depending on its size and time it takes to load. The default settings should work for most applications but if the application take much longer to load then you utilize this settings to extend it.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_10_1.sflb"&gt;&lt;img style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_4_1.sflb" width="467" height="293" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt; &lt;li&gt;&lt;strong&gt;LockOnSurface&lt;/strong&gt;: From the DOM Explorer you can now target Silverlight elements and lock them on the browser surface and show the element menu for them. This feature is very useful when try to do validation against an element that is hard to highlight using the mouse on the surface.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt; &lt;strong&gt;General Enhancements&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt; &lt;li&gt;&lt;strong&gt;Better text typing recording: &lt;/strong&gt;In addition to enhanced typing recording, we now record other keys beyond alpha numeric keys.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_12_1.sflb"&gt;&lt;img style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_5_1.sflb" width="417" height="230" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;ol&gt; &lt;li&gt;&lt;strong&gt;jQuery selector syntax support: &lt;/strong&gt;This was a customer feature request and we plan to blog more about it in the near future, but in case you are a jQuery junkie, you can now search the DOM similar to how you would do it in &lt;a href="http://docs.jquery.com/Selectors"&gt;jQuery&lt;/a&gt; with a strongly-typed object model in WebAii. Here is a quick example (make sure to import the ArtOfTest.WebAii.jQuery namespace first):&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_14_1.sflb"&gt;&lt;img style="border-bottom-width: 0px; border-bottom-style: initial; border-bottom-color: initial; border-left-width: 0px; border-left-style: initial; border-left-color: initial; display: inline; border-top-width: 0px; border-top-style: initial; border-top-color: initial; border-right-width: 0px; border-right-style: initial; border-right-color: initial; " title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_6_1.sflb" width="592" height="105" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;ol&gt; &lt;li&gt;&lt;strong&gt;WebAii's HTTP Proxy Request Cookie fixes. &lt;/strong&gt;We no longer combines cookies into a single header line.  &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Download dialog handling support fixes&lt;/strong&gt; &lt;/li&gt;&lt;/ol&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;p&gt;ArtOfTest, Inc.&lt;/p&gt;&lt;blockquote&gt;&lt;p align="left"&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
      <link>http://www.artoftest.com/community/blogs/09-12-10/Design_Canvas_2_0_Released.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-12-10/Design_Canvas_2_0_Released.aspx</comments>
      <guid isPermaLink="false">1b3a0457-e372-49a2-b280-be7bb46a35c9</guid>
      <pubDate>Thu, 10 Dec 2009 08:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Design Canvas 2.0 Beta Released!</title>
      <description>&lt;div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="pageContainer"&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;We are happy to announce the availability of &lt;strong&gt;Design Canvas 2.0 Beta&lt;/strong&gt;! Design Canvas 2.0 is a major update to our flagship Design Canvas product line and is packed with new features and updates. &lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;&lt;strong&gt;Silverlight recording and playback is now fully supported in Design Canvas!!!&lt;/strong&gt;&lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;Design Canvas 2.0 Beta can be downloaded from &lt;a shape="rect" href="http://www.artoftest.com/products/downloads.aspx" shape="rect"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;We are planning the final release the beginning of December this year. We really want to hear your feedback so we encourage you to share it at our Design Canvas 2.0 forum &lt;a shape="rect" href="http://www.artoftest.com/community/forums.aspx" shape="rect"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;Watch Getting Started Video &lt;a href="http://www.artoftest.com/community/All-Videos/Silverlight-Recording.aspx"&gt;here&lt;/a&gt;&lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;&lt;strong&gt;What's New in 2.0?&lt;/strong&gt;&lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;As mentioned, Design Canvas is a major upgrade and contains tons of new features and enhancements. Let's start by talking about the biggest new feature in Design Canvas 2.0 which is support for Silverlight Automation.&lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;&lt;strong&gt;Silverlight Automation:&lt;/strong&gt;&lt;/p&gt; &lt;p style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt;We've spent over a  year studying and understanding the usage scenarios for Silverlight automation and the distinct challenges it poses. We tried to address many of these challenges in Design Canvas 2.0 and we know we still have many more that we are actively working on addressing before the final release in December. Here are some of the features that are worth mentioning when it comes to Silverlight automation:&lt;/p&gt; &lt;div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Object Based Recording&lt;/strong&gt;: All elements that are targets of a specific action/verification or wait operation are abstracted for you and organized under the proper Page/SilverlightApp in the Elements Explorer. Each action is performed against a target and the target has specific find logic that gets generated to be used on playback. &lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image25.sflb" shape="rect"&gt;&lt;img width="660" height="260" style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image25_thumb.sflb" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt;"&lt;strong&gt;On Spot" Silverlight Control Detection: &lt;/strong&gt;Silverlight applications - especially real enterprise applications - have large, complex and deep visual trees. In fact, we found that some Silverlight applications have bigger visual trees than complex Ajax applications. For example, a simply HTML button can be represented as one tag in HTML &amp;lt;input type="submit" /&amp;gt; but in Silverlight a Button is made out of many mini controls like Paths/Rectangles/TextBlocks.etc. That by itself makes identifying the correct UI control to build validation against a bit more tedious and complex. Design Canvas 2.0 offers UI cues using what we call "fans" that allow you to visually identify what element you have under the mouse and what logical controls this element is part of in order or containment. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_10.sflb" shape="rect"&gt;&lt;img width="544" height="260" style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_4.sflb" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Integrated Visual Tree Explorer: &lt;/strong&gt;The DOM Explorer can now show both your HTML page DOM and your Silverlight application Visual Tree. Furthermore, you can set the root of the DOM Explorer to be the Silverlight application if you do not care about the HTML portion of the page. That is probably the case for customers building 100% Silverlight LOB applications. The DOM Explorer is also hooked to the highlighting surface and vice-versa. &lt;/li&gt; &lt;/ol&gt; &lt;p align="center"&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_14.sflb" shape="rect"&gt;&lt;img width="491" height="461" style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_6.sflb" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="left"&gt;&lt;strong&gt;Built-in translators for all out-of-box Silverlight controls:&lt;/strong&gt; We have custom translators built for all the built-in controls (common &amp;amp; complex) that Microsoft ships out of box for Silverlight development. The translators offer tailored recording experience for each control. &lt;em&gt;We also have future plans (post 2.0) to support the Silverlight Control Toolkit that Microsoft ships too&lt;/em&gt;.&lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;p align="left"&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_16.sflb" shape="rect"&gt;&lt;img width="520" height="405" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_7.sflb" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt; &lt;/p&gt; &lt;p&gt;These are just a few of the main highlights of our Silverlight recording support. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;NEW Interactive HIGHLIGHTING SURFACE&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The new highlighting surface in Design Canvas 2.0 is designed to allow for a more intuitive and richer user experience right on top of the target application you testing. &lt;/p&gt; &lt;p&gt;- Drag elements directly from the page to locate in the DOM or add to the project elements:&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_18.sflb" shape="rect"&gt;&lt;img width="349" height="210" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_8.sflb" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;- New simple and easy to use "Element Menu"&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_20.sflb" shape="rect"&gt;&lt;img width="179" height="244" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_9.sflb" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;- Rich Drag &amp;amp; Drop recording experience:&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_22.sflb" shape="rect"&gt;&lt;img width="486" height="281" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_10.sflb" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;New 3D Element View&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Accessed through the verifications menu, this new feature allows users to dissect the DOM hierarchy and target a specific element using a new 3D visualizer. This feature is extremely important when building Silverlight or HTML automation in real-world applications that have complex DOM or Visual Trees. Furthermore, the UI allows you to build all sorts of verifications against the targeted element with just few clicks.&lt;/p&gt; &lt;p&gt;&lt;img alt="studio whatsnew" src="http://www.telerik.com/libraries/webui-test-studio-features/studio_whatsnew.sflb" complete="complete" /&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;New Slick Storyboard&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A new storyboard experience.The storyboard is also now hooked to the Test Explorer and vice-versa so you can visual identify each step easily.&lt;/p&gt; &lt;p&gt; &lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_24.sflb" shape="rect"&gt;&lt;img width="667" height="444" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb_11.sflb" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;And MUCH many more&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Test Explorer Enhancements: Do/Undo/Copy/Paste/Record at a certain step. &lt;/li&gt; &lt;li&gt;Support for XUnit &amp;amp; MBUnit &lt;/li&gt; &lt;li&gt;New find logic editor to modify how elements are found. &lt;/li&gt; &lt;li&gt;New tasks: Clear Cookies , WaitForUrl for redirects and Inspection Points. &lt;/li&gt; &lt;li&gt;Set a BaseUrl for your entire project. &lt;/li&gt; &lt;li&gt;Control Translators for all of Telerik's Silverlight RadControls. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Telerik also released their WebUI Test Studio (Beta) as part of their Q3 release which is based on our Design Canvas 2.0 Beta.&lt;/p&gt; &lt;p&gt;&lt;object id="viddlerplayer-463911ef" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="350" althtml="
&amp;lt;rade_param name=&amp;quot;movie&amp;quot; value=&amp;quot;http://www.viddler.com/simple/463911ef/&amp;quot; &amp;gt; &amp;lt;rade_param name=&amp;quot;allowScriptAccess&amp;quot; value=&amp;quot;always&amp;quot; &amp;gt; &amp;lt;rade_param name=&amp;quot;wmode&amp;quot; value=&amp;quot;transparent&amp;quot; &amp;gt; &amp;lt;rade_param name=&amp;quot;allowFullScreen&amp;quot; value=&amp;quot;true&amp;quot; &amp;gt;&amp;lt;embed src=&amp;quot;http://www.viddler.com/simple/463911ef/&amp;quot; originalAttribute=&amp;quot;src&amp;quot; originalPath=&amp;quot;http://www.viddler.com/simple/463911ef/&amp;quot; originalAttribute=&amp;quot;src&amp;quot; originalPath=&amp;quot;http://www.viddler.com/simple/463911ef/&amp;quot; originalAttribute=&amp;quot;src&amp;quot; originalPath=&amp;quot;http://www.viddler.com/simple/463911ef/&amp;quot; type=&amp;quot;application/x-shockwave-flash&amp;quot; allowScriptAccess=&amp;quot;always&amp;quot; allowFullScreen=&amp;quot;true&amp;quot; wmode=&amp;quot;transparent&amp;quot; name=&amp;quot;viddlerplayer-463911ef&amp;quot;&amp;gt;&amp;lt;/embed&amp;gt;"&gt; &lt;param name="movie" value="http://www.viddler.com/simple/463911ef/" &gt; &lt;param name="allowScriptAccess" value="always" &gt; &lt;param name="wmode" value="transparent" &gt; &lt;param name="allowFullScreen" value="true" &gt;&lt;embed src="http://www.viddler.com/simple/463911ef/" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" name="viddlerplayer-463911ef"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt; &lt;p&gt;Enjoy and do let us know what you think!!!&lt;/p&gt; &lt;p&gt;ArtOfTest&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-11-04/Design_Canvas_2_0_Beta_Released.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-11-04/Design_Canvas_2_0_Beta_Released.aspx</comments>
      <guid isPermaLink="false">97f5dfc8-3b50-4dfd-ac05-a09ac222d528</guid>
      <pubDate>Wed, 04 Nov 2009 15:07:00 GMT</pubDate>
    </item>
    <item>
      <title>CI with WebAii for Silverlight</title>
      <description>&lt;div id="pageContainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p&gt;Continuous integration is a topic of great interest to many.. I wanted to point everyone to a code library project that one of Telerik's customers has posted on their Code Library.  &lt;/p&gt; &lt;p&gt;The project shows how to integrate WebAii for Silverlight testing with NUnit + CruiseControl.NET&lt;/p&gt; &lt;p&gt;Check out the full blog post &lt;a shape="rect" href="http://blogs.telerik.com/blogs/posts/09-10-21/continuous_integration_with_webaii_for_silverlight_nunit_and_cruisecontrol_net.aspx" shape="rect"&gt;here&lt;/a&gt;: &lt;/p&gt; &lt;p&gt;We also have full documentation on how to use WebAii with different integration servers on our documentation site.&lt;/p&gt; &lt;p&gt; &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/topicsindex.aspx?topic=cioverview" shape="rect"&gt;Overview of WebAii with Continuous Integration&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/topicsindex.aspx?topic=tfsbuild" shape="rect"&gt;WebAii + TFS Server Builds&lt;/a&gt;&lt;/p&gt; &lt;p&gt; &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/topicsindex.aspx?topic=ccnet" shape="rect"&gt;WebAii + CruiseControl.NET&lt;/a&gt;&lt;/p&gt; &lt;p&gt; &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/topicsindex.aspx?topic=teamcity" shape="rect"&gt;WebAii + TeamCity&lt;/a&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Hope that helps.&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-10-21/CI_with_WebAii_for_Silverlight.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-10-21/CI_with_WebAii_for_Silverlight.aspx</comments>
      <guid isPermaLink="false">c4a1fe6d-782a-4f15-a121-7909683a1493</guid>
      <pubDate>Wed, 21 Oct 2009 04:46:00 GMT</pubDate>
    </item>
    <item>
      <title>Updated WebAii 2.0 Beta Released</title>
      <description>&lt;div id="pageContainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p&gt;We are making available a new update for the WebAii 2.0 Beta. This Beta is version &lt;strong&gt;2.0.4. &lt;/strong&gt;This should be the last beta release of the WebAii 2.0 framework. The next release should be the final release! Expect the final release sometime in November this year.&lt;/p&gt; &lt;p&gt;Download WebAii 2.0 Beta (2.0.4) from &lt;a shape="rect" href="http://www.artoftest.com/PublishedBuilds/WebAii/WebAii2.0.4.msi" shape="rect"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Many customers have already moved to the WebAii 2.0 release and the feedback has been tremendous. We know the 2.0 final release is going to be one of our best releases given the large amount of adoption and dogfooding in the community! This release contains over 300 fixes since 2.0.2. Some that are worth noting and that customers have run into:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;TypeText reliability issues. &lt;/li&gt; &lt;li&gt;Added Custom control mappings collection and global override support. &lt;/li&gt; &lt;li&gt;New FrameworkElement.GetProperties() method returns a list of all public properties on the live FrameworkElement and their types. &lt;/li&gt; &lt;li&gt;Scan entire visual tree when UID not found at expected node. Fixes Drag &amp;amp; Drop cases. Add new ElementNotFound exception. &lt;/li&gt; &lt;li&gt;Fixed crash in Window.CutBitmap(). &lt;/li&gt; &lt;li&gt;Added Support for Focus() on the HtmlControl + Keyboard support. &lt;/li&gt; &lt;li&gt;Added KeyBoard Processing Events. &lt;/li&gt; &lt;li&gt;Use UID for validating elements as we walk down the visual tree to act on an element. If UID does not match at any specific level, enumerate all the child nodes at that level looking for a match. Sometimes the path changes out from under us between the find and the operation. &lt;/li&gt; &lt;li&gt;Reset _isProxy when the real element is found and being created. &lt;/li&gt; &lt;li&gt;Fix setting cookie. Was creating cookies like Name=Name=Value. &lt;/li&gt; &lt;li&gt;Exposed WindowMoved event on the GenericWindow. &lt;/li&gt; &lt;li&gt;Expanded events fired from Generic window. &lt;/li&gt; &lt;li&gt;New HtmlControl.IsActiveElement property returns true if the HTML element has the keyboard focus. &lt;/li&gt; &lt;li&gt;Added Support for Attribute Exists/Missing. &lt;/li&gt; &lt;li&gt;Fix for testing using ASP.NET local development server on x64 machine. &lt;/li&gt; &lt;li&gt;Fixed issue when calling Wait.For() with a lambda expression as the assert condition &lt;/li&gt; &lt;li&gt;Fixed GetBitmap to truncate the rectangle rather than throw an exception. &lt;/li&gt; &lt;li&gt;Added Find.AllByCustom method. &lt;/li&gt; &lt;li&gt;Added new XMultiMgr setting. When set to true, we use the WebAii 1.1 connection method, which supports multiple processes doing testing. &lt;/li&gt; &lt;li&gt;Change how we wait for the SL extension to be loaded. &lt;/li&gt; &lt;li&gt;Fix launching IE-8 regression. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;In addition to the WebAii 2.0 framework, we have been busy with Design Canvas 2.0 which is going to leverage all the Silverlight work we have done in framework to offer a rich Silverlight recording experience. In addition to Silverlight support, Design Canvas 2.0 is packed with rich features including a new automation overlay surface entirely built using WPF that offers an intuitive interface and rich interaction with the live page. Stay tuned for more details..&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-10-06/Updated_WebAii_2_0_Beta_Released.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-10-06/Updated_WebAii_2_0_Beta_Released.aspx</comments>
      <guid isPermaLink="false">105606fd-cd63-4d74-9535-95702ed808dd</guid>
      <pubDate>Tue, 06 Oct 2009 03:05:00 GMT</pubDate>
    </item>
    <item>
      <title>Telerik RadControl Test Wrappers</title>
      <description>&lt;div style="padding: 0px;" id="pageContainer"&gt; &lt;p&gt;I'm happy to announce Telerik's Q2 2009 release now includes the &lt;a shape="rect" href="http://www.artoftest.com/products/webaii.aspx"&gt;WebAii Framework&lt;/a&gt; as part of their RadControls for &lt;a shape="rect" href="http://www.telerik.com/products/aspnet-ajax.aspx"&gt;AJAX&lt;/a&gt; and &lt;a shape="rect" href="http://www.telerik.com/products/silverlight.aspx"&gt;Silverlight&lt;/a&gt; bundles. The release is based on &lt;a shape="rect" href="http://www.artoftest.com/community/blogs/09-06-29/WebAii_2_0_Beta2_Released.aspx"&gt;WebAii 2.0 Beta2&lt;/a&gt; that was released last week.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In addition to the full WebAii Framework, this &lt;a shape="rect" href="http://blogs.telerik.com/testing/posts/09-07-06/welcome_the_free_test_automation_solution_for_radcontrols.aspx"&gt;release&lt;/a&gt; also includes &lt;a shape="rect" href="http://www.telerik.com/products/webaii-testing-framework/features.aspx#wrappers-for-radcontrols"&gt;Telerik's RadControl test wrappers&lt;/a&gt; for both Ajax and Silverlight. Telerik used WebAii's framework architecture and extensibility model to build abstract test wrappers for all their controls that ship in the box. The wrappers give customers a rich and powerful object model to work with for their controls so they don't have to worry about internal specifics of how the control works. The wrappers also ensure backward compatibility for UI tests built against websites using RadControls. So if you use Telerik RadControls, you can now simply use these wrappers in addition to the full power of WebAii to code your unit UI tests easily!&amp;nbsp; &lt;/p&gt; &lt;p&gt;Check out this &lt;a shape="rect" href="http://tv.telerik.com/webui-test-studio/webaii-testing-framework/q2-2009-web-aii-testing-framework"&gt;video&lt;/a&gt; that demonstrates some of the richness of WebAii and Telerik's RadControl Test Wrappers.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;object height="150" width="253" althtml="&amp;lt;rade_param name=&amp;quot;movie&amp;quot; value=&amp;quot;http://www.viddler.com/simple/a8cc09a6/&amp;quot; &amp;gt; &amp;lt;rade_param name=&amp;quot;allowScriptAccess&amp;quot; value=&amp;quot;always&amp;quot; &amp;gt; &amp;lt;rade_param name=&amp;quot;wmode&amp;quot; value=&amp;quot;transparent&amp;quot; &amp;gt; &amp;lt;rade_param name=&amp;quot;allowFullScreen&amp;quot; value=&amp;quot;true&amp;quot; &amp;gt;&amp;lt;embed src=&amp;quot;http://www.viddler.com/simple/a8cc09a6/&amp;quot; originalAttribute=&amp;quot;src&amp;quot; originalPath=&amp;quot;http://www.viddler.com/simple/a8cc09a6/&amp;quot; width=&amp;quot;905&amp;quot; height=&amp;quot;699&amp;quot; type=&amp;quot;application/x-shockwave-flash&amp;quot; allowScriptAccess=&amp;quot;always&amp;quot; allowFullScreen=&amp;quot;true&amp;quot; wmode=&amp;quot;transparent&amp;quot; name=&amp;quot;viddlerplayer-a8cc09a6&amp;quot;&amp;gt;&amp;lt;/embed&amp;gt;" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="viddlerplayer-a8cc09a6"&gt; &lt;param name="movie" value="http://www.viddler.com/simple/a8cc09a6/"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="wmode" value="transparent"&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.viddler.com/simple/a8cc09a6/" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" name="viddlerplayer-a8cc09a6" width="700" height="500"&gt;&lt;/object&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This&amp;nbsp;product is another result of the technology partnership that Telerik has with ArtOfTest! Enjoy..&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-07-06/Telerik_RadControl_Test_Wrappers.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-07-06/Telerik_RadControl_Test_Wrappers.aspx</comments>
      <guid isPermaLink="false">b250492c-5a80-4800-a546-0c768163aab8</guid>
      <pubDate>Mon, 06 Jul 2009 09:00:00 GMT</pubDate>
    </item>
    <item>
      <title>WebAii 2.0 Beta2 Released!</title>
      <description>&lt;div id="pageContainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p&gt;We are happy to announce the release of the highly anticipated WebAii Beta2 to the public. Beta2 contains lots of enhancements in terms of bug fixes and feature requests. Beta2 also contains some of the refactoring work that we have been working on for a while now. If you have not used WebAii 2.0 yet, check out the general feature set it contains &lt;a shape="rect" href="http://www.artoftest.com/community/blogs/09-03-25/WebAii_2_0_Beta_Released.aspx" shape="rect"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a shape="rect" href="http://www.artoftest.com/products/downloads.aspx" shape="rect"&gt;DOWNLOAD BETA2&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;(Make sure to uninstall beta1 before installing beta2)&lt;/p&gt; &lt;p&gt;As for Beta2, here are some of the highlights that are worth noting:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. Silverlight Automation&lt;/strong&gt;: We have spent a substantial amount of time to enhance and fix any issues reported by customers on the forums to make Silverlight automation experience as rich and seamless as possible including support for &lt;span style="text-decoration: underline"&gt;Silverlight 3&lt;/span&gt;. Here are some of the key advancements in Beta2:&lt;/p&gt; &lt;blockquote&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;No Proxy needed in IE:&lt;/strong&gt; When running Silverlight automation in Internet Explorer, we no longer require the HttpProxy to be set. So, no more issues with LocalHost, WCF web services or streaming media. Silverlight automation in IE should be seamless. You though still need the EnableSilverlight flag to be set in the settings. We are working on getting rid of this dependency for Firefox too. This enhancement should resolve many of the http proxy related issues that customers reported. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Performance Enhancements: &lt;/strong&gt;For complex automation and complex visual tree searches, you should see a considerable performance boost. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;InvokeMethod Support: &lt;/strong&gt;You can now invoke methods on Silverlight controls in addition to accessing their complex properties. For example:
    &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Invoke the ScrollToVerticalOffset method&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; searchScroll.InvokeMethod(&lt;span style="color: #006080"&gt;"ScrollToVerticalOffset"&lt;/span&gt;,2000);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Wait.For Support: &lt;/strong&gt;All FrameworkElement objects, now have a generic Wait.For that can take a predicate. This is a key piece in making test automation easier to synchronize with Silverlight animations. For example, you can wait on a Transform to finish or reach a certain point:
    &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// The Grid uses a TranslateTransform to hide/show the top bit&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; app.FindName&amp;lt;Grid&amp;gt;(&lt;span style="color: #006080"&gt;"navBarGrid"&lt;/span&gt;).Wait.For(&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt;     r =&amp;gt; (r.RenderTransform &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; TranslateTransform).Y == -50);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;/li&gt; &lt;li&gt;We also added a &lt;strong&gt;Wait.ForNoMotion()&lt;/strong&gt; call on the FrameworkElement that uses the element's position and waits until that element has stopped moving or resizing. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Find.ByType&amp;lt;T&amp;gt;(): &lt;/strong&gt;Added the Find.ByType&amp;lt;T&amp;gt;() which allows you to find the first occurrence of a specific type &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Silverlight 3 Support. &lt;/strong&gt;In case you already started using Silverlight 3! &lt;/li&gt; &lt;li&gt;Many other bug fixes: (Added AbsoluteSiblingTagIndex and AbsoluteTagIndex to FrameworkElement), IsChecked tri-state issue, Bitmap.UriSource access. Localization issue for GetRectangle(). &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;If you are new to Silverlight automation in WebAii we encourage you to take a look at the following blog posts that should introduce you to it:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a shape="rect" href="http://www.artoftest.com/community/blogs/09-05-11/Intro_to_Silverlight_Automation.aspx" shape="rect"&gt;Introduction to Silverlight Automation using WebAii&lt;/a&gt;. &lt;/li&gt; &lt;li&gt;&lt;a shape="rect" href="http://www.artoftest.com/community/blogs/09-05-14/Automating_Real_World_Silverlight_Apps.aspx" shape="rect"&gt;Automation Real World Silverlight Applications using WebAii.&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt; &lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ba5dba0f-9e3c-480d-8d20-290c2a4a9f3a" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; width: 705px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt; &lt;div&gt;&lt;embed width="425" height="355" src="http://www.youtube.com/v/rJWoEr4wlKQ&amp;amp;hl=en" type="application/x-shockwave-flash" /&gt;&lt;/div&gt; &lt;div style="clear: both; font-size: 0.8em"&gt;WebAii Silverlight Automation In Action&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Note: The above sample is now included in the QuickStart Samples that ship with the product.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. Safari 4 Support: &lt;/strong&gt;In addition to our existing Safari 3.x support on Windows, WebAii 2.0 Beta2 now supports Safari 4 on windows. We also worked on the Safari automation support to address the following issues:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Performance: &lt;/strong&gt;Safari automation should be faster in Beta2 than in Beta1. We made several optimizations in the synchronization code. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Frames Issues: &lt;/strong&gt;We no longer load the main page in our own frameset which means that we no longer mess with how a page's frameset is accessed within the application. There was at least one customer that reported issues with how their application accessed frames in Safari. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Reliability: &lt;/strong&gt;We made few enhancements in how we wait for the browser to be ready which was causing random timeouts in Beta1. &lt;/li&gt; &lt;/ol&gt; &lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7c044b4a-851c-4b4b-9ade-bbd2b670caf8" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt; &lt;div&gt;&lt;embed width="425" height="355" src="http://www.youtube.com/v/QTmaePCLXCo&amp;amp;hl=en" type="application/x-shockwave-flash" /&gt;&lt;/div&gt; &lt;div style="clear: both; font-size: 0.8em"&gt;WebAii running same test in IE, Firefox and Safari&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. MbUnit &amp;amp; XUnit Integration + Templates:  &lt;/strong&gt;If you use &lt;a shape="rect" href="http://www.mbunit.com/" shape="rect"&gt;MbUnit&lt;/a&gt; or &lt;a shape="rect" href="http://www.codeplex.com/xunit" shape="rect"&gt;xUnit&lt;/a&gt; as your unit testing framework,  we now have built-in templates that get installed for you to use. Right-Click, Add New Item and you should be able to pick from 4 installed templates (NUnit, VSUnit, MbUnit or XUnit). You now have no more excuses not to use WebAii :).&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_2.sflb" shape="rect"&gt;&lt;img width="644" height="394" width="644" height="394" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-image_thumb.sflb" border="0" complete="complete" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. Browser Recycling: &lt;/strong&gt;Although the ability to use the same browser instance across tests have been enabled in 1.1, we now made browser recycling very easy to setup within our templates. All the testing templates + our base test class have been updated for this. Using the latest templates you will notice an additional overload for the Initialize() method that takes in a boolean flag on whether you want recycling on or off. By default it is off. All you need to turn recycling on, is to set that flag to true, no more SharedManager Templates (We actually got rid of those templates).&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Pass in 'true' to recycle the browser between test methods&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Initialize(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.TestContext.TestLogsDir, &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; TestContextWriteLine(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.TestContext.WriteLine));&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt; &lt;h4&gt;BREAKING CHANGES IN BETA2&lt;/h4&gt; &lt;p&gt;With Beta2, we had to make few breaking changes as we refactored some of our namespaces. Here are the key breaking changes that customers might hit. &lt;/p&gt; &lt;ol&gt; &lt;li&gt;In addition to the &lt;strong&gt;ArtOfTest.WebAii.dll&lt;/strong&gt;, you also now need to reference the &lt;strong&gt;ArtOfTest.Common.dll. &lt;/strong&gt;Both dlls should be available in the Bin\ folder under ArtOfTest or from the Add-References / .NET tab &lt;/li&gt; &lt;li&gt; &lt;strong&gt;BaseNUnitTestSharedManager&lt;/strong&gt; &amp;amp; &lt;strong&gt;BaseVsUnitTestSharedManager&lt;/strong&gt; base classes are gone. These classes are no longer needed. We are unifying our base classes into one single base class for all frameworks and scenarios. Simply replace these classes wit the new BaseTest class that exists under TestTemplates and make sure to use the new Initialize() method for browser recycling as described in #4 above. The templates associated with these two classes are also removed. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Wait.For()&lt;/strong&gt; class has been refactored to simplify the overloads, leverage generics and make it consistent. No more ElementCondition or ControlCondition delegates are needed. The Wait.For&amp;lt;&amp;gt;() now can take a predicate or a function with two parameters. So you can pass in a control and other properties that you want to check or wait for. Example: &lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; Wait.For&amp;lt;HtmlTable&amp;gt;(&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt;          table =&amp;gt; table.BaseElement.GetAttributeValueOrEmpty(&lt;span style="color: #006080"&gt;"align"&lt;/span&gt;) != &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty,&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt;          myTableInstance,&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;, 5000);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;IN OTHER NEWS:&lt;/h4&gt; &lt;p&gt;Keep an eye on our partners (&lt;a shape="rect" href="http://www.telerik.com/products/web-ui-test-studio.aspx" shape="rect"&gt;Telerik&lt;/a&gt;) Q2 release. There is some exciting work done on top of WebAii framework that they are going to release sometime this week. For both their &lt;a shape="rect" href="http://www.telerik.com/products/silverlight.aspx" shape="rect"&gt;Silverlight&lt;/a&gt; and &lt;a shape="rect" href="http://www.telerik.com/products/aspnet-ajax.aspx" shape="rect"&gt;Ajax&lt;/a&gt; RadControls. Once they release, we will dedicate some blog posts to describe how you can achieve the level of productivity they have achieved for their RadControls for your own testing projects! &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Also as a reminder, make sure to sign-up for the &lt;strong&gt;FREE&lt;/strong&gt; &lt;a shape="rect" href="http://www.artoftest.com/community/blogs/09-05-26/Free_Webinar_July_1st.aspx" shape="rect"&gt;Webinar&lt;/a&gt; conducted by our consulting partners &lt;a shape="rect" href="http://www.falafel.com/" shape="rect"&gt;Falafel&lt;/a&gt;, Inc. The webinar will be using our latest WebAii 2.0 Beta2!&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Thanks for all the feedback and support! Keep the feedback coming and let us know what you think of our Beta2 release!&lt;/p&gt; &lt;p&gt;ArtOfTest, Inc. Team.&lt;/p&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-06-29/WebAii_2_0_Beta2_Released.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-06-29/WebAii_2_0_Beta2_Released.aspx</comments>
      <guid isPermaLink="false">56ca7adc-d075-4431-be6f-6a0a762411d4</guid>
      <pubDate>Mon, 29 Jun 2009 11:18:00 GMT</pubDate>
    </item>
    <item>
      <title>Free Webinar July 1st</title>
      <description>&lt;div id="pageContainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p&gt;Our friends at Falafel, Inc. are conducting a new Webinar on July 1st. &lt;span style="text-decoration: underline"&gt;This time the Webinar is &lt;strong&gt;FREE&lt;/strong&gt;!!&lt;/span&gt;&lt;/p&gt; &lt;h3&gt;Click on &lt;a shape="rect" href="https://www2.gotomeeting.com/register/830223259" shape="rect"&gt;this&lt;/a&gt; link to register today!&lt;/h3&gt; &lt;table width="400" border="0" cellspacing="0" cellpadding="2"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td width="200" valign="top"&gt;&lt;a shape="rect" href="https://www2.gotomeeting.com/register/830223259" shape="rect"&gt;&lt;img width="164" height="312" width="164" height="312" title="promo_webinar052609" style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" alt="promo_webinar052609" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-FreeWebinarJuly1st_999B-promo_webinar052609_3.sflb" border="0" complete="complete" complete="complete" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td width="200" valign="top"&gt; &lt;p&gt;Topics for this Webinar include:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Browser Support &lt;/li&gt; &lt;li&gt;Test Regions &lt;/li&gt; &lt;li&gt;Silverlight automation &lt;/li&gt; &lt;li&gt;Ajax Testing &lt;/li&gt; &lt;li&gt;Best practices&lt;/li&gt; &lt;/ol&gt; &lt;p&gt; &lt;/p&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;These topics touch on areas of the product that we know customers are very interested in and we feel will be of great help to anyone doing test automation using WebAii or Design Canvas. Whether you are just starting or are an advanced user, this webinar will be of added value to you. We encourage everyone to attend! If you are interested, please sign-up soon before we run out of seats.&lt;/p&gt; &lt;p&gt;ArtOfTest Team&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-05-26/Free_Webinar_July_1st.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-05-26/Free_Webinar_July_1st.aspx</comments>
      <guid isPermaLink="false">336d724b-c4fb-41c5-928e-2fa3abfb6a6b</guid>
      <pubDate>Tue, 26 May 2009 11:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Automating Real World Silverlight Apps.</title>
      <description>&lt;div id="pageContainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p&gt;As promised I will dedicate this post to talk more about Silverlight automation using WebAii in more depth. To help illustrate the power of WebAii, I decided to pick a real world application rather than a "Hello World"/"Calculator" type of application. This will hopefully make this post more relevant to what testers might face as more application developers adopt Silverlight. &lt;/p&gt; &lt;p&gt;The application I chose is a Health Care application built by Microsoft's Health Common User Interface (CUI). The application is live and can be viewed &lt;a shape="rect" href="http://www.mscui.net/PatientJourneyDemonstrator/PrimaryCareAdmin.htm" shape="rect"&gt;here&lt;/a&gt;. The application shows off the capabilities of Silverlight and gives us a glimpse into what we might expect from the next generation of web applications built using Silverlight.  &lt;/p&gt; &lt;p&gt;Let's start by dissecting some aspects of that application that a tester might be interested in testing. I will then demonstrate how some of these areas can be automated using WebAii. &lt;/p&gt; &lt;p&gt;As a tester I might be interested in testing the following areas of the application: &lt;/p&gt; &lt;p&gt;&lt;em&gt;Note: I picked these areas for the purpose of this post. It does not mean only these areas need to be tested for such an application. The goal for this post is to demonstrate WebAii's capabilities rather than actually fully testing this application.  &lt;/em&gt;&lt;/p&gt; &lt;p&gt;1. Test the Guidance UI. [Show/Hide Guidance] and validate its data:&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_2_2.sflb" shape="rect"&gt;&lt;img width="644" height="366" width="644" height="366" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_thumb_2.sflb" border="0" complete="complete" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;2. Validate the search functionality of the application&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_4_1.sflb" shape="rect"&gt;&lt;img width="644" height="366" width="644" height="366" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_thumb_1_1.sflb" border="0" complete="complete" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;3. Test the data zoom-in/zoom-out of the search results&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_6_1.sflb" shape="rect"&gt;&lt;img width="644" height="363" width="644" height="363" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_thumb_2_1.sflb" border="0" complete="complete" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;UI manipulation/positioning which will include:&lt;/p&gt; &lt;p&gt;4. Scrolling - Manipulate &lt;a shape="rect" href="http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer(VS.95).aspx" shape="rect"&gt;ScrollViewers&lt;/a&gt; and querying scroll positions.&lt;/p&gt; &lt;p&gt;5. Drag/Drop of UI elements and re-positioning them + validation.&lt;/p&gt; &lt;p&gt;6. Sync tests with UI elements in motion.&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_8_1.sflb" shape="rect"&gt;&lt;img width="644" height="359" width="644" height="359" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-AutomatingRealWorldSilverlightApp_E332-image_thumb_3_1.sflb" border="0" complete="complete" complete="complete" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now that we have a better idea of what we plan to test, let's build some automation.&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt; &lt;em&gt;Note: If you are new to WebAii's Silverlight automation, I encourage you to read our &lt;a shape="rect" href="http://www.artoftest.com/community/blogs/09-05-11/Intro_to_Silverlight_Automation.aspx" shape="rect"&gt;last blog post&lt;/a&gt; which introduces you to it using a simple application.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Also, some of the feature we are using are not in the current 2.0 beta. We plan to publish a Beta2 for 2.0 soon which will include everything we will show in this post.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline"&gt;Initialization&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;All our tests need to do the same initialization: Launch a browser, navigate to the page and initialize an instance of SilverlightApp object. &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Launch browser&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Manager.LaunchNewBrowser(BrowserType.InternetExplorer);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Navigate to our app&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; ActiveBrowser.NavigateTo(&lt;span style="color: #006080"&gt;"http://www.mscui.net/PatientJourneyDemonstrator/PrimaryCareAdmin.htm"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Get an instance of the running Silverlight Application.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; SilverlightApp app = ActiveBrowser.SilverlightApps()[0];&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;strong&gt;Task #1: Validate that clicking on the "Show Guide" button shows the guide and validate that it shows 15 guidance tooltips. Click the button again, and validate that it hides the guide.&lt;/strong&gt;&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Verify Show/Hide of the Guide works&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Click the ShowGuide button.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; app.FindName(&lt;span style="color: #006080"&gt;"guideButton"&lt;/span&gt;).User.Click();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Wait for the guidance to be fully visible.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #008000"&gt;// In this application they use the Opacity of the&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #008000"&gt;// "GuidanceCanvas" to show/hide the guidance.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; Canvas guidanceCanvas = app.FindName&amp;lt;Canvas&amp;gt;(&lt;span style="color: #006080"&gt;"GuidanceCanvas"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; guidanceCanvas.Wait.For(canvas =&amp;gt; canvas.Opacity == 1);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt; guidanceCanvas.Refresh();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Make sure we got the correct # of guidance popups&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; &lt;span style="color: #008000"&gt;// The application pops 15 overlays on top&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt; IList&amp;lt;FrameworkElement&amp;gt; guidanceOverlays = guidanceCanvas.Find.AllByType(&lt;span style="color: #006080"&gt;"GuidanceOverlay"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt; Assert.IsTrue(guidanceOverlays.Count == 15);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum22" style="color: #606060"&gt; 22:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum23" style="color: #606060"&gt; 23:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Now hide the guidance&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum24" style="color: #606060"&gt; 24:&lt;/span&gt; app.FindName(&lt;span style="color: #006080"&gt;"guideButton"&lt;/span&gt;).User.Click();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum25" style="color: #606060"&gt; 25:&lt;/span&gt; guidanceCanvas.Wait.For(canvas =&amp;gt; canvas.Opacity == 0);&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;h5&gt;&lt;strong&gt;Notes&lt;/strong&gt;:&lt;/h5&gt; &lt;ol&gt; &lt;li&gt;Line #14: The Framework.Wait.For() is a great utility that allows you to wait on any property on the FrameworkElement object. &lt;/li&gt; &lt;li&gt;Line #20: Scoped searches. Every FrameworkElement, has a Find object associated with it an is scope to only search within that element's children in the Visual Tree. This can help you avoid any name conflicts (Which is very common in these rich applications) and makes your test automation much less prone to breaking and much easier to debug for failures. &lt;/li&gt; &lt;li&gt;Line #21, you can perform more verification for each popup in the guidanceOverlays list. You can verify the text, size or any other information. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Task #2:  Perform a search to test the search functionality. Input text in the search box, validate the number of search results you expect.&lt;/strong&gt;&lt;/strong&gt; &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Let's test the search functionality&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;// &lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; app.VisualTree.Refresh();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Find the Patient Search TextBox&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; TextBox searchText = app.FindName&amp;lt;TextBox&amp;gt;(&lt;span style="color: #006080"&gt;"searchText"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Move the mouse over the search box until we have an IBeam.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; searchText.User.DetectHotSpot(100, System.Windows.Forms.Cursors.IBeam);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Make sure the navigation bar is hidden before trying to type.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Currently it hides half the text box. &lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt; &lt;span style="color: #008000"&gt;// The Grid uses a TranslateTransform to hide/shotthe top bit&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt; app.FindName&amp;lt;Grid&amp;gt;(&lt;span style="color: #006080"&gt;"navBarGrid"&lt;/span&gt;).Wait.For(&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt;     r =&amp;gt; (r.RenderTransform &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; TranslateTransform).Y == -50);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Now we can start typing.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt; searchText.User.TypeText(&lt;span style="color: #006080"&gt;"A"&lt;/span&gt;, 100);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;h5&gt;&lt;strong&gt;Notes&lt;/strong&gt;:&lt;/h5&gt; &lt;ol&gt; &lt;li&gt; &lt;p&gt;Line #11: Not how we are able to move the mouse to the location exactly just like they user. The &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/M_ArtOfTest_WebAii_Silverlight_UserInteraction_DetectHotSpot_1.htm" shape="rect"&gt;DetectHotSpot&lt;/a&gt; function allows you to search a certain radius from the center point of the FrameworkElement in a spiral motion until a certain hot spot is detected. A hot spot is detected when the mouse cursor changes from its current state or when the defined state by the function is detected. In this case we want to detect the IBeam cursor for the TextBox. Other application for this could be a certain resize handle for a window or a dynamic Thumb that you want to lock on and you can't easily find using absolute or even relative X/Y coordinates.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;Line #17: This is very powerful. Given that we have access to even complex properties of the FrameworkElement, we are able to perform wait on things like RenderTransform objects. In this case we are waiting for the "TranslateTransform" for this element to move -50 in Y direction. This is very important when trying to sync your tests with certain animation points of the application.&lt;/p&gt; &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Now that we have typed "A" in the search box. Let's validate the list of search results: &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;/// Validate the search results.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Get the search lists. &lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; ItemsControl searchList = app.FindName&amp;lt;ItemsControl&amp;gt;(&lt;span style="color: #006080"&gt;"patientSearchList"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Get the number of results in the search. &lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #008000"&gt;// &lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #008000"&gt;// OBSERVER: WebAii can search custom types too not available&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #008000"&gt;// in ArtOfTest.WebAii.Silverlight.UI namespace. All the Find.xx methods have a non-generic&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #008000"&gt;// overload too that takes in a control type name.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; IList&amp;lt;FrameworkElement&amp;gt; foundPatients = &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;     searchList.Find.AllByType(&lt;span style="color: #006080"&gt;"patientsearchitem"&lt;/span&gt;).Where(&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt;     fx =&amp;gt; fx.Visibility == Visibility.Visible).ToList();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Validate the search&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; Assert.IsTrue(foundPatients.Count == 95);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;h5&gt; &lt;strong&gt;Notes&lt;/strong&gt;: &lt;/h5&gt; &lt;ol&gt; &lt;li&gt;Line #14. The health care application we are using utilizes some custom controls not defined in our Silverlight.UI namespace. All our Find.By/Find.AllBy routines have a none generic companion method for every generic method which allows users to also perform searches against certain control types. In this case, we are searching for the "patientsearchitem" control. &lt;/li&gt; &lt;li&gt;Line #19: Again, you can look through each item in the "foundPatients" list and validate more data about each found patient. We will actually demonstrate some of how to do that in our next part. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Task #3: With the search results open, validate that details zoom-in/zoom-out shows more/less data about each patient.&lt;/strong&gt; &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;/// Verify the zoom in/zoom out functionality.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;///&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; FrameworkElement zoomBox = app.FindName(&lt;span style="color: #006080"&gt;"zoomBox"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Inside of it, find the plus part&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt; Button plusButton = zoomBox.Find.ByName&amp;lt;Button&amp;gt;(&lt;span style="color: #006080"&gt;"~PlusButton"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Let's grab one of the patients to verify the zoom functionality on.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; FrameworkElement patientSearchItem = foundPatients.First();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; FrameworkElement patientAddress = patientSearchItem.Find.ByName(&lt;span style="color: #006080"&gt;"Address"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; FrameworkElement patientContactIcons = patientSearchItem.Find.ByName(&lt;span style="color: #006080"&gt;"ContactDetailsIcons"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; FrameworkElement patientAdditionalInfo = patientSearchItem.Find.ByName(&lt;span style="color: #006080"&gt;"ContactDetailsIcons"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Level 0 - Address &amp;amp; ContactDetails are not visible&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt; Assert.IsTrue(patientAddress.Visibility == Visibility.Collapsed);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt; Assert.IsTrue(patientContactIcons.Visibility == Visibility.Collapsed);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; Assert.IsTrue(patientAdditionalInfo.Visibility == Visibility.Collapsed);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Zoom level #1&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum22" style="color: #606060"&gt; 22:&lt;/span&gt; plusButton.User.Click();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum23" style="color: #606060"&gt; 23:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum24" style="color: #606060"&gt; 24:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Level 0 - Address &amp;amp; ContactDetails is visible. Additional info is not visible.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum25" style="color: #606060"&gt; 25:&lt;/span&gt; Assert.IsTrue(patientAddress.Visibility == Visibility.Visible);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum26" style="color: #606060"&gt; 26:&lt;/span&gt; Assert.IsTrue(patientContactIcons.Visibility == Visibility.Visible);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum27" style="color: #606060"&gt; 27:&lt;/span&gt; Assert.IsTrue(patientAdditionalInfo.Visibility == Visibility.Collapsed);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum28" style="color: #606060"&gt; 28:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum29" style="color: #606060"&gt; 29:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Zoom level #2&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum30" style="color: #606060"&gt; 30:&lt;/span&gt; plusButton.User.Click();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum31" style="color: #606060"&gt; 31:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum32" style="color: #606060"&gt; 32:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Level 0 - Address + additional info is visible only.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum33" style="color: #606060"&gt; 33:&lt;/span&gt; Assert.IsTrue(patientAddress.Visibility == Visibility.Visible);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum34" style="color: #606060"&gt; 34:&lt;/span&gt; Assert.IsTrue(patientContactIcons.Visibility == Visibility.Collapsed);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum35" style="color: #606060"&gt; 35:&lt;/span&gt; Assert.IsTrue(patientAdditionalInfo.Visibility == Visibility.Visible);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;h5&gt;&lt;strong&gt;Notes:&lt;/strong&gt; &lt;/h5&gt; &lt;p&gt;In this scenario here we opted to simply use FrameworkElement and not any strongly typed object since most of our validations are against the Visibility property which is on the base FrameworkElement.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Task #4. Scroll a certain container and validate the scroll position.&lt;/strong&gt;&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Scroll the search results&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Find the scroll viewer&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; ScrollViewer searchScroll = app.FindName(&lt;span style="color: #006080"&gt;"patientSearchScroller"&lt;/span&gt;).Find.ByType&amp;lt;ScrollViewer&amp;gt;();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; AutomationMethod scrollVert = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AutomationMethod(&lt;span style="color: #006080"&gt;"ScrollToVerticalOffset"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; searchScroll.Invoke(scrollVert, 2000);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Assert scrolling position.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; Assert.IsTrue(searchScroll.VerticalOffset == 2000);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Close search results&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt; app.FindName(&lt;span style="color: #006080"&gt;"clearSearch"&lt;/span&gt;).User.Click();&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;h5&gt;Notes:&lt;/h5&gt; &lt;p&gt;This scenario is more to demonstrate how you can manipulate scrolling/scrollviewers with WebAii.&lt;/p&gt; &lt;p&gt;Line #8: Note how we are able to invoke any method + params on any object. If you have custom control, you can easily use this methodology to invoke any method on them you might have defined.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Task #5: Perform UI element drag/drop and validate the correct positioning after the moves.&lt;/strong&gt;&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Re-arrange admins UI&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; Grid adminsPanels = app.FindName&amp;lt;Grid&amp;gt;(&lt;span style="color: #006080"&gt;"adminPanels"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; IList&amp;lt;FrameworkElement&amp;gt; admins = adminsPanels.Find.AllByName(&lt;span style="color: #006080"&gt;"~adminDockPanel"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; FrameworkElement admin1 = admins.Where(adm =&amp;gt; adm.Name.Equals(&lt;span style="color: #006080"&gt;"adminDockPanel1"&lt;/span&gt;)).First();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; FrameworkElement admin2 = admins.Where(adm =&amp;gt; adm.Name.Equals(&lt;span style="color: #006080"&gt;"adminDockPanel2"&lt;/span&gt;)).First();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; FrameworkElement admin3 = admins.Where(adm =&amp;gt; adm.Name.Equals(&lt;span style="color: #006080"&gt;"adminDockPanel3"&lt;/span&gt;)).First();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Get locations before the move&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; System.Drawing.Rectangle admin1Loc = admin1.GetScreenRectangle();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; System.Drawing.Rectangle admin2Loc = admin2.GetScreenRectangle();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt; System.Drawing.Rectangle admin3Loc = admin3.GetScreenRectangle();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Now perform the drag/drop&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt; admin1.Find.ByType(&lt;span style="color: #006080"&gt;"Thumb"&lt;/span&gt;).User.DragTo(admin2.Find.ByType(&lt;span style="color: #006080"&gt;"Thumb"&lt;/span&gt;));&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; admin2.Find.ByType(&lt;span style="color: #006080"&gt;"Thumb"&lt;/span&gt;).User.DragTo(admin3.Find.ByType(&lt;span style="color: #006080"&gt;"Thumb"&lt;/span&gt;));&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Validate the new locations.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum22" style="color: #606060"&gt; 22:&lt;/span&gt; adminsPanels.Refresh();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum23" style="color: #606060"&gt; 23:&lt;/span&gt; adminsPanels.Find.ByName(admin1.Name).GetScreenRectangle().Equals(admin1Loc);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;h5&gt;Notes:&lt;/h5&gt; &lt;p&gt;Line #18: We basically find the "Thumb" object inside the admin1 UI and move it to the center point in the admin2 UI. the User.DragTo() method by default will calculate the center point of the FrameworkElement it is on and perform a drag and drop to the center point of the FrameworkElement passed in. &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/M_ArtOfTest_WebAii_Silverlight_UserInteraction_DragTo_3.htm" shape="rect"&gt;DragTo&lt;/a&gt; also supports other overloads that can be used to do offset dropping.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Task #6: Perform a UI action that triggers some animation and wait until the animation is complete&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We kind of touched on this in Task #2 where we used the Framework.Wait.For() to wait on a certain property of the element including its RenderTransform but I wanted to also demonstrate another feature that customers can use to detect when animation is complete.&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'courier new', courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px"&gt; &lt;div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Expand Admin1 information&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; admin1.Find.ByName(&lt;span style="color: #006080"&gt;"maximiseButton"&lt;/span&gt;).User.Click();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'courier new', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; admin1.Wait.ForNoMotion(100); // Wait until the animation &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; complete.&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;h5&gt;Notes:&lt;/h5&gt; &lt;p&gt;Line #6 : Some customers might find this useful. The Wait.ForNoMotion() allows you to wait until a certain framework element is fixed. Meaning its location within the application is no longer changing. You can customize the period to use to deem a certain element if done moving. This function is very handy when you are trying to sync your test with a certain animation if you don't want to mess with RenderTransforms.&lt;/p&gt; &lt;p&gt;That's about it. I do hope this example was useful in helping you perform some of the automation tasks that you might be faced with in Silverlight.&lt;/p&gt; &lt;p&gt;If there are specific topics you would like to see covered in future blog posts, feel free to email us at contact _at_ artoftest.com or write us a tweet at &lt;a shape="rect" href="http://twitter.com/artoftest" title="http://twitter.com/artoftest" shape="rect"&gt;http://twitter.com/artoftest&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Here is a &lt;a shape="rect" href="http://www.artoftest.com/Samples/Silverlight%20Automation/Silverlight%20Automation.html" shape="rect"&gt;recorded demo&lt;/a&gt; of this test in action. We will post the code of this test as part of the release of WebAii Beta2.&lt;/p&gt; &lt;p&gt;Enjoy&lt;/p&gt; &lt;p&gt;ArtOfTest, Inc.&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-05-14/Automating_Real_World_Silverlight_Apps.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-05-14/Automating_Real_World_Silverlight_Apps.aspx</comments>
      <guid isPermaLink="false">2de407f3-4330-4669-8575-58cf59e7c9a2</guid>
      <pubDate>Thu, 14 May 2009 13:44:00 GMT</pubDate>
    </item>
    <item>
      <title>Intro to Silverlight Automation</title>
      <description>&lt;div id="pagecontainer" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; padding-top: 0px"&gt; &lt;p&gt;Silverlight automation has been our main focus since the release of Automation Design Canvas 1.1 earlier this year. Lots of customers ask us when Design Canvas will support Silverlight recording and I want to assure everyone that we are actively working on it. It is our #1 priority here at ArtOfTest. We do hope to preview our recording for Silverlight (which I'm sure is going to impress many) soon. Silverlight recording will be part of Automation Design Canvas 2.0 when its released.&lt;/p&gt; &lt;p&gt;As for this blog post, I'm going to dedicate it to talk more about WebAii 2.0 framework and its impressive support for automating Silverlight applications. WebAii 2.0 is going to be the framework on top of which Automation Design Canvas 2.0 and Silverlight recording/execution will be built. &lt;/p&gt; &lt;p&gt;In this post, I would like to discuss the following: &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Why WebAii 2.0 sticks out as the clear choice when looking for Silverlight automation solutions. &lt;/li&gt; &lt;li&gt;Go over a simple example that is geared towards users that are new or just getting started. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Next post I will go over:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Talk a bit about some of the rich and advanced features for Silverlight automation in WebAii 2.0. &lt;/li&gt; &lt;li&gt;Demonstrate a more complex automation scenario that shows-off some of these advanced capabilities. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;So, let's get started....&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Why choose WebAii for Silverlight automation?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Well, there are tons of reasons why. I'm going to try to summarize them in the following points.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;WebAii &lt;strong&gt;plugs-in directly&lt;/strong&gt; into Silverlight applications it automates. It has access to every single element/object in the entire Silverlight application. This allows us to expose a rich feature set with very little limitations. &lt;/li&gt; &lt;li&gt;WebAii is &lt;strong&gt;NOT limited to what&lt;/strong&gt; &lt;strong&gt;UIAutomation&lt;/strong&gt; &lt;strong&gt;interfaces&lt;/strong&gt; expose on each object. Beside the ability to perform basic automation actions like clicking, moving and setting text, WebAii gives you access to all properties including &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/P_ArtOfTest_WebAii_Silverlight_UI_Button_BorderBrush.htm" shape="rect"&gt;complex&lt;/a&gt; properties on UI elements such as brushes, borders and even transform matrices..etc. It allows you to get and set most of these properties which is very critical when it comes to test verifications and test synchronizations. For example, you can wait until a certain animation in Silverlight has changed a certain brush to a certain color. &lt;/li&gt; &lt;li&gt;WebAii has a &lt;strong&gt;complete UI object model&lt;/strong&gt; under &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/N_ArtOfTest_WebAii_Silverlight_UI.htm" shape="rect"&gt;ArtOfTest.WebAii.Silverlight.UI&lt;/a&gt; namespace that mimics the complete list of UI XAML elements that Silverlight ships with including the extended controls that ship with Silverlight. This allows you to access everything in your application as if you are sitting inside the Silverlight application and using the same object model. &lt;/li&gt; &lt;li&gt;WebAii comes with an &lt;strong&gt;extensibility model&lt;/strong&gt; that allows you to extend its current support. You want to access a custom property on a custom control? No problem, with few lines of code, you can achieve that. The best part is that the application being tested (the production application) does not need to be touched at all. There are no extra UIAutomation interfaces to implement or objects to add. Less code churn is always a good thing especially for production applications. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;A one stop shop for everything Web&lt;/strong&gt;. WebAii 2.0 includes rich support for Html/Ajax automation along side Silverlight automation: One framework and one consistent API that allows you to automate all your web application needs regardless of the technology you are using! &lt;/li&gt; &lt;li&gt;WebAii enables &lt;strong&gt;real user simulation&lt;/strong&gt; with the User.&amp;lt;&lt;em&gt;action&amp;gt;&lt;/em&gt; methods in addition to direct API access. These methods move the mouse just like the user, type just like the user and even offer &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/M_ArtOfTest_WebAii_Silverlight_UserInteraction_DetectHotSpot.htm" shape="rect"&gt;hotspot detection&lt;/a&gt; just like a user would do. This real user simulation is critical when rich UI scenarios are needed for automation like hover overs, drags..etc. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Getting Started with a simple example&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;First, make sure to download and install WebAii 2.0 Beta from our website here: &lt;a shape="rect" href="http://www.artoftest.com/products/downloads.aspx" shape="rect"&gt;http://www.artoftest.com/products/downloads.aspx&lt;/a&gt;. If you already have WebAii 1.1 or Automation Design Canvas 1.1 on your machine, no worries. WebAii 2.0 runs Side by Side with 1.1. &lt;span style="text-decoration: underline"&gt;There is only one known issue currently using Firefox. You need to disable the 1.1 extension in Firefox's add-on dialog (Tools-&amp;gt;Add-ons) to allow the 2.0 extension to work. You can later on re-enable it when you want to switch back to 1.1.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Now that you have the framework installed, you will notice that it comes with a sample VS Solution that contains several samples that demos the &lt;a shape="rect" href="http://www.artoftest.com/community/blogs/09-03-25/WebAii_2_0_Beta_Released.aspx" shape="rect"&gt;2.0 feature&lt;/a&gt; set including a Silverlight sample test. The installer should have placed a short-cut in your start menu. Click &lt;span style="text-decoration: underline"&gt;Start-&amp;gt;All Programs-&amp;gt;ArtOfTest Inc.-&amp;gt;WebAii 2.0 Beta&lt;/span&gt; and then click on "Open WebAii 2." which should launch Visual Studio and load the sample solution. &lt;/p&gt; &lt;p&gt;The sample Silverlight test simply automates a simple application located &lt;a shape="rect" href="http://www.artoftest.com/Samples/SampleApplication.html" shape="rect"&gt;here&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-WebAiiSilverlightAutomation_B011-image_6.sflb" shape="rect"&gt;&lt;img width="449" height="390" title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" alt="image" src="http://www.artoftest.com/Libraries/MetaBlogLib/WindowsLiveWriter-WebAiiSilverlightAutomation_B011-image_thumb_2.sflb" border="0" complete="complete" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="text-decoration: underline"&gt;The test basically performs the following actions:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;1. Launch the browser and Navigate to the URL above.&lt;/p&gt; &lt;p&gt;2. Connect to the Silverlight application on that page.&lt;/p&gt; &lt;p&gt;3. Set the text in the textbox to: ArtOfTest.&lt;/p&gt; &lt;p&gt;4. Select a date.&lt;/p&gt; &lt;p&gt;5. Click the 'OK' button.&lt;/p&gt; &lt;p&gt;6. Validate the message "Hi ArtOfTest".&lt;/p&gt; &lt;p&gt; &lt;span style="text-decoration: underline"&gt;So let's automate the above scenario using WebAii.&lt;/span&gt;&lt;/p&gt; &lt;h5&gt;1. Launch a new browser instance and navigate to the URL above. This is basic WebAii stuff.&lt;/h5&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Launch a new browser instance.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Manager.LaunchNewBrowser();&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt;  &lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Navigate to the page.&lt;/span&gt;&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; ActiveBrowser.NavigateTo(&lt;span style="color: #006080"&gt;"http://www.artoftest.com/samples/SampleApplication.html"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;h5&gt;2.  Connect to the Silverlight application on the page.&lt;/h5&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; SilverlightApp app = ActiveBrowser.SilverlightApps()[0];&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Assert.IsNotNull(app);&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Few things to note here:&lt;/p&gt; &lt;p&gt;a. As soon as you include the &lt;span style="color: #0080ff"&gt;&lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/N_ArtOfTest_WebAii_Silverlight.htm" shape="rect"&gt;ArtOfTest.WebAii.Silverlight&lt;/a&gt;&lt;/span&gt; namespace. An extension method "&lt;span style="color: #000000"&gt;&lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/T_ArtOfTest_WebAii_Silverlight_SilverlightAppsList.htm" shape="rect"&gt;SilverlightApps&lt;/a&gt;&lt;/span&gt;" is added to the Browser object. This method allows you to access all Silverlight applications on the page.&lt;/p&gt; &lt;p&gt;b. WebAii allows you to access and automate any of your Silverlight apps/islands that are on your page simultaneously. &lt;/p&gt; &lt;p&gt;c. The accessor on the &lt;span style="color: #0080ff"&gt;SilverlightApps&lt;/span&gt; collection method, internally calls &lt;span style="text-decoration: underline"&gt;SilverlightApp.Connect&lt;/span&gt; which basically activates a connection between that SilverlightApp instance and the live instance in your browser. &lt;/p&gt; &lt;p&gt;At this point we have access to all of the UI element in the Silverlight application. &lt;/p&gt; &lt;h5&gt;3. Set the text for the Name to ArtOfTest.&lt;/h5&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; TextBox name1 = app.Find.ByName&amp;lt;TextBox&amp;gt;(&lt;span style="color: #006080"&gt;"name1"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Assert.IsNotNull(name1);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; name1.Text = &lt;span style="color: #006080"&gt;"ArtOfTest"&lt;/span&gt;;&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;As you can see, this is where the power of WebAii starts to show. You will notice that there is a &lt;strong&gt;"&lt;/strong&gt;&lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/T_ArtOfTest_WebAii_Silverlight_VisualFind.htm" shape="rect"&gt;Find&lt;/a&gt;&lt;strong&gt;"&lt;/strong&gt; object  on the app that supports all the common ways customers might want to find an element inside the Silverlight application. In this case we are using the &lt;span style="color: #0080ff"&gt;&lt;em&gt;Find.ByName&lt;/em&gt;&lt;/span&gt;. Other supported search routines include&lt;em&gt;: &lt;/em&gt;&lt;span style="color: #0080ff"&gt;&lt;em&gt;Find.ByText&lt;/em&gt;, &lt;em&gt;Find.ByAutomationId&lt;/em&gt;, &lt;em&gt;Find.ByType&lt;/em&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;The object returned from the Find call is a strongly-typed &lt;span style="color: #877400"&gt;&lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/html/T_ArtOfTest_WebAii_Silverlight_UI_TextBox.htm" shape="rect"&gt;TextBox object&lt;/a&gt; &lt;/span&gt;that resembles the &lt;a shape="rect" href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx" shape="rect"&gt;System.Windows.Controls.TextBox&lt;/a&gt; object in Silverlight. It contains a similar object model which enables you to manipulate it directly. For example, line three above sets the text to "ArtOfTest". &lt;/p&gt; &lt;h5&gt;4. Select a date from the calendar.&lt;/h5&gt; &lt;p&gt;You might think that this is going to be a pretty complex operation to implement. But it is not given the fact that WebAii supports all the native rich controls that come out of the box with Silverlight. Here is the code to select a date:&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; Calendar cal1 = app.Find.ByName&amp;lt;Calendar&amp;gt;(&lt;span style="color: #006080"&gt;"cal1"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Assert.IsNotNull(cal1);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; cal1.SelectedDate = DateTime.Now;&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;That is it. Using the rich object model provided you are able to access a strongly-typed Calendar object and set the date on it. The code is concise, intuitive and easy to read. &lt;/p&gt; &lt;h5&gt;5. Click the OK button.&lt;/h5&gt; &lt;p&gt;Again, this is pretty simply. &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; Button ok = app.Find.ByName&amp;lt;Button&amp;gt;(&lt;span style="color: #006080"&gt;"okButton"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Assert.IsNotNull(ok);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; ok.User.Click();&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Note, here the "User.Click()". When using any method off the User.xx class, you are really simulating real user interaction with the application. Inside that call, WebAii has determined exactly where the center of that button is on the screen, moved the mouse to it and clicked the button. &lt;/p&gt; &lt;h5&gt;6. Now, let's validate that the button was clicked and that the text is exactly how we want it.&lt;/h5&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; TextBlock message1 = app.Find.ByName&amp;lt;TextBlock&amp;gt;(&lt;span style="color: #006080"&gt;"message1"&lt;/span&gt;);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; Assert.IsNotNull(message1);&lt;/pre&gt; &lt;!--CRLF--&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; Assert.IsTrue(message1.Text.StartsWith(&lt;span style="color: #006080"&gt;"Hi ArtOfTest"&lt;/span&gt;));&lt;/pre&gt; &lt;!--CRLF--&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Again, we are using the strongly typed objects of WebAii to help us easily craft and build test automation.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As you can see, lots of thought and innovation went into the design of Silverlight automation to make it as simple to use but also as rich as possible. What we discussed above is simply the tip of the iceberg. In the next blog, we will go over some of the more advanced scenarios in Silverlight that really show-off the power of the framework we have built! The best part of all this, It is &lt;strong&gt;FREE&lt;/strong&gt;!!&lt;/p&gt; &lt;p&gt;Our preliminary documentation for WebAii 2.0 Beta can be found &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/topicsindex.aspx" shape="rect"&gt;here&lt;/a&gt;, including its &lt;a shape="rect" href="http://www.artoftest.com/support/webaii/WebAii_2.0_API/Index.aspx" shape="rect"&gt;API Reference&lt;/a&gt;&lt;/p&gt; &lt;p&gt;ArtOfTest, Inc. Team.&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-05-11/Intro_to_Silverlight_Automation.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-05-11/Intro_to_Silverlight_Automation.aspx</comments>
      <guid isPermaLink="false">6b7651c8-b1f7-40b1-bfab-8c3a3101e016</guid>
      <pubDate>Mon, 11 May 2009 12:00:00 GMT</pubDate>
    </item>
    <item>
      <title>First WebAii Webinar - May 21st</title>
      <description>&lt;div id="pagecontainer" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; padding-top: 0px"&gt;&lt;img alt="" src="http://store.falafel.com/images/Product/large/68.jpg" /&gt; &lt;p&gt;In parternship with &lt;a href="http://www.falafel.com/"&gt;Falafel Inc&lt;/a&gt;, we are excited to kick-off our first series of online webinars that target both our WebAii framework and Automation Design Canvas! The first webinar is scheduled for &lt;strong&gt;May 21st&lt;/strong&gt; and will be an introduction to the capabilities of both the framework and the automation design canvas. &lt;/p&gt; &lt;h3&gt;To sign-up please visit this &lt;a href="http://store.falafel.com/p-68-introduction-to-automation-design-canvas-and-webaii-webinar-may-21.aspx"&gt;link&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;Details:&lt;/p&gt; &lt;p&gt;TOPIC: &lt;strong&gt;Introduction to Automation Design Canvas and WebAii&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;WHEN: &lt;strong&gt;Thursday, May 21st,  9:00 to 11:00 am PST&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;WHERE: &lt;strong&gt;Anywhere with an internet connection&lt;/strong&gt;.  You can use VOIP or phone line to listen in on the Webinar&lt;/p&gt; &lt;div&gt;AGENDA for the 2 hours is the following: &lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Introduction to ADC &amp;amp; WebAii &lt;/li&gt; &lt;li&gt;UI Overview &lt;/li&gt; &lt;li&gt;Browser Support and User Settings &lt;/li&gt; &lt;li&gt;DOM Explorer and Elements locations &lt;/li&gt; &lt;li&gt;Testing AJAX applications &lt;/li&gt; &lt;li&gt;Verification Builder &lt;/li&gt; &lt;li&gt;Testing with Code &lt;/li&gt; &lt;li&gt;Debugging WebAii in VS 2008 &lt;/li&gt; &lt;li&gt;Recording Popups &lt;/li&gt; &lt;li&gt;TestCase Reuse &lt;/li&gt; &lt;li&gt;Finally the last 15 minutes will be open to Q&amp;amp;A. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Based on your feedback, we will plan the next set of webinar topics. If you have specific topics that you would like to see webinars built around, feel free to let us know by sending us email directly at &lt;a href="mailto:contact@artoftest.com"&gt;contact@artoftest.com&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Sign-up today!&lt;/strong&gt;&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-04-22/First_WebAii_Webinar_-_May_21st.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-04-22/First_WebAii_Webinar_-_May_21st.aspx</comments>
      <guid isPermaLink="false">ef9dfe70-464b-4825-9a15-f034b3397029</guid>
      <pubDate>Wed, 22 Apr 2009 21:12:00 GMT</pubDate>
    </item>
    <item>
      <title>WebAii 2.0 Beta Released!</title>
      <description>&lt;div id="pagecontainer" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; padding-top: 0px"&gt; &lt;p&gt;WebAii 2.0 (Beta-v2.0.0.1) is ready for public consumption! Download it now from &lt;a shape="rect" href="http://www.artoftest.com/products/downloads.aspx" shape="rect"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Our 2.0 release is a big release. It contains tons of new features that we promised customers and have been working on for a while now. Our documentation for this release is being worked on as we speak. &lt;/p&gt; &lt;p&gt;Below is a break-down of all the main new features in 2.0!&lt;/p&gt; &lt;h4&gt;1. Safari (Windows) Browser Support: &lt;/h4&gt; &lt;p&gt;&lt;a shape="rect" href="~/Files/image_59DE5FC4.png" shape="rect"&gt;&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This is probably the feature that took the most effort to build but is the easiest to use. Simply set your "BrowserType" to Safari and your automation should execute against that browser. Make sure you have Safari installed though. That is Safari for Windows! You can also set that in your app.config file too. &lt;/p&gt; &lt;/blockquote&gt;&lt;blockquote&gt; &lt;p&gt;You can easily test this feature out by taking one of your existing WebAii tests and simply switching the browser type to Safari. Who knows, you might find a new bug in your application ;) &lt;/p&gt; &lt;/blockquote&gt;&lt;blockquote&gt; &lt;p&gt;&lt;span style="text-decoration: underline"&gt;Few things to keep in mind about our Safari support in this beta:&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;ol&gt; &lt;li&gt;We require Silverlight 2.0 to be installed on the machine. You will find out why as soon as you run your first test :) &lt;/li&gt; &lt;li&gt;We currently do not support Html Pop-ups in Safari. That is something we are actively working on. &lt;/li&gt; &lt;li&gt;Safari 4 Beta is currently &lt;strong&gt;NOT&lt;/strong&gt; supported. &lt;/li&gt; &lt;/ol&gt; &lt;h4&gt;2. Silverlight Automation Support:&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;This version of WebAii contains all the functionality that we previewed in our Silverlight Extension CTPs &lt;a shape="rect" href="http://artoftestinc.blogspot.com/2008/11/webaii-silverlight-extension-ctp2.html" shape="rect"&gt;here&lt;/a&gt;. If you are not familiar with our Silverlight support in WebAii, please take a look at our support overview discussed &lt;a shape="rect" href="http://artoftestinc.blogspot.com/2008/08/automated-testing-of-silverlight.html" shape="rect"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;In 2.0 we attempted to fix all reported bugs against the CTPs. We believe we have a solid platform for testing Silverlight applications and we will continue to invest in making it richer and simpler. &lt;/p&gt; &lt;p&gt;Here are some of the highlights of what we added/fixed since our last CTP:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Performance Enhancements:&lt;/strong&gt; Navigating the VisualTree is x100 faster now than the CTP. &lt;/li&gt; &lt;li&gt;&lt;b&gt;Expanded Control Support. &lt;/b&gt;All controls under System.Windows.Controls.Data &amp;amp; System.Windows.Controls are now available.&lt;b&gt;&lt;/b&gt; &lt;/li&gt; &lt;li&gt;&lt;b&gt;Coordinates. &lt;/b&gt;There were minor bugs in how we calculate coordinates that we fixed.&lt;b&gt;&lt;/b&gt; &lt;/li&gt; &lt;li&gt;&lt;b&gt;Highlight On/Off Support: &lt;/b&gt;You can turn highlighting on/off for a specific element.&lt;b&gt;&lt;/b&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Support for Find.ByAutomationId: &lt;/strong&gt;Although WebAii does not rely on UIAutomation, we know several customers have already invested in adding UIAutomation Ids to their UI components. It was easy for us to simply enable that as a mechanism for finding UI elements in the Visual Tree. So no effort wasted.&lt;b&gt;&lt;/b&gt; &lt;/li&gt; &lt;li&gt;&lt;b&gt;ScrollToVisible: &lt;/b&gt;You now have the ability to scroll a specific visual element into visibility. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;For example: &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; HyperlinkButton link = app.Find.ByName&amp;lt;HyperlinkButton&amp;gt;(&lt;span style="color: #006080"&gt;"link1"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Scroll the element to be visible within the browser&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #008000"&gt;// area&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; link.ScrollToVisible();&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Or&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; link.ScrollToVisible(ScrollToVisibleType.ElementBottomAtWindowBottom);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Or &lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; link.ScrollToVisible(ScrollToVisibleType.ElementTopAtWindowTop);&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt; &lt;h4&gt;3. Enhanced Debugging Support:&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;In previous WebAii versions, when you are broken in a debugger and you try to inspect an HtmlControl or a FrameworkElement object using the hover-over debugger tooltip, many times you ended up with timeouts in the debugger view. This issue should be fixed. You now can inspect all properties and even change them live in the debugger. It is actually pretty cool seeing the browser react to your debugger changes. Try it out with a TextBox!&lt;/p&gt; &lt;/blockquote&gt; &lt;h4&gt;4. Built-In HTTP Proxy:&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;In WebAii 2.0, you will notice a new &lt;b&gt;Manager.Http&lt;/b&gt; namespace. Under that namespace, you will find the following methods:&lt;/p&gt; &lt;p&gt;&lt;a shape="rect" href="http://community.artoftest.com/blogs/artoftest/image_7848A0AD.png" shape="rect"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You now have the ability to intercept raw http traffic under the cover. You can intercept an Http request before it is issued by the browser or intercept http responses before they are rendered by the browser. &lt;/p&gt; &lt;p&gt;This functionality will open up WebAii to be used in a wider range of automation scenarios like:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;b&gt;Security Testing:&lt;/b&gt; In your listener you have access to all the basic Http Request/Response properties and you can inject, alter or do whatever you want with them. &lt;/li&gt; &lt;li&gt;&lt;b&gt;Performance Testing:&lt;/b&gt; You can use the http listeners to look at file sizes you are sending or receiving and even build regression unit tests that make sure your files don't grow beyond a certain size! &lt;/li&gt; &lt;li&gt;&lt;b&gt;Page Synchronization: &lt;/b&gt;You can now sync your test to specific requests and have the ability to detect Ajax requests over the wire. We plan to add more easy OM for this similar to out Wait.Forxxx syntax. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;b&gt;Note: &lt;/b&gt;Make sure the &lt;b&gt;Settings.UseHttpProxy&lt;/b&gt; is set to '&lt;b&gt;true&lt;/b&gt;' to allow this feature to function. This feature is off by default.&lt;/p&gt; &lt;p&gt;Here are some code samples that leverage the HttpProxy:&lt;/p&gt; &lt;p&gt;&lt;span style="text-decoration: underline"&gt;The following code shows how to inspect response types:&lt;/span&gt;&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; [TestMethod]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ImageDetection()&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;     Manager.LaunchNewBrowser(BrowserType.InternetExplorer);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt;     ResponseListenerInfo li = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ResponseListenerInfo(CheckTypeForImage);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt;     Manager.Http.AddBeforeResponseListener(li);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;     ActiveBrowser.NavigateTo(&lt;span style="color: #006080"&gt;"http://news.google.com/"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt;     Manager.Http.RemoveBeforeResponseListener(li);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CheckTypeForImage(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, HttpResponseEventArgs e)&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt;     Log.WriteLine(String.Format(&lt;span style="color: #006080"&gt;"Request for {0}"&lt;/span&gt;, e.Response.Request.RequestUri));&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (e.Response.IsImage)&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;     {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt;         Log.WriteLine(String.Format(&lt;span style="color: #006080"&gt;"Image detected; MIME type: {0}"&lt;/span&gt;,&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt;             e.Response.Headers[&lt;span style="color: #006080"&gt;"Content-Type"&lt;/span&gt;]));&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt;     }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt;     {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt;         Log.WriteLine(String.Format(&lt;span style="color: #006080"&gt;"Not an image; MIME type: {0}"&lt;/span&gt;,&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum22" style="color: #606060"&gt; 22:&lt;/span&gt;             e.Response.Headers[&lt;span style="color: #006080"&gt;"Content-Type"&lt;/span&gt;]));&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum23" style="color: #606060"&gt; 23:&lt;/span&gt;     }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum24" style="color: #606060"&gt; 24:&lt;/span&gt; }&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt; &lt;p&gt;&lt;span style="text-decoration: underline"&gt;You can also validate response sizes:&lt;/span&gt;&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; [TestMethod]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CheckImageSize()&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;     ResponseListenerInfo li = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ResponseListenerInfo(Check);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt;     Manager.Http.AddBeforeResponseListener(li);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt;     Manager.LaunchNewBrowser();&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;     ActiveBrowser.NavigateTo(&lt;span style="color: #006080"&gt;"http://my.homepage.com/"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt;     Assert.IsFalse(_imageTooLarge, &lt;span style="color: #006080"&gt;"Some images in page &amp;gt;40k"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;volatile&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; _imageTooLarge = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Check(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, HttpResponseEventArgs e)&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (e.Response.IsImage &amp;amp;&amp;amp; Int32.Parse(e.Response.Headers[&lt;span style="color: #006080"&gt;"Content-Length"&lt;/span&gt;]) &amp;gt; 40000)&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;     {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt;         _imageTooLarge = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt;     }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt; }&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt; &lt;h4&gt;5. Enhanced JavaScript Support: &lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;There are some key scenarios here that we wanted to enable given the nature of today's rich web applications that rely heavily on JavaScript. Below is a break-down of these features. &lt;/p&gt; &lt;p&gt;Make sure to include the &lt;b&gt;ArtOfTest.WebAii.JavaScript&lt;/b&gt; namespace in your test first before trying these out.&lt;/p&gt; &lt;p&gt;1.&lt;strong&gt;Support for "eventArgs" for InvokeEvent: &lt;/strong&gt;We had several customers request this. Now in addition to simply invoking an event with empty arguments, you can also include an event arg. We encapsulated all of that in one object called "&lt;strong&gt;ScriptEvent&lt;/strong&gt;" and can be used with the InvokeEvent method. For example: &lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; MouseEvents()&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt;     HtmlDiv target = Find.ById&amp;lt;HtmlDiv&amp;gt;(&lt;span style="color: #006080"&gt;"div1"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #008000"&gt;// middle-click on the div&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt;     MouseEvent arg1 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MouseEvent(&lt;span style="color: #006080"&gt;"click"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;     arg1.Button = MouseButton.Middle;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt;     target.InvokeEvent(arg1);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; }&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;2. &lt;strong&gt;Event Notification: &lt;/strong&gt;You can now attach to javascript events on your page from your .NET code and have these events trigger an event handler in your test code. Here is an example:&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;volatile&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; _clickHandled;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; System.Threading.AutoResetEvent _clickARE;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; [TestMethod]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ClickHandler()&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;     _clickARE = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; System.Threading.AutoResetEvent(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt;     _clickHandled = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt;     HtmlButton b = Find.ById&amp;lt;HtmlButton&amp;gt;(&lt;span style="color: #006080"&gt;"b"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Attach a listener to the click event on the button.&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt;     b.AddEventListener(&lt;span style="color: #006080"&gt;"click"&lt;/span&gt;, OnClick);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Invoke the event.&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt;     b.InvokeEvent(ScriptEventType.OnClick);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Wait until the event is fired.&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt;     _clickARE.WaitOne(500);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt; &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt;     Assert.IsTrue(_clickHandled);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum22" style="color: #606060"&gt; 22:&lt;/span&gt; }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum23" style="color: #606060"&gt; 23:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum24" style="color: #606060"&gt; 24:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum25" style="color: #606060"&gt; 25:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnClick(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, JavascriptEventArgs e)&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum26" style="color: #606060"&gt; 26:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum27" style="color: #606060"&gt; 27:&lt;/span&gt;     _clickHandled = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum28" style="color: #606060"&gt; 28:&lt;/span&gt;     _clickARE.Set();&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum29" style="color: #606060"&gt; 29:&lt;/span&gt; }&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt; &lt;p&gt; &lt;/p&gt; &lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt; &lt;p&gt;3. &lt;strong&gt;Return JSON or Strongly-Typed objects from InvokeScript&lt;/strong&gt;.Your tests can now understand JSON objects and can handle strongly typed objects returned from JavaScript. This might be a bit advanced for regular users but for customers building mini-frameworks on top of WebAii, it might be a great tool to get rid of having to parse back complex strings from InvokeScript. Here are a couple of samples on how to use this feature:&lt;/p&gt; &lt;p&gt;- Basic example using the built-in &lt;strong&gt;JsObject&lt;/strong&gt;:&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; [TestMethod]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; KeyValuePairs()&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;     Manager.LaunchNewBrowser();&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #008000"&gt;// We are using a dummy call here. The call can be to any JS method on your page&lt;/span&gt;&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt;     JsonObject o = ActiveBrowser.Actions.InvokeScript&amp;lt;JsonObject&amp;gt;(&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #006080"&gt;"({key1:'value1', key2:'value2'})"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt;     Assert.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: #006080"&gt;"value1"&lt;/span&gt;, o[&lt;span style="color: #006080"&gt;"root"&lt;/span&gt;][&lt;span style="color: #006080"&gt;"key1"&lt;/span&gt;]);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt;     Assert.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: #006080"&gt;"value2"&lt;/span&gt;, o[&lt;span style="color: #006080"&gt;"root"&lt;/span&gt;][&lt;span style="color: #006080"&gt;"key2"&lt;/span&gt;]);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; }&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;&lt;blockquote&gt; &lt;p&gt;- Or you can define your own object:&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'courier new', courier, monospace; background-color: #f4f4f4; text-align: left"&gt; &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; [DataContract]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MyObject&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt;     [DataMember(Name = &lt;span style="color: #006080"&gt;"one"&lt;/span&gt;)]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; One { get; set; }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt;     [DataMember(Name = &lt;span style="color: #006080"&gt;"fifteen"&lt;/span&gt;)]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Fifteen { get; set; }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; }&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt;  &lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; [TestMethod]&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ReturnObject()&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; {&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt;     Manager.LaunchNewBrowser();&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt;     MyObject o = Actions.InvokeScript&amp;lt;MyObject&amp;gt;(&lt;span style="color: #006080"&gt;"({one:1, fifteen:15})"&lt;/span&gt;);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt;     Assert.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;(1, o.One);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt;     Assert.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;(15, o.Fifteen);&lt;/pre&gt; &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'courier new', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt; }&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6. Firefox Execution Performance.&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;You will no longer see the weird mangled URL in the address bar and start-up time for firefox execution is faster than 1.1.&lt;/p&gt; &lt;/blockquote&gt; &lt;h4&gt;7. Firefox 3.1B/3.5 Support.&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;In case you plan to upgrade soon.&lt;/p&gt; &lt;/blockquote&gt; &lt;h4&gt;8. Extra HtmlControls like HtmlOrderedList &amp;amp; HtmlUnOrderedList.&lt;/h4&gt; &lt;h4&gt;&lt;strong&gt;9. Side By Side Support with WebAii 1.1 and Automation Design Canvas 1.1. &lt;/strong&gt;&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;WebAii 2.0 Beta should run side by side with any previous WebAii installations on the machine. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;a shape="rect" href="http://www.artoftest.com/products/downloads.aspx" shape="rect"&gt;DOWNLOAD 2.0 BETA NOW&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We do hope you enjoy the new feature set and we look forward to your feedback!&lt;/p&gt; &lt;p&gt;The ArtOfTest Team.&lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-03-25/WebAii_2_0_Beta_Released.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-03-25/WebAii_2_0_Beta_Released.aspx</comments>
      <guid isPermaLink="false">6ad56526-06c7-4163-a5a9-e134105b18fe</guid>
      <pubDate>Wed, 25 Mar 2009 18:12:08 GMT</pubDate>
    </item>
    <item>
      <title>ArtOfTest forges a strategic alliance with Telerik, Inc.</title>
      <description>&lt;div id="pagecontainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p&gt;&lt;strong&gt;Austin, TX - February 2, 2009&lt;/strong&gt; - ArtOfTest, Inc. the experts in software quality assurance technologies and automated software testing has forged a strategic alliance with Telerik, Inc., the leading vendor of developer tools and UI components for .NET. This alliance is a first of its kind and reinforces ArtOfTest's position as a thought leader and innovator in the software testing tools market. &lt;/p&gt; &lt;p&gt;Telerik's WebUI Test StudioT announced today is the first tangible result of this alliance. Telerik's WebUI Test StudioT is an automated testing solution featuring the innovative ArtOfTest Automation Design CanvasT and WebAiiTAutomation Framework and is specifically tailored for Telerik RadControlsT for ASP.NET AJAX; thanks to the integrated control translators which leverage ArtOfTest's patented extensibility architecture of Automation Design Canvas. &lt;/p&gt; &lt;p&gt;"We are very excited about partnering with Telerik and offering a specialized version of Automation Design CanvasT to their customers," said Faris Sweis &amp;amp; Christopher Eyhorn, Co-Founders of ArtOfTest.  "This partnership and its offerings is a first of its kind between a UI component vendor and a testing tools company.   We believe it is time to bring a new generation of cutting-edge technologies and innovative processes to software testing that will assist software quality professionals in building better software easier." &lt;/p&gt; &lt;p&gt;"With the new WebUI Test Studio, we are happy to present a new era in automated web testing," said Svetozar Georgiev, Telerik Co-CEO. "Historically, testing tools have been complex and expensive, and as a result-out of reach for most small and medium-sized companies. We believe WebUI Test Studio will bring automated testing to the masses, finally making superior and cost-effective testing possible and facilitating team collaboration between developers and QAs. And there is an added value to Telerik customers-thanks to the integrated control translators, they can easily build tests against Telerik controls without having to understand their structure." &lt;/p&gt; &lt;p&gt;&lt;strong&gt;About Telerik&lt;/strong&gt;&lt;br /&gt;
Telerik is a leading vendor of development tools and components for Microsoft .NET. Developers from most of the Fortune 2000 companies, many of the world's leading educational and non-profit organizations and thousands of consultants rely on Telerik products to build applications with unparalleled richness, responsiveness and interactivity. For more info on Telerik and its products, please visit &lt;a shape="rect" href="http://www.telerik.com" shape="rect"&gt;www.telerik.com&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;About ArtOfTest&lt;/strong&gt;&lt;br /&gt;
ArtOfTest, Inc. is building the next generation of software testing tools.  Their mission is to evolve the software quality assurance industry through the advancement of cutting-edge technologies used in software testing and software quality assurance.  For more info on ArtOfTest and its products, please visit www.artoftest.com. &lt;/p&gt; &lt;/div&gt;
</description>
      <link>http://www.artoftest.com/community/blogs/09-02-16/ArtOfTest_forges_a_strategic_alliance_with_Telerik_Inc.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-02-16/ArtOfTest_forges_a_strategic_alliance_with_Telerik_Inc.aspx</comments>
      <guid isPermaLink="false">73ec02c4-4476-4a76-89e2-5de5a8205635</guid>
      <pubDate>Mon, 16 Feb 2009 11:02:00 GMT</pubDate>
    </item>
    <item>
      <title>WebAii Automation Design Canvas 1.1 Preview now available</title>
      <description>&lt;div id="pagecontainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p style="margin: 0in 0in 10pt"&gt;ArtOfTest is happy to announce the availability of &lt;b&gt;Automation Design Canvas 1.1 - Preview!&lt;/b&gt; The most productive and innovative tool for testing Web 2.0 applications! The official release of 1.1 will be available at the end of this month.&lt;/p&gt; &lt;p style="margin: 0in 0in 10pt"&gt;WebAii Automation Design Canvas 1.1 incorporates tons of customer feedback that we have gathered over the last 6 months from customers using our 1.0 version. The 1.1 version includes vast enhancements in the following areas:&lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt;&lt;b&gt;1.&lt;/b&gt;       &lt;b&gt;Simplified Project Model&lt;/b&gt;:  Your tests are now self-contained and have no dependency on other files in the solution. No more .WebAiiElements file or WebAiiProj files. Makes deployment scenarios a breeze and allows for tests to be easily portable across machines, users and projects. Simply copy, paste and include in any test project. &lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt; &lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt;&lt;b&gt;2.&lt;/b&gt;       &lt;b&gt;Strongly-typed Project Elements&lt;/b&gt;:  As you record tests, strongly typed elements are being generated on the fly and are automatically accessible from your NUnit or VS Unit tests or any other unit testing framework that you like. If you are one of those customers that wants to simply use our design canvas to quickly generate code, then this feature is for you! Other key benefits to this feature is the ability to discover project element changes at compile time vs. execution time which is a huge time saver!&lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt; &lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt;&lt;b&gt;3.&lt;/b&gt;       &lt;b&gt;Record directly from Internet Explorer&lt;/b&gt;: You are no longer limited to our hosted browser instance inside Visual Studio. Launch IE in record mode and get the entire recording functionality including our Automation Overlay Surface and DOM Explorer attached to your IE instance. This setup is ideal for multi-monitor environments since you can have an IE instance on one screen to record from and Visual Studio on the second screen to manage the tests and execute them. &lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt; &lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt;&lt;b&gt;4.&lt;/b&gt;       &lt;b&gt;Test case Reusability:&lt;/b&gt; This has been a constant customer request. If you have repetitive test steps that you need to execute in multiple tests (i.e. login), then record them as one test and then add that test as a step to whatever test that requires it. &lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt; &lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt;&lt;b&gt;5.       &lt;/b&gt;&lt;b&gt;Enhanced Test Maintenance Support: &lt;/b&gt;Have your storyboard images gone out of date due to the churn in your application? With a simple click of a button, you can update these storyboard images automatically as your test is executing. You can even choose the browser  type you want the images to be captured from.&lt;/p&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt; &lt;/p&gt; &lt;b&gt;            6.       &lt;/b&gt;&lt;b&gt;Tons of performance and reliability fixes.&lt;/b&gt; &lt;p style="margin: 0in 0in 0pt 0.5in"&gt; &lt;/p&gt; &lt;p style="margin: 0in 0in 10pt"&gt;For more details, please check out our expanded How-To Videos &lt;a shape="rect" href="http://www.artoftest.com/webaiidcproduct.aspx?QS" title="here" shape="rect"&gt;here&lt;/a&gt;, which expand on our existing feature set and cover the new 1.1 features.&lt;/p&gt; &lt;p style="margin: 0in 0in 10pt"&gt;Thanks,&lt;/p&gt; &lt;p style="margin: 0in 0in 10pt"&gt;ArtOfTest, Inc. Team.&lt;/p&gt; &lt;/div&gt;</description>
      <link>http://www.artoftest.com/community/blogs/09-02-01/WebAii_Automation_Design_Canvas_1_1_Preview_now_available.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-02-01/WebAii_Automation_Design_Canvas_1_1_Preview_now_available.aspx</comments>
      <guid isPermaLink="false">c585b975-f1d4-470f-8e8f-6e371e6a62b9</guid>
      <pubDate>Sun, 01 Feb 2009 08:00:00 GMT</pubDate>
    </item>
    <item>
      <title>WebAii 2.0 - Automate more than you expect!</title>
      <description>&lt;div id="pagecontainer" style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"&gt; &lt;p&gt;In the last few months, we've been working really hard on refining our WebAii 2.0 feature set and polishing our first beta that we hope to release in Q1 of 2009. The goal for WebAii 2.0 is to enable a broader list of automation scenarios that were not possible in previous versions, address customer pain-points and expand our support to span the latest advancements in web development technologies. This has always been our promise to our customers and we believe WebAii 2.0 will delight our existing customers and will spur many to give WebAii a serious look. Let me outline some of our major features that we hope to preview in WebAii 2.0 beta: &lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div&gt;&lt;b&gt;Safari/Chrome support:&lt;/b&gt; Yes, I have said it. WebAii 2.0 will support Safari (on Windows) and Google Chrome browsers. Our Beta support most probably will only contain the Safari support but future updates will incorporate Chrome support too. The great thing about this support is that you don't need to make any changes to your existing testcases if you are already using WebAii. Simply change the BrowserType setting to Safari or Chrome and watch your existing tests execute against that browser. WebAii's browser abstraction architecture is the key enabler to seamless browser integration. By adding this support we are enabling existing customers to expand their browser /compatibility testing.&lt;b&gt; &lt;/b&gt;&lt;/div&gt; &lt;/li&gt; &lt;li&gt; &lt;div&gt;&lt;b&gt;Silverlight Automation Support. &lt;/b&gt;WebAii 2.0 will incorporate our Silverlight Extension that we have been previewing in the last few months. Whether you are automating HTML or Silverlight or both, you will have a one-stop-shop library that enables you to automate any of these technologies&lt;b&gt; &lt;/b&gt;&lt;/div&gt; &lt;/li&gt; &lt;li&gt; &lt;div&gt;&lt;b&gt;Exposing the HTTP stack: &lt;/b&gt;In WebAii 2.0 in addition to having access to the browser DOM and the ability to manipulate it, we will also enable you to access/intercept and change the raw http requests between the browser and your web server. The HTTP stack will be wrapped in a clean object model that will enable you to intercept requests, modify requests/responses and measure raw http data for your test automation. This support will enable you to automate web scenarios within your test bed that were not possible before. You will be able to build synchronization points against specific http requests, test your page sizes for performance regression testing and potentially do some security testing by doing request/response tampering.&lt;b&gt; &lt;/b&gt;&lt;/div&gt; &lt;/li&gt; &lt;li&gt; &lt;div&gt;&lt;b&gt;Enhanced JavaScript support. &lt;/b&gt;We are taking JavaScript support in WebAii to new levels unheard of before J. Our HtmlControl suite will expand to contain a highly advanced architecture for JavaScript access. You will be able to access strongly typed JavaScript objects from your testcases, attach to native JavaScript events from .NET, pass JavaScript eventargs and map HtmlControls to pure JavaScript object instances. With such support, you should be able to fully automate and control your JavaScript with a clean object model. &lt;b&gt;&lt;/b&gt;&lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;b&gt;In addition to the above features WebAii 2.0 will contain tons of feature requests that customers have been asking for in addition to tons of bug fixes. Our goal is to also release a 1.1 update by end of Feb 09 that will service many of the bug reported by customers directly or on the forums. &lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;HAPPY NEW YEAR! &lt;/b&gt;&lt;/p&gt; &lt;/div&gt;</description>
      <link>http://www.artoftest.com/community/blogs/09-01-10/WebAii_2_0_-_Automate_more_than_you_expect.aspx</link>
      <author>ArtOfTest</author>
      <comments>http://www.artoftest.com/community/blogs/09-01-10/WebAii_2_0_%e2%80%93_Automate_more_than_you_expect.aspx</comments>
      <guid isPermaLink="false">a02bdf36-2063-447c-9561-c80b7fa2e3a8</guid>
      <pubDate>Sat, 10 Jan 2009 12:50:00 GMT</pubDate>
    </item>
  </channel>
</rss>