How QTP identifies objects?--Complete Refresher | Quick Test Professional(QTP)
.
QTP Blog RSS

How QTP identifies objects?--Complete Refresher

Here I am reproducing one of the most important extract from QTP help section. If you understand this part be assured you of your success in QTP Job interviews, other question that follow will be of very elementary nature.



When QuickTest uses the learned description to identify an object, it searches for an object that matches all of the property values in the description. In most cases, this description is the simplest way to identify the object, and, unless the main properties of the object change, this method will work.

If QuickTest is unable to find any object that matches the learned object description, or if it finds more than one object that fits the description, then QuickTest ignores the learned description, and uses the Smart Identification mechanism to try to identify the object.

While the Smart Identification mechanism is more complex, it is more flexible. Therefore, if configured logically, a Smart Identification definition can probably help QuickTest identify an object, if it is present, even when the learned description fails.

The Smart Identification mechanism uses two types of properties:

· Base Filter Properties—The most fundamental properties of a particular test object class; those whose values cannot be changed without changing the essence of the original object. For example, if a Web link's tag was changed from {A} to any other value, you could no longer call it the same object.

· Optional Filter Properties—Other properties that can help identify objects of a particular class. These properties are unlikely to change on a regular basis, but can be ignored if they are no longer applicable.



Understanding the Smart Identification Process

If QuickTest activates the Smart Identification mechanism during a run session (because it was unable to identify an object based on its learned description), it follows the following process to identify the object:



1. QuickTest "forgets" the learned test object description and creates a new object candidate list containing the objects (within the object's parent object) that match all of the properties defined in the Base Filter Properties list.



2. QuickTest filters out any object in the object candidate list that does not match the first property listed in the Optional Filter Properties list. The remaining objects become the new object candidate list.



3. QuickTest evaluates the new object candidate list:

o If the new object candidate list still has more than one object, QuickTest uses the new (smaller) object candidate list to repeat step 2 for the next optional filter property in the list.

o If the new object candidate list is empty, QuickTest ignores this optional filter property, returns to the previous object candidate list, and repeats step 2 for the next optional filter property in the list.

o If the object candidate list contains exactly one object, then QuickTest concludes that it has identified the object and performs the statement containing the object.



4. QuickTest continues the process described in steps 2 and 3 until it either identifies one object, or runs out of optional filter properties to use.

If, after completing the Smart Identification elimination process, QuickTest still cannot identify the object, then QuickTest uses the learned description plus the ordinal identifier to identify the object.

If the combined learned description and ordinal identifier are not sufficient to identify the object, then QuickTest stops the run session and displays a Run Error message.



Reviewing Smart Identification Information in the Test Results

If the learned description does not enable QuickTest to identify a specified object in a step, and a Smart Identification definition is defined (and enabled) for the object, then QuickTest tries to identify the object using the Smart Identification mechanism.

If QuickTest successfully uses Smart Identification to find an object after no object matches the learned description, the Test Results receive a warning status and indicate that the Smart Identification mechanism was used.

If the Smart Identification mechanism cannot successfully identify the object, QuickTest uses the learned description plus the ordinal identifier to identify the object. If the object is still not identified, the test or component fails and a normal failed step is displayed in the results.



Walking Through a Smart Identification Example

The following example walks you through the object identification process for an object.

Suppose you have the following statement in your test or component:

Browser("Mercury Tours").Page("Mercury Tours").Image("Login").Click 22,17

When you created your test or component, QuickTest learned the following object description for the Login image:





However, at some point after you created your test or component, a second login button (for logging into the VIP section of the Web site) was added to the page, so the Web designer changed the original Login button's alt tag to: basic login.

The default description for Web Image objects (alt, html tag, image type) works for most images in your site, but it no longer works for the Login image, because that image's alt property no longer matches the learned description. Therefore, when you run your test or component, QuickTest is unable to identify the Login button based on the learned description. However, QuickTest succeeds in identifying the Login button using its Smart Identification definition.

The explanation below describes the process that QuickTest uses to find the Login object using Smart Identification:

1. According to the Smart Identification definition for Web image objects, QuickTest learned the values of the following properties when you recorded the click on the Login image:





2. QuickTest begins the Smart Identification process by identifying the five objects on the Mercury Tours page that match the base filter properties definition (html tag = INPUT and image type = Image Button). QuickTest considers these to be the object candidates and begins checking the object candidates against the Optional Filter Properties list.



3. QuickTest checks the alt property of each of the object candidates, but none have the alt value: Login, so QuickTest ignores this property and moves on to the next one.



4. QuickTest checks the name property of each of the object candidates, and finds that two of the objects (both the basic and VIP Login buttons) have the name: login. QuickTest filters out the other three objects from the list, and these two login buttons become the new object candidates.



5. QuickTest checks the file name property of the two remaining object candidates. Only one of them has the file name login.gif, so QuickTest correctly concludes that it has found the Login button and clicks it.

Step-by-Step Instructions for Configuring a Smart Identification Definition

You use the Smart Identification Properties dialog box, accessible from the Object Identification dialog box, to configure the Smart Identification definition for a test object class.



To configure Smart Identification properties:


1. Choose Tools > Object Identification. The Object Identification dialog box opens.

2. Select the appropriate environment in the Environment list. The test object classes associated with the selected environment are displayed in the Test object classes list.

Note: The environments included in the Environment list are those that correspond to the loaded add-in environments.



3. Select the test object class you want to configure.



4. Click the Configure button next to the Enable Smart Identification check box. The Configure button is enabled only when the Enable Smart Identification option is selected. The Smart Identification Properties dialog box opens:



5. In the Base Filter Properties list, click Add/Remove. The Add/Remove Properties dialog box for base filter properties opens.



6. Select the properties you want to include in the Base Filter Properties list and/or clear the properties you want to remove from the list.

Note: You cannot include the same property in both the base and optional property lists.

You can specify a new property by clicking New and specifying a valid property name in the displayed dialog box.

Tip: You can also add property names to the set of available properties for Web objects using the attribute/ notation. To do this, click New. The New Property dialog box opens. Enter a valid property in the format attribute/ and click OK. The new property is added to the Base Filter Properties list. For example, to add a property called MyColor, enter attribute/MyColor.



7. Click OK to close the Add/Remove Properties dialog box. The updated set of base filter properties is displayed in the Base Filter Properties list.



8. In the Optional Filter Properties list, click Add/Remove. The Add/Remove Properties dialog box for optional filter properties opens.



9. Select the properties you want to include in the Optional Filter Properties list and/or clear the properties you want to remove from the list.

Note: You cannot include the same property in both the base and optional property lists.

You can specify a new property by clicking New and specifying a valid property name in the displayed dialog box.

Tip: You can also add property names to the set of available properties for Web objects using the attribute/ notation. To do this, click New. The New Property dialog box opens. Enter a valid property in the format attribute/ and click OK. The new property is added to the Optional Filter Properties list. For example, to add a property called MyColor, enter attribute/MyColor.



10. Click OK to close the Add/Remove Properties dialog box. The properties are displayed in the Optional Filter Properties list.

11. Use the up and down arrows to set your preferred order for the optional filter properties. When QuickTest uses the Smart Identification mechanism, it checks the remaining object candidates against the optional properties one-by-one according to the order you set in the Optional Filter Properties list until it filters the object candidates down to one object.



If you want to keep track of further articles on QTP. I recommend you to subscribe via RSS Feed. You can also subscribe by Email and have new QTP articles sent directly to your inbox.



Note: Please use the Testing Tools forum for posting questions now!

24 comments:

Shiva said...

Hi Ankur,

I added a new property in the "Base Filter Properties" by clicking on the "New" button. But I am not able to delete that property. Can you tell me how I can delete the new property that I created?

Ankur said...

Hi Shiva,
Simply un-check the property created by you.I dont think you would be able to "delete" the property. If you do, please let me also know about that :)

Regards,
Ankur

Deepika said...

Hi Ankur,
Don't you think you missed an important refernce to manadatory & assistive properties before smart identification method is invoked in your writeup of 'How QTP identifies object'?

Ankur said...

@Deepika: You raised a nice point, I would say that this para When QuickTest uses the learned description to identify an object, it searches for an object that matches all of the property values in the description. In most cases, this description is the simplest way to identify the object, and, unless the main properties of the object change, this method will work. sums it all. In interviews, I see most people goof up on the area of Smart-Identification.
But yes I do acknowledge, I have not written explicitly about mandatory and assistive properties.

Anonymous said...

Hi,

I have a question about how the object identification settings are stored and recorded.

When I create a new test and record with particular Object ID settings is it possible to save the settings just for a particular test?

The reason for this is that I have VbComboBox which is getting found unless only the "vbName" is selected and nothing else

Thanks

Meads

roopa dilip said...

Hi,
I am a newbie in QTP please help me by answering my query.
I have a testcase wherein I can automate testing of few actions and few actions requires manual testing.
How can I integrate both maunal and automation testing for a given test case?

Anonymous said...

Hi Ankur,
You are doing great job here
thanks for ur help
I am new for QTP
iam able to recording but unable to playback the script, some edit fields giving problems i dont know exactly what is the problem i did object repository but same problem repeating
If anybody know give me suggestions
Thanks

Anonymous said...

Hi, In the OR, I need to map an object that is a link to an external website and have the test verify the URL is the same as expected. Can I include the destination URL as part of the object, i.e. not the current session URL.
Thanks

Ankur said...

@ Meads:
If you are using QTP 6.5 or above version you can generate .vbs file on Object identification setting tab and use this vbs file for the particular script only

@RoopaDilip: I can simply say that either automate upto the point where automation is feasible or ignore those scripts(for automation) where manual intervention is required.

@ Anon(2): Yes you can do that...Whats the problem?

Anonymous said...

Hi Ankur,

I worked on above specified scenario and had a doubt. The doubt is

1. I disabled smart identification for webimage in Object identification window, recored the script and saved the object repository.
2.I reopend the qtp and loaded the OR and recorded script. At this time I was tried to enable the smart identification for webimage in Object identification window. But in OR window, for webimage objects, Smart identification option was in disable state only.

In this situation, How could I enable SI for webimange?

TestingWheel said...

Hi Ankur,

I have lots of ambiguities on SI usage and advantages ..finally got all the answers to this feature ...
great work....I must appreciate yor approach to explain in detail...

Malleswari.

i-me-myself said...

Hi Ankur/fellow testers,

I am currently trying to run QTP scripts which were recorded on a PC- PC1, on one of my PCs- PC2 and the script continually fails at points where it does not find objects in the repository. I am forced to re-record time and again to solve this problem.
Right now, I am doing this step where I'm logged into Outlook and am trying to select File --> Open.
I get the following error for the Context Menu object
"
The "ContextMenu" object was not found in the Object Repository.
Check the Object Repository to confirm that the object exists or to find the correct name for the object.
Line (36): "Window("Outlook Express").WinObject("Outlook Express Message_2").WinMenu("ContextMenu").Select "Open Ctrl+O"".
"
How do we avoid this problem while porting between PCs? One of the approaches I tried was to export the objects in PC1 and save it as a .tsr file which i copied into the other pc, PC2. In PC2, I tried to import this tsr file by pasting the following bit of code in my qtp script:
Dim App 'As Application
Set App = CreateObject("QuickTest.Application")
App.Test.Settings.Resources.ObjectRepositoryPath ="c:\act.tsr"
However, this failed with the error:
You cannot change the object repository type for this test.
Line (3): "App.Test.Settings.Resources.ObjectRepositoryPath ="c:\act.tsr"".

Any idea? We are wasting a lot of time having to re-record/add objects which are not recognized.
Appreciate any help.
Thanks so much.

Ram said...

Hi,
I like this QTP blog site. How can I post the questions? I'm new to QTP. I just started a .net project. I'm able to open the application automatically and recored some steps. But when I'm running the test, application is opening and rest of the steps are not running at all. is any body can help me?
Regards
Ram.

Sujata said...

Hi ,

I am trying to automate a progress based application(windows based ).In one screen, I have nmore than one edit field, contxt recording is not working...DP is also not successful..QTP is unable to identify the attached text property related to the edit fields..so its not unable to recognize..Can anyone tell me..what to do next...I tried analog recording..it works but If I close QTP and open it gain,the same script fails...I have tried low level recording.that also fails....please suggest me..

Anonymous said...

Hello,
I do not understand why when the Smart Identification mechanism cannot successfully identify the object, QuickTest uses the learned description plus the ordinal identifier to identify the object. Before using Smart Identification mechanism, we already used the learned description method that did not successfully identify the object.

Thank you to make this point clear.

Anonymous said...

am currently trying to run QTP scripts which were recorded on a PC- PC1, on one of my PCs- PC2 and the script continually fails at points where it does not find objects in the repository. I am forced to re-record time and again to solve this problem.
Right now, I am doing this step where I'm logged into Outlook and am trying to select File --> Open.
I get the following error for the Context Menu object
"
The "ContextMenu" object was not found in the Object Repository.
Check the Object Repository to confirm that the object exists or to find the correct name for the object.
Line (36): "Window("Outlook Express").WinObject("Outlook Express Message_2").WinMenu("ContextMenu").Select "Open Ctrl+O"".
"
How do we avoid this problem while porting between PCs?

Hello,

QTP can't recognize outlook. Inorder to make QTP identify your outlook object, you need to install Outlook spy ( as object spy). You even need have knowledge of API's (MAPI's)provided by microsoft to work with outlook.

Joseph said...

Hi Ankur,

A lot of Thnx....

Nintu said...

Hi Ankur,

I am working on a PowerBuilder application. While using Object Spy on the data-window, QTP does not recognise the objects within the data-window. The parent data-window contains few text boxes, chk boxes and drop down lists. Please suggest some method to identify those objects.

Thanks,
Nintu

Suresh said...

Hi,

I am recording using QTP and for some reason QTP does not recognize any upload buttons. For example, start the recording at this site: http://cgi-lib.berkeley.edu/ex/fup.html
Click on the "Browse" button
Notice this click is not recognized by QTP. Please provide some feedback why QTP is not able to recognize this button. Thanks.

Ankur said...

@Suresh: I have answered your question here

Anonymous said...

Hi Ankur,

I have a question,

When my browser objects are redesigned( moved the object in to new position, Added new objects on screen etc). Then should I change the script written for that page totally? How to handle this situation in an easy way with out affecting entire script.

When new features are added in every new release of a project, How to handle QTP script?

pramod said...

Hi Ankur,
When u save QTP test i will be saved in folder form, ok...
Please open the saved test folder, now you will see a folder named Action(0), wt is this action(0)...Wts the use of it...

Action(0) in all the test tht u have save, please brief me about it...

Anonymous said...

Hi Ankur,
When u save QTP test i will be saved in folder form, ok...
Please open the saved test folder, now you will see a folder named Action(0), wt is this action(0)...Wts the use of it...

Action(0) in all the test tht u have save, please brief me about it...

Anonymous said...

Hi,

I'm new to QTP, just installed QTP 10 trial on Windows 7 and IE 8. I tried to use Object Spy to capture Test objects on Mercury Tours login page but it records Object as Nmae: Windows Internet Explorer and Edit, Edit_2, Edit_3. It does not record Mercury Tours as browser name and WebEdit:userName. I have web add-in. Could you please clarify.

Thanks