<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8586743699467387846</id><updated>2011-08-16T03:58:16.969-07:00</updated><category term='Automation testing'/><category term='Software Testing'/><category term='Keyword driven framework'/><category term='Defect'/><category term='QTP'/><category term='QTP Framework'/><title type='text'>Software Testing.. Thoughts on making software better</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8586743699467387846.post-206345817567891456</id><published>2009-09-22T23:10:00.001-07:00</published><updated>2009-09-23T00:25:17.861-07:00</updated><title type='text'>Automating Google Web Toolkit(GWT) applications with QTP and Selenium</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;From past couple of days I was trying to automate Google Web Toolkit( henceforth mentioned as GWT). There are certain issues that needs to be addressed explicitly.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Some time objects are not recognized or object class property gets changed every time the UI gets rendered.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt; The element IDs in such applications can be dynamic and tend to change based on the way a screen is rendered.&lt;br /&gt;It does not support XPath as such but you can use HTML DOM (in case you are working on IE only) to find the elements.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;QuickTest Code&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;Browser("Main Dashboard").Page("Provider Search_2").WebElement("Show Advanced Options").Click&lt;br /&gt;&lt;br /&gt;Call SendKey()&lt;br /&gt;&lt;br /&gt;Function SendKey()&lt;br /&gt;Wait(WaitTime)' May not be needed -- depends on the server&lt;br /&gt;ExecuteFile "\\tsheth\Quick\FunctionLibrary\Send.vbs&lt;br /&gt;Wait(WaitTime) 'May not be needed -- depends on the server&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;This is the VBS code:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;Dim ws&lt;br /&gt;Set ws = CreateObject("WScript.Shell")&lt;br /&gt;Ws.SendKeys "~"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;HTML Code from page under test&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_oQHu6_KgQdY/SrnMTns3arI/AAAAAAAAABo/XBxHzyKqZMI/s1600-h/untitled.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5384559466944883378" style="WIDTH: 414px; CURSOR: hand; HEIGHT: 69px" alt="" src="http://1.bp.blogspot.com/_oQHu6_KgQdY/SrnMTns3arI/AAAAAAAAABo/XBxHzyKqZMI/s320/untitled.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="html-face"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. It records the wrong element. &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Solution:&lt;/strong&gt; it sometimes recording xpaths on co mputed attributes which you can't forsee with a reasonable investment of time. In this case I assign my own IDs&lt;br /&gt;(DOM.setAttribute(element,"myId"))&lt;br /&gt;to elements and use the respective locators (that's selenium jargon for an expression be it xpath, javascript etc which returns a DOM element). If you decide to go that way, do yourself a favor and try to design your widgets in a way that this ID assignment is done more or less automatically.&lt;br /&gt;&lt;strong&gt;2. It doesn't record clicks on images.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt; You have to add a user extension to the selenium recorder - don't worry, it's javascript, it's easy and it is somewhere on their site.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;3. It can't find the elements it's supposed to click on?&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt; That's the A in Ajax - Selenium wants to click on an element as result of a click on a link or button that is not there yet. You will make good friends with waitForText or waitForElement which you will have to append manually to your scripts where you see it fit. This way you tell selenium to pause the execution until the page has changed into the state you want it to. You can set timeouts there after which you assume that your test has failed.&lt;br /&gt;You will have to come to peace with the setFrame function which (It works more or less like the 'cd' command on the command prompt where you descent into child frames or navigate up to the parent frame of the current frame.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;4. It doesn't do well with closed windows.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt; When you have a listener that closes a window, you essentially are killing the living space of Selenium. In this case move the 'close' call to a deferred command.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5. QTP with the Web Add-In does indeed work with Ext GWT.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Of course, because even the simplest of EXT widgets are complex UI controls made up of multiple generic WebElements, using Record &amp;amp; Playback will not get you very far in interacting with and validating these controls.We've implemented a library of functions specific to supporting ExtJS and Ext GWT controls as part of the overall generic framework we use for validating our web-based applications.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That library currently supports interaction with, and validation of Ext comboBoxes, grids, panels, windows, form edit fields, tool tips, and menus.Our biggest challenge has been updating the library functions each time a new version of the Ext GWT controls are released, as our functions make extensive use of the innerhtml and outerhtml properties of the various WebElements that comprise a single Ext widget.&lt;br /&gt;&lt;br /&gt;I tried with the descriptive programming (QTP) on the GWT application and it worked well 75% of the time and other 25% of time it failed to recognize the objects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;&lt;em&gt;"Most of us are pretty comfortable with the way we are, what we're doing and how we operate. But today the typical organization is telling the middle manager that he has to be a different kind of manager. These middle managers have been promoted throughout their careers and gotten bonuses based on their performance,&lt;br /&gt;but that's now history. ..." (Carr, Hard, Trahant: "Change Process")&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Good Bye!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8586743699467387846-206345817567891456?l=qtplearning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/206345817567891456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8586743699467387846&amp;postID=206345817567891456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/206345817567891456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/206345817567891456'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/2009/09/automating-google-web-toolkitgwt.html' title='Automating Google Web Toolkit(GWT) applications with QTP and Selenium'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oQHu6_KgQdY/SrnMTns3arI/AAAAAAAAABo/XBxHzyKqZMI/s72-c/untitled.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8586743699467387846.post-6459796503826063207</id><published>2009-08-16T09:11:00.000-07:00</published><updated>2009-08-16T09:52:48.613-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='QTP Framework'/><title type='text'>An approach to build a data driven framework</title><content type='html'>&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;Data driven scripts are those application-specific scripts captured or manually coded in the automation tool’s proprietary language and then modified to accommodate variable data. Variables will be used for key application input fields and program selections allowing the script to drive the application with external data supplied by the calling routine or the shell that invoked the test script.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;Variable Data, Hard Coded Component Identification: These data driven scripts often still contain the hard coded and sometimes very fragile recognition strings for the window components they navigate. When this is the case, the scripts are easily broken when an application change or revision occurs. And when these scripts start breaking, we are not necessarily talking about just a few. We are sometimes talking about a great many, if not all the scripts, for the entire application.&lt;br /&gt;Figure 1 is an example of activating a server-side image map link in a web application with an automation tool scripting language:&lt;br /&gt;&lt;/span&gt;&lt;a name="Figure1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;Image Click "DocumentTitle=Welcome;\;ImageIndex=1" "Coords=25,20"&lt;br /&gt;&lt;/span&gt;&lt;a name="Figure1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;This particular scenario of clicking on the image map might exist thousands of times throughout all the scripts that test this application. The preceding example identifies the image by the title given to the document and the index of the image on the page. The hard coded image identification might work successfully all the way through the production release of that version of the application. Consequently, testers responsible for the automated test scripts may gain a false sense of security and satisfaction with these results. &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;However, the next release cycle may find some or all of these scripts broken because either the title of the document or the index of the image has changed. Sometimes, with the right tools, this might not be too hard to fix. Sometimes, no matter what tools, it will be frustratingly difficult.&lt;br /&gt;Remember, we are potentially talking about thousands of broken lines of test script code. And this is just one particular change. Where there is one, there will likely be others.&lt;br /&gt;Highly Technical or Duplicate Test Designs:Another common feature of data driven scripts is that virtually all of the test design effort for the application is developed in the scripting language of the automation tool. Either that, or it is duplicated in both manual and automated script versions. This means that everyone involved with automated test development or automated test execution for the application must likely become proficient in the environment and programming language of the automation tool.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;Simple Datadriven framework is as given below:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_oQHu6_KgQdY/Sog1lTJF08I/AAAAAAAAABg/Av5_lYyU6-U/s1600-h/dt.JPG"&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5370601470549152706" style="WIDTH: 555px; CURSOR: hand; HEIGHT: 336px" alt="" src="http://1.bp.blogspot.com/_oQHu6_KgQdY/Sog1lTJF08I/AAAAAAAAABg/Av5_lYyU6-U/s320/dt.JPG" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;A test automation framework relying on data driven scripts is definitely the easiest and quickest to implement if you have and keep the technical staff to maintain it. But it is the hardest of the data driven approaches to maintain and perpetuate and very often leads to long-term failure.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Credits:&lt;/strong&gt; Carl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:130%;color:#3333ff;"&gt;“Here is the test to find whether your mission on earth is finished. If you're alive, it isn't.”- Richard Bach&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8586743699467387846-6459796503826063207?l=qtplearning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/6459796503826063207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8586743699467387846&amp;postID=6459796503826063207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/6459796503826063207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/6459796503826063207'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/2009/08/approach-to-build-data-driven-framework.html' title='An approach to build a data driven framework'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oQHu6_KgQdY/Sog1lTJF08I/AAAAAAAAABg/Av5_lYyU6-U/s72-c/dt.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8586743699467387846.post-3620842590961113520</id><published>2009-03-26T02:50:00.000-07:00</published><updated>2009-03-26T03:04:10.793-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Testing'/><title type='text'>Curiosity and Testing</title><content type='html'>&lt;span style="font-family:verdana;font-size:130%;"&gt;Hello Readers,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;Curiosity and Software Testing goes hand in hand.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;Making Software testing community better, efficient and stronger we all need to contribute.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;Please visit &lt;strong&gt;Mr. Pradeep Soundararajan's&lt;/strong&gt; blog &lt;/span&gt;&lt;a href="http://testertested.blogspot.com/"&gt;&lt;span style="font-family:verdana;font-size:130%;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:130%;color:#000099;"&gt;&lt;strong&gt;"... our basic ideas about what are better or worse practices are strongly influenced by people we perceive as knowing how to make software." -James Bach&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Good Bye for now, Take care.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8586743699467387846-3620842590961113520?l=qtplearning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/3620842590961113520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8586743699467387846&amp;postID=3620842590961113520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/3620842590961113520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/3620842590961113520'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/2009/03/curiosity-and-testing.html' title='Curiosity and Testing'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8586743699467387846.post-7247941693414085938</id><published>2008-12-08T07:48:00.000-08:00</published><updated>2008-12-08T07:55:43.937-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Defect'/><title type='text'>Is this a defect!!!!</title><content type='html'>Hello Readers,&lt;br /&gt;&lt;br /&gt;I found following stuff while logging in to my yahoo account.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oQHu6_KgQdY/ST1CYoAwGDI/AAAAAAAAABY/1B6iguIs7mg/s1600-h/untitled.JPG"&gt;&lt;img style="cursor: pointer; width: 569px; height: 269px;" src="http://2.bp.blogspot.com/_oQHu6_KgQdY/ST1CYoAwGDI/AAAAAAAAABY/1B6iguIs7mg/s320/untitled.JPG" alt="" id="BLOGGER_PHOTO_ID_5277447329172953138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well, It might happen that the password that I have entered might get visible.&lt;br /&gt;&lt;br /&gt;I have two question for the audience&lt;br /&gt;&lt;br /&gt;1. Can this type of defect identified by Automation testing.&lt;br /&gt;&lt;br /&gt;2. Can this type of defect is reproducible? Cause if this is a defect then a tester might need to give the "steps to reproduce" to the developers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please feel free to add your views and comments.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S. If the screen shot is not visible then please copy and paste it in our very own Microsoft Paint.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8586743699467387846-7247941693414085938?l=qtplearning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/7247941693414085938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8586743699467387846&amp;postID=7247941693414085938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/7247941693414085938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/7247941693414085938'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/2008/12/is-this-defect.html' title='Is this a defect!!!!'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oQHu6_KgQdY/ST1CYoAwGDI/AAAAAAAAABY/1B6iguIs7mg/s72-c/untitled.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8586743699467387846.post-6886265185591116833</id><published>2008-12-03T02:12:00.000-08:00</published><updated>2008-12-04T02:50:41.569-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Keyword driven framework'/><category scheme='http://www.blogger.com/atom/ns#' term='QTP Framework'/><title type='text'>An approach to build a keyword driven framework</title><content type='html'>&lt;p class="MsoNormal"&gt;Keyword driven framework:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:+0;"&gt;&lt;/span&gt;Any framework should consist of following mandatory information&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It should be Flexible&lt;/li&gt;&lt;li&gt;Less changes in the scripts when the requirement changes that is maintainable&lt;/li&gt;&lt;li&gt;Should be more structured.&lt;/li&gt;&lt;li&gt;There should be centralized automation team dedicated to functional automation of the project&lt;/li&gt;&lt;li&gt;Creating right function on right time&lt;/li&gt;&lt;li&gt;Good coordination between functional testing team as well as automation testing team&lt;/li&gt;&lt;li&gt;Maintenance: Never ending part on the automation life cycle front.&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;Now a day’s all the organizations are moving to the web based application rather than client server or mainframe application. The World Wide Web is moving to become micro. So it makes the business sense to adopt keyword driven framework for web based application though it is a bit tough for the implementation as TTC (time to code) is more than the other framework.&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;A good keyword driven automation framework is one which can be used across the web based application. Whenever we need to build the automation framework we do not have to start from the scratch and we can do that by building the blocks on the existing keyword driven framework.&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;b&gt;Framework structure:&lt;/b&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oQHu6_KgQdY/STZcUuwYd5I/AAAAAAAAAAc/CAlNrong-rs/s1600-h/folder+structure.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5275505524729214866" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 231px; CURSOR: pointer; HEIGHT: 177px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_oQHu6_KgQdY/STZcUuwYd5I/AAAAAAAAAAc/CAlNrong-rs/s320/folder+structure.JPG" border="0" /&gt;&lt;/a&gt; &lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:+0;"&gt;&lt;?xml:namespace prefix = v /&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" preferrelative="t" spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;v:path connecttype="rect" gradientshapeok="t" extrusionok="f"&gt;&lt;o:lock aspectratio="t" ext="edit"&gt;&lt;/o:lock&gt;&lt;v:shape id="Picture_x0020_0" style="VISIBILITY: visible; WIDTH: 170.25pt; HEIGHT: 129.75pt" alt="untitled.JPG" type="#_x0000_t75" spid="_x0000_i1027"&gt;&lt;v:imagedata title="untitled" src="file:///C:%5CDOCUME%7E1%5Ctariks%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.jpg"&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;1.&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Application scenarios: &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Application scenarios are the ones which has the description of the object, operation to be performed and keyword description of the object. It is a file from where the QTP will recognize the object and will perform the action, It can act as a test scenario documentation which has the easily understandable language that is used for the keyword and we can save time, effort and cost for preparing the same.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:+0;"&gt;&lt;v:shape id="Picture_x0020_4" style="VISIBILITY: visible; WIDTH: 468pt; HEIGHT: 174pt" type="#_x0000_t75" spid="_x0000_i1026"&gt;&lt;v:imagedata title="key" src="file:///C:%5CDOCUME%7E1%5Ctariks%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image002.jpg"&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;Example:&lt;/b&gt; Let us say that there are three edit boxes named Login name, Password and date of birth (DOB) respectively. The keyword Login&lt;span style="font-size:+0;"&gt; &lt;/span&gt;can be used as a keyword on any page to enter the login information. We need to create a function to access the log in the parameters to make the function call appropriate. Moreover we can make the keyword reusable by making function reusable.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oQHu6_KgQdY/STZcrXr-idI/AAAAAAAAAAk/sExzDGDVF94/s1600-h/option.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5275505913673714130" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 526px; CURSOR: pointer; HEIGHT: 164px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_oQHu6_KgQdY/STZcrXr-idI/AAAAAAAAAAk/sExzDGDVF94/s320/option.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;The best practice is any function has to be reusable if not then write inside the script.&lt;/p&gt;&lt;p class="MsoListParagraph" style="MARGIN-LEFT: 0.75in; TEXT-INDENT: -0.25in"&gt;&lt;b&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;2.&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Database set ups and files&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;The test data can be stored in the MS Access or any other database. The best practice to design the database is to have one table for each screen along with the test case ID and the test case name, These fields are important as these are recognizing the test cases that are automated.&lt;/p&gt;&lt;p class="MsoListParagraph" style="MARGIN-LEFT: 0.75in; TEXT-INDENT: -0.25in"&gt;&lt;b&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;3. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Driver Script&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Driver script is important script in every framework; it is the next step after the initialization of the scripts and database setup and connectivity with the application. This will be having function calls for all the reusable function that has been written.&lt;/p&gt;&lt;p class="MsoListParagraph" style="MARGIN-LEFT: 0.75in; TEXT-INDENT: -0.25in"&gt;&lt;b&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;4.&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Function Library&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Function library is the repository of all the reusable functions available for the project. The keyword driven approach is having all the logic of the automation in the VB script functions. No scripting is done outside the function library. Any Keyword driven framework will be having two function libraries&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Application specific function&lt;/li&gt;&lt;li&gt;Application independent or reusable function&lt;/li&gt;&lt;/ol&gt;&lt;p class="MsoNormal"&gt;Function library might have a function which gives call to the other functions across function library folder but that is the only function might present outside the function library.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Reusable function examples:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Click on the drop down box&lt;/li&gt;&lt;li&gt;Click on the save button&lt;/li&gt;&lt;li&gt;Close dialog box&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="MARGIN-LEFT: 0.75in; TEXT-INDENT: -0.25in"&gt;&lt;b&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;5. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Initialization VB script files:&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;This file will be having all the data related to the execution environment as well as the test data. It will set the browser options if necessary and all the basic things that might be required at the time of execution of the scripts.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Initialization file example:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Set the connectivity to the database&lt;/li&gt;&lt;li&gt;Load environmental setting file&lt;/li&gt;&lt;li&gt;Set the path of the object repository&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="MARGIN-LEFT: 0.75in; TEXT-INDENT: -0.25in"&gt;&lt;b&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;6. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Object repository:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;.mtr (If used shared object repository) or .tsr (if used local object repository) files will be stored in this folder.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="MARGIN-LEFT: 0.75in; TEXT-INDENT: -0.25in"&gt;&lt;b&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;7.&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;Sequence files:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Sequence file is combination of the initialization as well as configuration; here the configuration is basically about the test scenario or the test case execution. The sequence file is stored as the excel file and from that one can recognize how the test scenario will be executed, there might be many instance where one does not want to execute certain test cases and want to omit it. For that purpose there is a flag&lt;span style="font-size:+0;"&gt; &lt;/span&gt;set in the excel sheet and it will be interpreted accordingly. Location of the sequence file can be in the root directory or in the initialization folder.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Example of the sequence file:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oQHu6_KgQdY/STZdfe2h-sI/AAAAAAAAAAs/jMPEXQXDH14/s1600-h/seq.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5275506808950225602" style="WIDTH: 661px; CURSOR: pointer; HEIGHT: 117px" alt="" src="http://3.bp.blogspot.com/_oQHu6_KgQdY/STZdfe2h-sI/AAAAAAAAAAs/jMPEXQXDH14/s320/seq.JPG" border="0" /&gt;&lt;/a&gt;Good Bye for now, Take care.&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="COLOR: rgb(0,0,153);font-family:Arial,Helvetica,Univers,Zurich BT;" &gt;&lt;blockquote&gt;&lt;strong&gt;" Everything really interesting that happens in software projects eventually comes down to people."- James Bach&lt;/strong&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:+0;"&gt;&lt;v:shape id="Picture_x0020_5" style="VISIBILITY: visible; WIDTH: 468pt; HEIGHT: 121.5pt" type="#_x0000_t75" spid="_x0000_i1025"&gt;&lt;v:imagedata title="config" src="file:///C:%5CDOCUME%7E1%5Ctariks%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image003.jpg"&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:+0;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8586743699467387846-6886265185591116833?l=qtplearning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/6886265185591116833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8586743699467387846&amp;postID=6886265185591116833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/6886265185591116833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/6886265185591116833'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/2008/12/approach-to-build-keyword-driven.html' title='An approach to build a keyword driven framework'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oQHu6_KgQdY/STZcUuwYd5I/AAAAAAAAAAc/CAlNrong-rs/s72-c/folder+structure.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8586743699467387846.post-6446530353389661612</id><published>2008-11-15T05:28:00.000-08:00</published><updated>2008-11-15T06:07:17.423-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Automation testing'/><category scheme='http://www.blogger.com/atom/ns#' term='QTP Framework'/><title type='text'>An approach to build a QTP framework</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_oQHu6_KgQdY/SR7XhA75ONI/AAAAAAAAAAM/NIcJ_2Ab9qk/s1600-h/untitled4.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5268885576256927954" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 70px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_oQHu6_KgQdY/SR7XhA75ONI/AAAAAAAAAAM/NIcJ_2Ab9qk/s320/untitled4.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:georgia;"&gt;Hello Friends,&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;You might have encountered question or terminology “what do you mean by QTP framework?” Let us target the word “Framework” first. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;Framework is a simplified description of the structure or a process.&lt;br /&gt;In QTP terms it is the baseline of a process that describes the rules to follow while automating an application.&lt;br /&gt;&lt;br /&gt;Framework depends on the approach towards the test automation from the project perspective as it differes from project to project the framework will too differ from project to project.&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;strong&gt;&lt;u&gt;For Quality deliverables, important things that should be followed are:&lt;/u&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;· Following common coding structure for all the scripts &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;· Consistent coding conventions&lt;br /&gt;&lt;br /&gt;· Use of Reusability for making code efficient and minimal&lt;br /&gt;&lt;br /&gt;· Efficient use of Object Repository&lt;br /&gt;&lt;br /&gt;· Use of Error and Exception handling Functions&lt;br /&gt;&lt;br /&gt;· Use of Data table object, Environment variables for using data&lt;br /&gt;&lt;br /&gt;An organized approach is very much necessary for the automation project success.&lt;br /&gt;&lt;br /&gt;Approach for Test Automation is used for building a strategy for automation starting from the requirement phase till the deployment phase. Approach for automation begins with finding out the conditions and business rules given by the client and grouping similar conditions, business rules together as Test cases or Test Scenarios.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Steps involved in Approach for Test Automation are as follows:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;· Requirement gathering from the client&lt;br /&gt;&lt;br /&gt;· Understanding and Analyzing the Requirement&lt;br /&gt;&lt;br /&gt;· Grouping the requirement into Test cases&lt;br /&gt;&lt;br /&gt;· Preparing the Design for Automation&lt;br /&gt;&lt;br /&gt;· Building Scripts depending on the Design&lt;br /&gt;&lt;br /&gt;· Review of Scripts at Offshore&lt;br /&gt;&lt;br /&gt;· Delivery to the Client&lt;br /&gt;&lt;br /&gt;There are following frameworks being followed in the industry.&lt;br /&gt;&lt;br /&gt;1) Linear&lt;br /&gt;2) Modular&lt;br /&gt;3) Keyword&lt;br /&gt;4) Hybrid&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;We are free to invent our own ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;span style="font-family:georgia;"&gt;The combination of two or more can also be used to build the framework.&lt;br /&gt;For any automation project manual test case plays an important role, now following are some guidelines to identify the best candidate for automation.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Guidelines followed for identification of Test Cases for Automation&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;· Tests that need to run once and those that need frequent human intervention are usually not worth the investment to automate and have not been considered for automation. &lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· As Automated testing can be used to verify the performance of application paths that are used with a high degree of frequency when the software is running in full production e.g. creating customer records, Invoicing and other high volume activities where software failure would occur frequently have been considered. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Mission critical processes like core activities like sales order processing are prime candidates for automated testing and have been considered for automation. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Repetitive Testing. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Applications with Long Life span – Longer the application in production greater the benefits from automation. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Avoiding dynamic screens. Though possible to automate this increases the complexity of the script. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Avoiding screens where objects are created dynamically. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Avoiding business scenarios where complex hardware is involved. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Selecting a row in a table results in an additional challenge from. Some automation tools provide the facility to read each row in a table and for focusing on a specific row. If the numbers of rows were very high the execution time of the script would be high. This leads to performance issues of the recorded script. Hence, it is better to prove the business scenario wherein tables with row selections figure by identifying a fixed row number. This scenario is faced very frequently in enterprise applications as in pricing tables and leads to the complexity of the script and subsequently the effort. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;· Avoiding scenarios that require high degree of coding while automating so that script’s complexity is reduced and high maintainability of the script is ensured.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;" Automation can not replace manual testing as automation is done by a chip and manual testing done by human brain- A chip can not replace human brain"&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8586743699467387846-6446530353389661612?l=qtplearning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/6446530353389661612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8586743699467387846&amp;postID=6446530353389661612' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/6446530353389661612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/6446530353389661612'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/2008/11/approach-to-build-qtp-framework.html' title='An approach to build a QTP framework'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oQHu6_KgQdY/SR7XhA75ONI/AAAAAAAAAAM/NIcJ_2Ab9qk/s72-c/untitled4.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8586743699467387846.post-5845572369310083636</id><published>2008-03-10T22:41:00.000-07:00</published><updated>2008-11-15T06:15:54.766-08:00</updated><title type='text'>View on Software Testing</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;I am starting a new blog on automation as well as manual testing as testing .&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#6666cc;"&gt;&lt;blockquote&gt;&lt;strong&gt;&lt;span style="color:#6666cc;"&gt;" Life is too short to only use an approach for testing that relies solely on human's ability to execute a series of mouse clicks and keystrokes when the processing power that makes computers so useful can be leveraged to execute these tests, freeing testers from especially mundane or repititive testing so that their brains can be used for higher order&lt;br /&gt;tests that computers can not do yet."&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8586743699467387846-5845572369310083636?l=qtplearning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qtplearning.blogspot.com/feeds/5845572369310083636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8586743699467387846&amp;postID=5845572369310083636' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/5845572369310083636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8586743699467387846/posts/default/5845572369310083636'/><link rel='alternate' type='text/html' href='http://qtplearning.blogspot.com/2008/03/quick-test-professional.html' title='View on Software Testing'/><author><name>Tarik Sheth</name><uri>http://www.blogger.com/profile/05658126633373504829</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
