• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Advanced Coded UI Testing

on

  • 34,065 views

Shai Raiten's talk at the SELA Developer Practice (May 2013) about Advanced Coded UI using Visual Studio 2012. This presentation explain how to work with multiple UI maps, how to use various types of ...

Shai Raiten's talk at the SELA Developer Practice (May 2013) about Advanced Coded UI using Visual Studio 2012. This presentation explain how to work with multiple UI maps, how to use various types of data sources, how to use LINQ and Reflection for project refactoring, and how to create and use logs and traces.

Statistics

Views

Total Views
34,065
Views on SlideShare
30,267
Embed Views
3,798

Actions

Likes
11
Downloads
643
Comments
4

19 Embeds 3,798

http://blogs.microsoft.co.il 3524
http://feeds.feedburner.com 184
http://beta.blogs.microsoft.co.il 27
http://autotesting719.blogspot.ru 17
http://raiten2.rssing.com 10
http://blogsil2.orcsweb.com 5
http://feedly.com 5
http://www.newsblur.com 4
http://israel840.rssing.com 3
http://webcache.googleusercontent.com 3
http://cloud.feedly.com 3
http://translate.googleusercontent.com 3
http://feeds2.feedburner.com 2
http://72.15.222.207 2
http://newsblur.com 2
http://131.253.14.98 1
http://anthomyiidae15.kekunda.com 1
http://www.commafeed.com 1
http://dev.newsblur.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

14 of 4 previous next Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Playback Logic: SearchUI can be visualized as a Tree of UI elements rooted at Desktop. QiD is used to search in this treeRnP engine uses Tree switching across technology boundaries to provide a merged view of the treeBFS is to search for elements. To improve resiliency intermediate nodes are ignored during search if they are not found.SmartMatch: If no top-level window is found, a heuristic alogorithm is used to find the nearest match.Playback logic: WFR/UISyncWait for Ready: Implemented by using perf counters to check “Thread State” of the UI Element. If it is in wait state and is waiting for user action, then action is performed.Plug-ins can override by providing plugin specific WFR implementation. (E.g. IE waits for DocumentComplete event)UI Synchronization: It ensures that the playback action happened as expected. For MSAA, implemented by checking message queue for the control. For WPF, UIA provides a UI sync pattern that can be queried.Primitive Actions: Playback supports following UI actionsCheck, Uncheck, DoubleClick, MouseHover, MouseMove, MouseButtonClick, MouseWheel, SendKeys, SetValueasComboBox, Drag, DragDrop, Scroll, SetFocus
  • Playback Logic: SearchUI can be visualized as a Tree of UI elements rooted at Desktop. QiD is used to search in this treeRnP engine uses Tree switching across technology boundaries to provide a merged view of the treeBFS is to search for elements. To improve resiliency intermediate nodes are ignored during search if they are not found.SmartMatch: If no top-level window is found, a heuristic alogorithm is used to find the nearest match.Playback logic: WFR/UISyncWait for Ready: Implemented by using perf counters to check “Thread State” of the UI Element. If it is in wait state and is waiting for user action, then action is performed.Plug-ins can override by providing plugin specific WFR implementation. (E.g. IE waits for DocumentComplete event)UI Synchronization: It ensures that the playback action happened as expected. For MSAA, implemented by checking message queue for the control. For WPF, UIA provides a UI sync pattern that can be queried.Primitive Actions: Playback supports following UI actionsCheck, Uncheck, DoubleClick, MouseHover, MouseMove, MouseButtonClick, MouseWheel, SendKeys, SetValueasComboBox, Drag, DragDrop, Scroll, SetFocus
  • Open MTM and Create a manual test caseExecute the created test case using recorderSave & CloseGenerate code from existing recording in VS
  • To start recording, choose the Record icon. Perform the actions that you want to test in your application, including starting the application if that is required.For example, if you are testing a web application, you might start a browser, navigate to the web site, and log in to the application.To pause the recording, for example if the tested application have crashed and you want continue from the last step, simply pause your record, start the application and reach to that certain step, hit back on this button to resume.To delete actions incase you have made mistakes in recording unnecessary actions, choose the Edit Recorded Steps buttonTo add Asserts, choose  the Add Assertions button in the Coded UI Test Builder, and then choose a UI control in your running application.When you choose Generate Code, all the recorded actions will be generated to code
  • You can record actions using UI Test Builder the following ways:After creating new Coded UI Test in Visual Studio: choose Record actions, edit UI Map and add assertions The generate code test builder will appear
  • A coded UI test class is identified by a CodedUITestAttribute applied to the class.Each coded UI test is a test method in a coded UI test class. You can add multiple test methods to each coded UI test class and identify each coded UI test method by using the TestMethodAttribute.Your test method can also add validation code for a UI test control to obtain the value of a property of a UI test control. The test method can use an Assert statement to compare the actual value of the property to an expected value. The result of this comparison determines the outcome of the test. Every time that you run a coded UI test, you can analyze the test result and if the test fails, you can see or store the details of which assertion failed.When you create a coded UI test, these files are added to your test project:
  • A coded UI test class is identified by a CodedUITestAttribute applied to the class and automatically applied to the class, which allows the testing framework to recognize it as a testing extension. Also notice that this is not a partial class. All class code is contained in this file.Each coded UI test is a test method in a coded UI test class. You can add multiple test methods to each coded UI test class and identify each coded UI test method by using the TestMethodAttribute.Your test method can also add validation code for a UI test control to obtain the value of a property of a UI test control. The test method can use an Assert statement to compare the actual value of the property to an expected value. The result of this comparison determines the outcome of the test. Every time that you run a coded UI test, you can analyze the test result and if the test fails, you can see or store the details of which assertion failed.When you create a coded UI test, these files are added to your test project:
  • Each method has a structure that resembles the login() method. This is explained in more detail under the code, which is presented together with line breaks to add clarity.
  • The code for each property is also very standard throughout the class. The following code for the loginParams property is used in the login() method.Notice that the property uses a private local variable that is named mloginParams to hold the value before it returns it. The property name and the class name for the object it returns are the same.
  • As with all classes in the UIMap.cs file, this class starts with the GeneratedCodeAttribute. In this small class is a Fields region that defines the strings to use as parameters for the Keyboard.SendKeys method that is used in the UIMap.login () method that was discussed earlier. You can write code to replace the values in these string fields before the method in which these parameters are used is called.
  • In order to find the control in test execution phase, Coded UI test captures some set of properties on the control and name them as “Search Properties” and “Filter Properties”. Each instance of these is a  Name-value pair, with Name being the Property-Name and Value being the actual value of the property during the time of the capture.
  • First pass of the Search is done for the match of All properties given in SearchProperties list. Basically this can be referred as AND Condition of search properties.Second is FilterProperties where you can refer as Or Condition.Each technology has a limited set of properties that can be used for search via Coded UI tests. So, Coded UI tests chooses only the properties exposed by the technology as SearchProperties. These are chosen by targeting a good trade-off between robustness and performance.For instance, the Web technology exposes many properties including all the attributes of the controls rendered in the page, whereas .Net controls’ accessibility exposes only a sub-set of the properties via accessibility.
  • From the code presented , we will be able to get all the properties that are associated with the control under test from the control object ( mUIQCustom ). When the search for the control startsor implicit by any usage of the control in actions or property validations , it starts finding the controls under the Container element of the control ( HtmlDocument ).Search in Coded UI test is a Breadth-First which compares each of the controls in the traversal for the match of the properties given in the code.First pass of the Search is done for the match of All properties given in SearchProperties list. Basically this can be referred as AND Condition of search properties. In cases, where the results of the search using SearchProperties finds exactly one control or doesn’t find any control, Coded UI test skips using the Filter Properties (even if is defined in the code) because of the 2 cases,    1. There is exactly one control, so there is no need to apply filters.    2. There are no controls to apply filters.But, in cases where the list of SearchProperties is not good enough to find the exact control, Coded UI tests uses the filter properties (one by one) till it finds One exact match. Basically this can be referred as Ordered Match.In remote cases where Search using FilterProperties also results in more than one control, the First match is returned as the resultant control.
  • This method calls each UIMap method that you specified when you recorded your test, which is described in the section on theUIMap Class.A region that is titled Additional test attributes, if uncommented, contains two optional methods.The MyTestInitialize() method has the TestInitializeAttribute applied to it, which tells the testing framework to call this method before any other test methods. Similarly, the MyTestCleanup() method has the TestCleanUpAttribute applied to it, which tells the testing framework to call this method after all other test methods have been called. Use of these methods is optional. For this test, Login() method could be called from MyTestInitialize() and the Logout()method could be called from MyTestCleanup() instead of from CodedUITest1Method1().
  • To run your unit, coded UI, web performance, or load tests by using Visual Studio, you can add, configure and select the test settings to use when you run your tests. To run your tests, collect data, or affect a test machine remotely, you must specify a test controller to use in your test settings. The test controller will have agents that can be used for each role in your test settings..
  • To include the data and diagnostics that you want to collect on your local machine, select the diagnostic data adapters according to your testing needs. To configure a diagnostic data adapter that you have included, select the specific diagnostic data adapter and then choose the Configure option above the list of the data and diagnostic adapters.
  • The Event Log is determined form the Windows Event Viewer that storesevent IDs to define the uniquely identifiable events that a Windows computer can encounter. For example, when a user's authentications fails.For more info regarding the Event Viewer go to:http://windowssecrets.com/top-story/what-you-should-know-about-windows-event-viewer/This Configuration Dialogue sets what data is gathered from the system Event Log during the test run. In it you can set which Event Logs and Types to collect, and set the Maximum number of entries to log per test.   You can also choose whether you want to Collect data from test cases that are ran as a part of another test (unlike the video recorder log entries do not occupy as much storage space).
  • You may want to coordinate with the developers before you enable and configure theIntelliTrace, and advise them to look up runtime data from test runs of the application in order to perform historical debugging. The course of action Recording the relevant events that may cause the bug to occur, this will give the programmers to put the focus on the relevant code and function calls upon these recorded events.Note: You would want to collect call information in case there is more complicated bug to analyze and user code error and you suspecting the problem lies on a code error.Keep in mind that collecting call information other than IntelliTrace events only my reduce the tested application performance.In order to configure the IntelliTrace recorder in a manner that will assist coders to understand and debug the application you may want explore this subject, for more info visit here:http://msdn.microsoft.com/en-us/library/dd264915.aspx
  • Since Coded UI is being used at it interacts with the desktop, You can create a video recording of your desktop session when you run an automated testThis data collector can be useful to view the user actions for a coded UI test. The video can help other team members isolate application issues that are difficult to reproduce.In Visual Studio 2012 You can enable Audio recording as well while capturing the desktop actions and use it later on as a commentary. as well as the desktop actions, and set the Frame rate, Bit rate and video quality.
  • Find your UI control to use as assertOpen your coded UI Test BuilderDrag the assert cross hair to the choose UI ControlAn UI Control Map will be displayYou can add assertion to any properties shownSelect the property and the value Click on Add Assertion Select a comparator and comparison value Click on OKClick on the generate button and insert the right name For the assertion method and click on OK button
  • When you create a new coded UI test, the Visual Studio testing framework generates code for the test by default in a UIMap class.The generated code for the UI Map contains a class for each object that the test interacts with. For each generated method, a companion class for method parameters is generated specifically for that method. If there are a large number of objects, pages, and forms and controls in your application, the UI Map can grow very large. Also, if several people are working on tests, the application becomes unwieldy with a single large UI Map file.
  • One of the examples I give here is when executing a popup window and extracting the inner text
  • In this example we are going to explore how to extract a text from a popup window

Advanced Coded UI Testing Advanced Coded UI Testing Presentation Transcript

  • SELA DEVELOPER PRACTICEMay 5-9, 2013Shai RaitenAdvanced Coded UI TestingUsing Visual Studio 2012
  • Agenda• Coded UI Testing Overview• Fast Forward Automation Using MTM• Understand Coded UI Anatomy• Getting Started with Coded UI Testing• Web• Desktop• Data Collectors• Creating Custom Data Collector• Data Binding• Advanced Coded UI• Tips & Tricks
  • What’s Coded UI TestCoded UI Tests are automated tests that drive yourapplication through its user interface. These tests includefunctional testing of the UI controls. They let you verifythat the whole application, including its user interface, isfunctioning correctly. Coded UI Tests are particularlyuseful where there is validation or other logic in the userinterface, for example in a web page.3
  • Coded UI Features• Functional Testing• Generate code in C#/VB• Intent aware recording and resilient playback• Integrated with ALM story• Build, deploy & test in lab or as part of build• Local, remote runs, data collection• Rich Extensibility4
  • Intent Aware RecordingClick Start buttonClick on the search boxType keyword in the search boxClick the correct search resultSearch for the keywordClick the correct search resultLaunch the application or urlIntent
  • Resilient PlaybackSearch• Search for the Control based on the “Query ID” generated duringrecordingWFR• Wait for Control to be Ready: The playback needs to ensure that thecontrol is ready to be acted uponEnsureVisible• Ensure that the control is visible (i.e. ensure point is clickable andscrolled into view)UI Sync• Playback tries to ensure that the control that was supposed to havereceived an action has actually received it
  • Creating Coded UI Test• Coded UI Test can be created the following ways:• Fast Forward Automation using MTM• Generating your Coded UI form existing recoding (Convert therecorded actions from a manual test)• Generating a new Coded UI Test from scratch using Coded UITest Builder• Writing your own Coded UI (Advance option)7
  • Coded UI With MTM• Microsoft Test Manager is a platform you can useto create and manager your test plans and testcases• We can execute the test case manually, record theactions on the UI and generate them to a code –This will be our Coded UI• We can playback the generated code as anautomatic test8
  • 9DEMORecord & PlaybackTesting Using MTM
  • Creating New Coded UIProject• Open Visual Studio 2012• Choose File < New < Project• Use C# Template go to Test and choose Coded UIProject10
  • Coded UI with Visual Studio• When creating a new Coded UI Project we have theoption of using the Coded UI Test Builder11
  • Coded UI Test Builder12Record/Stop/PauseEdit Recorded StepsAdd AssertionsGenerate Code
  • 13DEMORecord and Playback ActionsUsing UI Test Builder
  • Generated Coded UI Files14CodedUITest1.cs Contains the coded UI test class, test methods and assertions.UIMap.uitest Contains the XML model for the UIMap class, including allwindows, controls, properties, methods, parameters, actions,and assertions.UIMap.Designer.cs Contains the code representation of the XML contained inthe UIMap.uitest file. Do not edit this file.UIMap.cs Contains more of the code for the UIMap class. You can putany customizations for the UI map in this file.
  • CodedUITest Class & TestMethod15[CodedUITest]public class CodedUITest1{[TestMethod]public void CodedUITestMethod1(){this.UIMap.AddTwoNumbers();this.UIMap.VerifyResultValue();// To generate more code for this test, select// "Generate Code" from the shortcut menu.
  • UIMap Methods16/// <summary>/// MenuNavigation/// </summary>public void MenuNavigation()#region Variable DeclarationsHtmlHyperlink GrouHyperlink = this.UIWindow.UISampleDocument.GrouHyperlink;HtmlHyperlink LisHyperlink = this.UIWindow.UISampleDocument.LisHyperlink;#endregion// Click DropDownList With Grouping linkMouse.Click(GrouHyperlink, new Point(48, 18));// Click Cascading DropDown Lists linkMouse.Click(LisHyperlink, new Point(41, 13));
  • UIMap Properties17public virtual OpenWebSiteParams OpenWebSiteParamsget{if ((this.mOpenWebSiteParams == null)){this.mOpenWebSiteParams = new OpenWebSiteParams();return this.mOpenWebSiteParams;}
  • UIMap Fields18[GeneratedCode("Coded UITest Builder", "11.0.60315.1")]public class OpenWebSiteParams#region Fields/// <summary>/// Go to web page http://www.outlook.com/ using newbrowser instance/// </summary>public string UIOutlookWindowsInterneWindowUrl ="http://www.outlook.com/";#endregion
  • UIMap Control Map19public HtmlHyperlink UILisHyperlink{getif ((this.mUILisHyperlink == null))this.mUILisHyperlink = new HtmlHyperlink(this);#region Search Criteriathis.mUILisHyperlink.SearchProperties[HtmlHyperlink.PropertyNames.Id] = null;this.mUILisHyperlink.SearchProperties[HtmlHyperlink.PropertyNames.Name] = null;this.mUILisHyperlink.SearchProperties[HtmlHyperlink.PropertyNames.Target] = null;this.mUILisHyperlink.SearchProperties[HtmlHyperlink.PropertyNames.InnerText] = "CascadingDropDown Lists";this.mUILisHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.AbsolutePath] ="/MVC3Extensions/CascadingDropDownLists/Home";this.mUILisHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.Title] = null;this.mUILisHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.Href] ="http://demos.raduenuca.ro/MVC3Extensions/CascadingDropDownLists/Home";this.mUILisHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.Class] = null;this.mUILisHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.ControlDefinition] ="href="/MVC3Extensions/CascadingDropDownL";this.mUILisHyperlink.FilterProperties[HtmlHyperlink.PropertyNames.TagInstance] = "3";this.mUILisHyperlink.WindowTitles.Add("Create");#endregion}return this.mUILisHyperlink;}}
  • Search Methods• SearchProperties - Mandatory properties that willbe used to search the control• FilterProperties – When there is oneSearchProperties match or less, FilterPropertiesturns into actions to the stage where if finds onematch.20
  • Optimize UI Object Finding21This is an example of an Search Criteriapublic class UIMicrosoftHomePageDevDocument : HtmlDocument{public UIMicrosoftHomePageDevDocument(UITestControl searchLimitContainer) :base(searchLimitContainer){#region Search Criteriathis.SearchProperties[HtmlDocument.PropertyNames.Id] = null;this.SearchProperties[HtmlDocument.PropertyNames.RedirectingPage] ="False";this.SearchProperties[HtmlDocument.PropertyNames.FrameDocument] = "False";this.FilterProperties[HtmlDocument.PropertyNames.Title] = "Microsoft HomePage | Devices and Services";this.FilterProperties[HtmlDocument.PropertyNames.AbsolutePath] = "/en-us/default.aspx";this.FilterProperties[HtmlDocument.PropertyNames.PageUrl] ="http://www.microsoft.com/en-us/default.aspx";this.WindowTitles.Add("Microsoft Home Page | Devices and Services");#endregion
  • Initialize & Cleanup22#region Additional test attributes//Use TestInitialize to run code before running each test[TestInitialize()]public void MyTestInitialize(){//Run Initialize Code here!//Use TestCleanup to run code after each test has run[TestCleanup()]public void MyTestCleanup()//Run Cleanup Code here!#endregion
  • Test Settings• XML file that provides advanced settings for test execution.• When should use .testsettings• Collect diagnostic data to help isolate bugs in your application forCoded UI Tests• Run the client, server, and other parts of your application ondifferent machines (Local or virtual) to verify that it behaves asexpected in a distributed environment.• Distribute a large number of tests across additional machines ondifferent configuration (OS/Client Browser)23
  • Creating .testsettings file• Right click on your solution in the Solution Explorerand choose to add new item, pick the Test Settingstemplate and add new .testsettings file.• The new .testsettings is now placed in your solutionitems24
  • Test Settings Overview• Test Setting is compound with the following settings:• Roles• Data Collectors & Diagnostics• Deployment• Setup and Cleanup Scripts• Hosts• Test Timeouts• Unit Test• Web Test25
  • DEMOConfigure Your Test Settings• To configure the yourtest settings, simplydouble click on the.testsettings file• The Test Setting windowwill be display, with theGeneral section asdefault26
  • Data & Diagnostics• In this module we will demonstrate how to collect dataand diagnostics data on your local machine• We will focus on the next data collectors• Event Log• IntelliTrace• System Information• Video Recorder• * Custom Collectors27
  • Event Log• Enable the Event Log and click to configure it• The Configuration Dialogue will be presented:28
  • IntelliTrace• Enabling this collector during the test can behelpful for programmers attempting to reproduce abug and decreasing the time spent on debuggingthe application29
  • System Information• The System Information data collectors collectsdata about your operating system• The input is an XML file formatted in this kind ofstructure30
  • Video Recorder• Video Recorder – Records the desktop (audio andvideo) on demand31
  • 32DEMOUsing DataCollectors
  • 33DEMOCreating Custom DataCollector
  • Coded UI Test Editor• Remove unwanted UI actions• Changes the names for test methods and controls• View and Open Properties Window for selected item• Split one action into multiple methods• Adds custom code to your test methods by moving toUImap.cs• Add a pause prior to a UI action specified in milliseconds• Identifies the location of the control in the UI of applicationunder test34
  • 35DEMOCoded UI Test Editor
  • Asserts36• AreEqual• AreNotEqual• AreSame• Fail• Inconclusive• IsFalse / IsTrue• IsInstanceOfType / IsNotInstanceOfType• IsNotNull / IsNullIt’s not enough just clicking the buttons
  • What are assertions..?• Methods that let you validate properties ofyour user interface elements• You typically compare the value of controlproperties with an expected value• Expected value can be hard coded or comefrom parameters or external files• Assertions use the Unit Test assertionmethods37
  • Assert Types• They are few types of asserts Assert.AreEqual - will compare between object propertyvalue to the expected value, if the value is True – passthe test, otherwise fail the test. Assert.Fail – Will fail the test with not nocondition if stated for example Assert.Fail();could be used also with external condition i.eif (!maxTestRuns == 0) Assert.Fail(“Test failed”)38
  • Assert Types• CollectionAssert Class - Verifies that two specifiedcollections are equal, Two collections are equal if they havethe same elements in the same order and quantity. i.e.CollectionAssert.AllItemsAreNotNull(actual); - will test if allitems are not null• StringAssert Class – Compare between strings i.e.StringAssert.Contains(String Value, String Substring, StringMessage) – will test that the first string contains the secondsubstring, the string must be case sensitive39
  • Assert Method Code40/// <summary>/// CheckResult - Use CheckResultExpectedValues to pass parameters intothis method./// </summary>public void CheckResult(){#region Variable DeclarationsWinText uIItem0Text = this.UICalculatorWindow.UIItem0Text;#endregion// Verify that the Name property of 0 label equals ResultAssert.AreEqual(this.CheckResultExpectedValues.UIItem0TextName, uIItem0Text.Name);// Verify that the DisplayText property of 0 label equals 0Assert.AreEqual(this.CheckResultExpectedValues.UIItem0TextDisplayText, uIItem0Text.DisplayText);
  • 41DEMOCreate Asserts
  • Create Planned Test Lists –Order Tests• An ordered test is a container that holds other testsand guarantees that tests run in a specific order• You can add/remove test from an .ordertest fileand run it the Test Explorer or via TFS Build42
  • DEMOOrdered Test & Playlist43
  • Data Driven Tests• You can run your test case multiple times usingother different sets of data• You can use MTM Test Case items as data source, aswell as XML, CSV, XSL and SQL Express44
  • Data Sources TypesData Source Type Data Source AttributeTest Case in TFS [DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase",",30, ""DefaultCollection;ProjectName/tfs/8080http://TFSServer:"DataAccessMethod.Sequential), TestMethod]XML [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML","|DataDirectory|data.xml", "Iterations", DataAccessMethod.Sequential),DeploymentItem("data.xml"), TestMethod]CSV [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV","|DataDirectory|data.csv", "data#csv", DataAccessMethod.Sequential),DeploymentItem("data.csv"), TestMethod]XLS DataSource("System.Data.Odbc", "Dsn=Excel Files;Driver={Microsoft Excel Driver(*.xls)};dbq=|DataDirectory|Data.xls;defaultdir=.;driverid=790;maxbuffersize=2048;pagetimeout=5;readonly=true", "Sheet1$", DataAccessMethod.Sequential), TestMethod]SQL Express [DataSource("System.Data.SqlClient", "Data Source=.sqlexpress;InitialCatalog=tempdb;Integrated Security=True", "Data", DataAccessMethod.Sequential),TestMethod]45
  • Data Driven Tests46In Visual Studio 2012 You will have to insert theDataSource attribute directly in the code in the lineabove your testmethod.[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]public void CodedUITestMethod1()this.UIMap.CheckResultExpectedValues.UIItem0TextName =TestContext.DataRow["ResultValue"].ToString();this.UIMap.CheckResult();
  • Use XML As Data Source• Create a new XML file in Visual Studio• Compose your data in the next order• Open new root tag under <Item></ Item >• Add all the other parameters between to first root tagtill his closing:<URL>http://www.formbreeze.com/demo.htm</URL><FirstName>John</FirstName><LastName>Doe</LastName><Email>john.doe@outlook.com</Email><Phone>+972 054 54545454</Phone><HeardAboutUs>Other</HeardAboutUs>47
  • DEMOData Source48
  • Multiple UIMaps• Logical partitions when testing large application,each UIMap can be related to a specific module ora page, for instance Customer module or login page• Each tester can work and be responsible ondifferent sector, which means he will no othertester working on the same resource, avoidingmultiple check-ins• Easier to maintain, you “know the ropes”, notdealing with on file with thousands of code lines49
  • 50DEMOWorking with Multiple UIMaps
  • Extracting Dynamic Data• Some parts of your test framework will include adynamic value you will to use at runtime• When creating new data it might be rendered andpresented differently or randomly.• In the following example I’ll show you how get atext from an alert box -http://www.w3schools.com/js/tryit.asp?filename=tryjs_alert51
  • Extract property value from anobject (UIMap)52The first step is creating a new browser launch within the wantedURLpublic void LaunchPassGen(){BrowserWindow PassGenWindow;PassGenWindow =BrowserWindow.Launch("http://www.w3schools.com/js/tryit.asp?filename=tryjs_alert");}
  • Extract property value from anobject (UIMap)53Second step is to automate the click on the button that executesthe popup windowYou can either record it or hand code itpublic void ClickBTN(){#region Variable DeclarationsHtmlInputButton uIShowalertboxButton =this.UITryitEditorv17WindowWindow.UITryitEditorv17Document.UIViewFrame.UIHttpwwww3schoolscomjDocument.UIShowalertboxButton;#endregion// Click Show alert box buttonMouse.Click(uIShowalertboxButton, new Point(53, 11));}
  • Extract property value from anobject (GetPropertyValue)54Explore the object and see which property value you can andwant to extractIn this example we will extract the innerText value from thepopup object identifying it by searching for the window namepublic static class SharedActions{public static string GetPropertyValue(){WinWindow popUpWindow = new WinWindow();popUpWindow.SearchProperties[WinWindow.PropertyNames.Name] = "Message from webpage";WinText innerText = new WinText(popUpWindow);string text = innerText.DisplayText;return text;}
  • 55DEMOAdvanced CodedUI
  • Playback Settings• In a coded UI test playback, you can instruct acertain test method to work in a different way, forinstance• You can postpone the executing of a method until theinvolved control will be ready• You can add a delay time between test methods• You can decide which methods will not fail the test eventhough they failed and more…56
  • Playback Settings• Playback is configured by modifying the fields inPlayback.Playbacksettings class.• Playback.wait - Make playback wait for certain event ortime• Continue on Error – The engine will continue on to thenext action after an error57
  • Playback.Wait• WaitForReadyControl()– This waits for the control to be readyto accept mouse/keyboard input.• WaitForControEnabled() – This waits for the control to beenabled. For example, you can use this wait till the “Next” button of thewizard is enabled• WaitForControlExisted() – This waits for the control to exist onthe UI. For example, you are expecting an error dialog after theapplication has done the validation of the parameters.58
  • Example of usingWaitForControlCondition59
  • Error Handling• Raise events when an exception occurs duringplayback• Catch the exception and use PlaybackError Event60[TestMethod]public void CodedUITestMethod1()Playback.PlaybackError += Playback_PlaybackError;}void Playback_PlaybackError(object sender, PlaybackErrorEventArgs e){if (e.Error.Message.Contains("Cant Find"))e.Result = PlaybackErrorOptions.Skip;elsee.Result = PlaybackErrorOptions.Retry;
  • Tips & Tricks• Manually recording mouse hovers - Ctrl+Shirt+R• Selecting a hidden control using the keyboard – Ctrl + I• Coded UI Recorder configuration file - C:Program Files(x86)Microsoft Visual Studio11.0Common7IDECodedUITestBuilder.exe.config• MaxLevelsForItemContainer• RecordImplicitHover• ExcludeProcess61
  • Thank You