Printed From: One Stop Testing
Category: Testing Tools @ OneStopTesting
Forum Name: WinRunner @ OneStopTesting
Forum Discription: WinRunner is an automated functional GUI testing tool that allows a user to record and play back UI interactions as test scripts using a proprietary Test Script Language (TSL).
URL: http://forum.onestoptesting.com/forum_posts.asp?TID=2590 Printed Date: 19Jul2025 at 7:08am
Topic: FAQ WinRunner !!!!!Posted By: tanushree
Subject: FAQ WinRunner !!!!!
Date Posted: 28Sep2007 at 11:45pm
Q: For new users, how to use WinRunner to test software applications automately ?
A: The following steps may be of help to you when automating tests
MOST IMPORTANT - write a set of manual tests to test your application -
you cannot just jump in with WR and expect to produce a set of meaningful
tests. Also as you will see from the steps below this set of manual tests
will form your plan to tackle automation of your application.
Once you have a set of manual tests look at them and decide which ones
you can automate using your current level of expertise. NOTE that there will
be tests that are not suitable for automation, either because you can't
automate them, or they are just not worth the effort.
Automate the tests selected in step 2 - initially you will use
capture/replay using the steps in the manual test, but you will soon see
that to produce meaningful and informative tests you need to add additional
code to your test eg. use tl_step() to give test results. As this process
continues you will soon see that there are operations that you repeatedly do
in multiple tests - these are then candidates for user-defined functions and
compiled modules
Once you have completed step 3 go back to step 2 and you will find that
the knowledge you have gained in step 3 will now allow you to select some
more tests that you can do.
If you continue going through this loop you will gradually become more
familiar with WR and TSL, in fact you will probably find that eventually you
do very little capture/replay and more straight TSL coding.
Q: How to use WinRunne to check whether the record was
updated or the record was delelte or the record was inserted or not?
Using WinRunner check point features:
Create->dDB checkpoint->Runtime Record check
Q: How to use WinRunner to test the login screen
A: When you enter wrong id or password, you will get Dialog box.
1. Record this Dialog box 2. User win_exists to check whether dialog box exists or not 3. Playback: Enter wrong id or password, if win_exists is true, then your application is working good. Enter good id or password, if win_exists is false, then your application is working perfectly.
Q: After clicking on "login" button, they opens other windows of
the web application, how to check that page is opened or not
When your expecting "Window1" to come up after clicking on Login...
Capture the window in the GUI Map. No two windows in an web based application can have the same html_name property. Hence, this would be the property to check.
First try a simple win_exists("window1",
Q: Winrunner testscript for checking all the links at a time
location = 0;
set_window("YourWindow",5);
while(obj_exists((link = "{class: object,MSW_class: html_text_link,location: "
& location & "}"))== E_OK)
{
obj_highlight(link); web_obj_get_info(link,"name",name);
web_link_valid(link,valid);
if(valid)
tl_step("Check web link",PASS,"Web link \"" & name & "\" is valid.");
else
tl_step("Check web link",FAIL,"Web link \"" & name & "\" is not valid.");
location++;
}
Q: How to get the resolution settings
Use get_screen_res(x,y) to get the screen resolution in WR7.5.
or
Use get_resolution (Vert_Pix_int, Horz_Pix_int, Frequency_int) in WR7.01
Q: WITHOUT the GUI map, use the phy desc directly....
It's easy, just take the description straight out of the GUI map squigglies and
all, put it into a variable (or pass it as a string)
and use that in place of the object name.
button_press ( "btn_OK" );
becomes
button_press ( "{class: push_button, label: OK}" );
Q: What are the three modes of running the scripts?
WinRunner provides three modes in which to run tests: Verify, Debug,
and Update. You use each mode during a different phase of the testing
process.
Verify
Use the Verify mode to check your application.
Debug
Use the Debug mode to help you identify bugs in a test script.
Update
Use the Update mode to update the expected results of a test or to create a new expected results folder.
Q: How do you handle unexpected events and errors?
WinRunner uses exception handling to detect an unexpected event when it occurs and act to recover the test run.
WinRunner enables you to handle the following types of exceptions:
Pop-up exceptions: Instruct WinRunner to detect and handle the appearance of a specific window.
TSL exceptions: Instruct WinRunner to detect and handle TSL functions that return a specific error code.
Object exceptions: Instruct WinRunner to detect and handle a change in a property for a specific GUI object.
Web exceptions: When the WebTest add-in is loaded, you can instruct
WinRunner to handle unexpected events and errors that occur in your Web
site during a test run.
Q: How do you handle pop-up exceptions?
A pop-up exception Handler handles the pop-up messages that come up
during the execution of the script in the AUT. TO handle this type of
exception we make WinRunner learn the window and also specify a handler
to the exception. It could be
Default actions: WinRunner clicks the OK or Cancel button in the pop-up
window, or presses Enter on the keyboard. To select a default handler,
click the appropriate button in the dialog box.
User-defined handler: If you prefer, specify the name of your own
handler. Click User Defined Function Name and type in a name in the
User Defined Function Name box.
Q: How do you handle TSL exceptions?
Suppose you are running a batch test on an unstable version of your
application. If your application crashes, you want WinRunner to recover
test execution. A TSL exception can instruct WinRunner to recover test
execution by exiting the current test, restarting the application, and
continuing with the next test in the batch.
The handler function is responsible for recovering test execution. When
WinRunner detects a specific error code, it calls the handler function.
You implement this function to respond to the unexpected error in the
way that meets your specific testing needs.
Once you have defined the exception, WinRunner activates handling and
adds the exception to the list of default TSL exceptions in the
Exceptions dialog box. Default TSL exceptions are defined by the
XR_EXCP_TSL configuration parameter in the wrun.ini configuration file.
Q: How to write an email address validation script in TSL?
public function IsValidEMAIL(in strText) { auto aryEmail[], aryEmail2[], n;
n = split(strText, aryEmail, "@"); if (n != 2) return FALSE;
# Ensure the string "@MyISP.Com" does not pass... if (!length(aryEmail[1])) return FALSE;
n = split(aryEmail[2], aryEmail2, "."); if (n < 2) return FALSE; # Ensure the string "Recipient@." does not pass... if (!(length(aryEmai2[1]) * length(aryEmai2[1]))) return FALSE;
return TRUE; }
Q: How to have winrunner insert yesterdays date into a field in the application?
1) Use get-time to get the PC system time in seconds since 01/01/1970
2)Subtract 86400 (no seconds in a day) from it
3)Use time_str to convert the result into a date format
4)If format of returned date is not correct use string manipulations to get the format you require
5) Insert the date into your application
Alternatively you could try the following :
1) In an Excel datasheet create a column with an appropriate name, and in the first cell of the column use the excel formula 'today() - 1'
2) Format the cell to give you the required date format
3) Use the ddt- functions to read the date from the excel datasheet
4) insert the reteived date into your application
Q: How can withwin runner to make single scripts which supports multiple languages?
Actually, you can have scripts that run for different locales.I have a set of
scripts that run for Japanese as well as English Locales. Idea is to have
objects recorded in GUI Map with a locale independent physical description.
This can be achieved in two ways.
1. After recording the object in the GUI Map, inspect the description and
ensure that no language specific properties are used. For ex: html_name
property for an object of class: html_text_link could be based on the text.
You can either remove these language dependent properties if it doesnt really
affect your object recognition. If it does affect, you need to find another
property for the object that is locale independent. This new property may be
something thats already there or you need to create them. This leads to the
next option.
2. Have developers assign a locale independent property like 'objname' or
something to all objects that you use in your automated scripts. Now, modify
your GUI Map description for the particular object to look for this property
instead of the standard locale dependent properties recorded by WR
(these default properties are in GUI Map Configuration).
or
You could also use a GUI map for each locale. Prefix the GUI map name with the locale
(e.g. jpn_UserWindow.gui and enu_UserWindow.gui) and load the correct map based on the
current machine locale.
Specifically, you can use the get_lang() function to obtain the current language setting,
then load the appropriate GUI map in your init script.
Take a look at the sample scripts supplied with WinRunner (for the flight application).
I think those scripts are created for both English and Japanese locales.
After taking care of different GUIs for different locales,
the script also needs some modification. If you are scripting in English and then moving
on to any other language (say Japanese), all the user inputs will be in English.
Due to this the script will fail as it is expecting a Japanese input for a JPN language.
Instead of using like that, assign all the user inputs to a variable and use the same
wherever the script uses it. This variables has to be assigned (may be after the driver
script) before you call the script which you want to run. You should have different variable
scripts for different languages. Depending on the language you want to run, call the
appropriate variable script file.
This will help you to run the same script with different locale
Q: How to use a regular _expression in the physical description of a window in the GUI map?
Several web page windows with similar html names - they all end in or contain "| MyCompany"
The GUI Map has saved the following physical description for one of these windows:
{
class: window,
html_name: "Dynamic Name | MyCompany"
MSW_class: html_frame
}
The "Dynamic Name " part of the html name changes with the different pages.
Replace:
{
class: window,
html_name: "!.*| MyCompany"
MSW_class: html_frame
}
Regular expressions in GUI maps always begin with "!".
Q: How to force WR to learn the sub-items on a menu...?
If WR is not learning sub-items then the easy way id to add manually
those sub items in to GUI map.. of course you need to study the menu
description and always add the PARENT menu name for that particular sub-menu..
Q: How to check property of specific Icon is highlighted or not?
set_window("Name of the window"); obj_check_info("Name of the object ","focused",0ut_value);
check for out_value & proceed further
Q: BitMap or GUI Checkpoints
DO NOT use BitMap or GUI Checkpoints for dynamic verification.
These checkpoints are purely for static verifications. There are ofcourse,
work-arounds, but mostly not worth the effort.
Q: How to to get the information from the status bar without
doing any activity/click on the hyperlink?
You can use the "statusbar_get_text("Status Bar",0,text);" function "text" variable contains the status bar statement.
or
web_cursor_to_link ( link, x, y );
link The name of the link. x,y The x- and y-coordinates of the mouse pointer when moved to a link, relative to the upper left corner of the link.
Logical:"CheckBox" # you give any name as the logical name { class: check_button, MSW_class: html_check_button, html_name: chkESActivity, part_value: "![0-9][0-9]" # changes were done here }
you can use any of the checkbox command like button_set("CheckBox",ON); # the above statement will check any check
box with part value ranging from 00 to 99
Q: Text Field Validations
Need to validate text fields against
1. Null
2. Not Null.
3. whether it allows any Special Characters.
4. whether it allows numeric contents.
5. Maximum length of the field etc.
1) From the requirements find out what the behaviour of the text field in
question should be. Things you need to know are :
what should happen if field left blank
what special characters are allowed
is it an alpha, nemeric or alphanumeric field etc.etc.
2) Write manual tests for doing what you want. This will create a structure
to form the basis of your WR tests.
3) now create your WR scripts. I suggest that you use data driven tests and
use Excel spreadsheets for your inputs instead of having user input.
For example the following structure will test whether the text field will
accept special characters :
open the data table
for each value in the data table
get value
insert value into text field
attempt to use the value inserted
if result is as expected
report pass
else
report fail
next value in data table
in this case the data table will contain all the special charcaters
Then I just call the function: #LOAD GUIMAP FILES VIA THE LOAD GUIMAP FUNCTION (this closes ALL open guimaps) rc = loadGui(guiLoad); if (rc != "Pass") #Check success of the Gui_Load { tl_step("Guiload",FAIL,"Failed to load Guimap(s)for "&testname(getvar)); #This line to test log texit("Failed to load Guimap(s)for "&testname(getvar)); }
public function loadGui(inout guiLoad[]) { static i; static rc;
# close any temp GUI map files GUI_close(""); GUI_close_all();
for(i in guiLoad) { rc = (GUI_load(GUIPATH & guiLoad)); if ((rc != 0) && (rc != E_OK)) #Check the Gui_Load { return ("Failed to load " &guiLoad); } } return ("Pass");
}
Q: How to break infinite loop
set_window("Browser Main Window",1);
text="";
start = get_time();
while(text!="Done")
{
statusbar_get_text("Status Bar",0,text);
now = get_time();
if ( (now-start) == 60 ) # Specify no of seconds after which u want
break
{
break;
}
}
Q: User-defined function that would write to the Print-log as well as write to a file
function writeLog(in strMessage){
file_open("C:\FilePath\...");
file_printf(strMessage);
printf(strMessage);
}
Q: How to do text matching?
You could try embedding it in an if statement. If/when it fails use a
tl_step statement to indicate passage and then do a texit to leave the
test. Another idea would be to use win_get_text or web_frame_get_text
to capture the text of the object and the do a comparison (using the
match function) to determine it's existance.
Q: the MSW_id value sometimes changes, rendering the GUI map useless
MSW_Id's will continue to change as long as your developers are modifying your
application. Having dealt with this, I determined that each MSW_Id shifted by
the same amount and I was able to modify the entries in the gui map rather
easily and continue testing. Instead
of using the MSW_id use the "location". If you use your GUI spy it will
give you every detail it can. Then add or remove what you don't want.
Q: Having the DB Check point, its able to show the current values in form
but its not showing the values that saved in the table
This looks like its happening because the data has been written to the db after your checkpoint, so you have to do a runtime record check Create>Database Checkpoint>Runtime Record Check. You may also have to perform some customization if the data displayed in the application is in a different format than the data in the database by using TSL. For example, converting radio buttons to database readable form involves the following:
The GUI Map Editor is been provided with a Find and Show Buttons.
To find a particular object in the GUI Map file in the application,
select the object and click the Show window. This blinks the selected
object.
To find a particular object in a GUI Map file click the Find button,
which gives the option to select the object. When the object is
selected, if the object has been learned to the GUI Map file it will be
focused in the GUI Map file.
Q:What different actions are performed by find and show button?
To find a particular object in the GUI Map file in the application,
select the object and click the Show window. This blinks the selected
object.
To find a particular object in a GUI Map file click the Find button,
which gives the option to select the object. When the object is
selected, if the object has been learned to the GUI Map file it will be
focused in the GUI Map file.
Q:How do you identify which files are loaded in the GUI map?
The GUI Map Editor has a drop down GUI File displaying all the GUI Map files loaded into the memory.
Q:How do you modify the logical name or the physical description of the objects in GUI map?
You can modify the logical name or the physical description of an object in a GUI map file using the GUI Map Editor.
Q:When do you feel you need to modify the logical name?
Changing the logical name of an object is useful when the assigned logical name is not sufficiently descriptive or is too long.
Q:When it is appropriate to change physical description?
Changing the physical description is necessary when the property value of an object changes.
Q:How WinRunner handles varying window labels?
We can handle varying window labels using regular expressions.
WinRunner uses two hidden properties in order to use regular expression
in an object’s physical description. These properties are regexp_label
and regexp_MSW_class.
i. The regexp_label property is used for windows only. It operates
behind the scenes to insert a regular expression into a window’s label
description.
ii. The regexp_MSW_class property inserts a regular expression into an
object’s MSW_class. It is obligatory for all types of windows and for
the object class object.
Q:What is the purpose of regexp_label property and regexp_MSW_class property?
The regexp_label property is used for windows only. It operates
behind the scenes to insert a regular expression into a window’s label
description.
The regexp_MSW_class property inserts a regular expression into an
object’s MSW_class. It is obligatory for all types of windows and for
the object class object.
Q:How do you suppress a regular expression?
We can suppress the regular expression of a window by replacing the regexp_label property with label property.