The goal of the present QTP tutorial is to describe:
How to get number of controls (Links, Edits, Images, etc) with QTP DP.
Let's investigate Descriptive Programming on examples.
First of all, we should understand what Descriptive Programming means:
What is QuickTest Professional Descriptive Programming (QTP DP)?
Answer: QTP DP is a run-time processing of objects which are not located in QTP Object Repository.
I've created new QTP script which starts with http://labs.google.com/sets page.
This QTP script is simple enough:
Set Desc = Description.Create()
Desc("micclass").Value = "WebEdit"
Set Edits = Browser("Google Sets").Page("Google Sets").ChildObjects(Desc)
MsgBox "Number of Edits: " & Edits.Count
And its result is:Desc("micclass").Value = "WebEdit"
Set Edits = Browser("Google Sets").Page("Google Sets").ChildObjects(Desc)
MsgBox "Number of Edits: " & Edits.Count
As you can see, it works correctly and returns correct number of Edits on a page.
I'm going to explain this QTP script and answer the following question:
How does QTP Descriptive Programming work?
First of all, I've created new Description object: Set Desc = Description.Create()
Description object contains collection of properties, which identify any UI object such as a browser, a page, a dialog, a list, a button etc.To specify that we want identify all Edits on browser's page I use "micclass" property:
Desc("micclass").Value = "WebEdit"
Note: the "mic" prefix in "micclass" stands for "Mercury Interactive Constant".How do you know the class name ("micclass") of object?
Use Spy for that:
Open QTP object Spy and check recorded properties of object.
For example, these are properties of Edit:
As you can see, there is "Class Name" property and its value - "WebEdit". So, "WebEdit" is a value of Class Name of all Edits located on Web page.
Note: "Class Name" is a synonym of "micclass".
I gathered Class Names of Web objects in this table:
# | Type of Web object | Class Name(micclass) |
1 | Web Browser | Browser |
2 | Page | Page |
3 | Edit box | WebEdit |
4 | Image | Image |
5 | Link | Link |
6 | Web Element | WebElement |
7 | Button | WebButton |
8 | Checkbox | WebCheckBox |
9 | Combobox (DropDownList) | WebList |
10 | Table | WebTable |
Since we created Description object for all edit boxes, we can use this description to get all specified objects ( = edit boxes).
The next step returns the collection of all child objects (i.e. edit boxes) contained within the page:
Set Links = Browser("Google Sets").Page("Google Sets").ChildObjects(Desc)
To get the number of found objects in a returned collection, we use Count property:
MsgBox "Number of Edits: " & Links.Count
And the result is 5 found Edits on Google Sets page:
So, this is a mechanism of QuickTest Professional Descriptive Programming.
Also, we can use the same code to get number of others objects - Links, Images, Buttons, etc.
For that I modified QTP script:
Function GetAllSpecificControls(Page, MicClass)
Set Desc = Description.Create()
Desc("micclass").Value = MicClass
Set GetAllSpecificControls = Page.ChildObjects(Desc)
End Function
Function GetAllEdits(Page)
Set GetAllEdits = GetAllSpecificControls(Page, "WebEdit")
End Function
Function GetAllButtons(Page)
Set GetAllButtons = GetAllSpecificControls(Page, "WebButton")
End Function
Function GetAllLinks(Page)
Set GetAllLinks = GetAllSpecificControls(Page, "Link")
End Function
Function GetAllImages(Page)
Set GetAllImages = GetAllSpecificControls(Page, "Image")
End Function
Set oPage = Browser("Google Sets").Page("Google Sets")
MsgBox "Number of Edits: " & GetAllEdits(oPage).Count
MsgBox "Number of Buttons: " & GetAllButtons(oPage).Count
MsgBox "Number of Links: " & GetAllLinks(oPage).Count
MsgBox "Number of Images: " & GetAllImages(oPage).Count
The result of this QTP script is the following:Set Desc = Description.Create()
Desc("micclass").Value = MicClass
Set GetAllSpecificControls = Page.ChildObjects(Desc)
End Function
Function GetAllEdits(Page)
Set GetAllEdits = GetAllSpecificControls(Page, "WebEdit")
End Function
Function GetAllButtons(Page)
Set GetAllButtons = GetAllSpecificControls(Page, "WebButton")
End Function
Function GetAllLinks(Page)
Set GetAllLinks = GetAllSpecificControls(Page, "Link")
End Function
Function GetAllImages(Page)
Set GetAllImages = GetAllSpecificControls(Page, "Image")
End Function
Set oPage = Browser("Google Sets").Page("Google Sets")
MsgBox "Number of Edits: " & GetAllEdits(oPage).Count
MsgBox "Number of Buttons: " & GetAllButtons(oPage).Count
MsgBox "Number of Links: " & GetAllLinks(oPage).Count
MsgBox "Number of Images: " & GetAllImages(oPage).Count
You can compare the result with the initial web page (see first image in the present article) and verify that QTP Descriptive programming works correctly - it returns correct numbers of objects.
Summary:
- I've explained and shown the mechanism of QuickTest Professional Descriptive Programming (QTP DP).
- The present QTP tutorial explains how to get number of different objects - Edits, Links, Images, Buttons, etc.
I hope, that this article has helped you to understand QTP DP.
The future QTP tutorials will cover others questions on QTP Descriptive Programming.
Related articles:
- QTP Descriptive Programming - How to perform operations on objects
- QTP Descriptive programming - Processing images
- QTP Descriptive Programming - How to close browsers
- QTP VIDEO - How to capture dynamic text
- QTP - How to get font size/color, background color and other attributes of controls
- All QTP visual tutorials
Have you got interested materials or your own thoughts on QTP (QuickTest Professional)?
Let's share them and help each other to improve our skills and knowledge!
You can send them to my email:
Thank you in advance, dear readers.
40 comments:
Good going Dmitri....the "mic" abbreviation was new to me :) thanks a lot.... Is there any situation where we will use Descriptive Programming "ONLY" for automation... i.e. without using record and play ? Is that advisable and efficient?
HI,
I copied and pasted the script in my QTP window and tried running the script which kept getting runtime error at line 3:
Set Links = Browser("Google Sets").Page("Google Sets").ChildObjects(Desc)
Do I need to record anything in QTP or do something in Object repository before running the script?
Thanks for the input.
script does not work..causes runtime error..i copied n pasted the script
2Anonymous,
Yes, you should open Google Sets page and add it into QTP Object Repository (OR
The following construction:
Browser("Google Sets").Page("Google Sets").
uses browser and page defined in OR.
2SAP,
It works! If you can start it :)
I've just shown how to run it. See my above comment
i like qtp scripting and currently working on it.i have some doubt in DP ,SO KINDLy explain it with example with more DP videous, it will be helpfull for me and everybody.
Anjal
2coolguy123,
Please motivate me to create videos on DP :)
It was really excellent code mentioned here and really hardwork done bt you. :)
I have a samll query incase it looks interesting to all of you.
I have a portal where 10links are appeared at every page. I need to click each of them but for this I need to add all 10objects in OR so if I have 100 pages then its 1000 objects in OR which is no good.
So can u suggest some code where we can use one generic object in OR to click all 10links each time.
Thanks
Max
2Marx,
Please read Related articles for the present one.
I think QTP Descriptive Programming - How to perform operations on objects will help you to get all required links and perform operations on them, for example to click them.
Hi, can you help me in capturing a checkbox value using GetRoProperty please
Raj,
WebCheckBox("chbName").GetROProperty("Value")
kudos man, you have done great job..we are sincerely saying thanks..keep continue..we have question for you. We cannot able to identify file or edit in menu bar, it is showing all objects as one object could u plz send code for this..my email id:sirihari3@yahoo.co.in
Anonymous,
Please send your question to QTP group
Hi,
I am getting an error on this line of code: Set Edits = Browser("Google Sets").Page("Google Sets").ChildObjects(Desc)
I have added the all the related objects in the Object Repository before running this script. Also, tried to debug it, it is giving unspecified error.
Please update on this if possible.
CHEERS
Vijay
Vijay,
Please read this topic.
I'm sure I contains the answer for your question.
I am getting an error on this line of code: Set Edits = Browser("Google Sets").Page("Google Sets").ChildObjects(Desc)
Kindly help me to solve it
Cheers,
Anita
to Anonymous/Anit,
Answered in above comments.
Hi
your videos on o/p values is really superb.
I have problem in "QTP Descriptive Programming - number of objects" in that by using object spy it shows two webtables after that webedit is displayed
Yesterday i worked correctly i got the proper o/p what you said.
Now i got this error
could you explain me for reason this happens
How can I explain reasons of the error if you didn't provide the error message?
Thanx..u r doing a gr8 job
can u pls let me know whts wrong in here....I m getting a general run error....
Set brodesc=description.Create()
brodesc("micclass").value="browser"
brodesc("title").value="Google Sets"
Set pagedesc=description.Create()
pagedesc("micclass").value="page"
pagedesc("title").value="Google Sets"
Set linkdesc=description.Create()
linkdesc("micclass").value="link"
Set alllinks=page(pagedesc).ChildObjects(linkdesc)
msgbox"No. of links "&alllinks.count
@Niki,
You missed Browser object.
Change this line:
Set alllinks=page(pagedesc).ChildObjects(linkdesc)
like this:
Set alllinks=browser(brodesc).page(pagedesc).ChildObjects(linkdesc)
hi
Dimitry thanks for your response
yesterday i ask doubt in
http://motevich.blogspot.com/2008/08/qtp-descriptive-programming-number.html
Initially i got the code as
Browser("Google Sets").Page("Google Sets").Sync
Browser("Google Sets").Close
after that i modified what you said in your blog and run the script, it shows "general run error"
In OR browser and page only present
am i correct i think u understand my doubt.
please i want this ouput in my system
what can i do
@Johnson,
I do not see your yesterday's comments.
Also, plese provide detailed info about your issue - source code, error message, line#, what did you try and its resutls, and so on.
Since you didn't provide such info, I cannot answer.
i got the output motevich by the method using in images
At bottom u gave the tips u know.
thanks dmitry
Even if I use this description for browser,
Set brodesc=description.Create()
brodesc("micclass").value="browser"
brodesc("title").value="Google Sets"
I have got to add the browser object to the object repository....only then I m not getting the general run error in line
Set alllinks=browser(brodesc).page(pagedesc).ChildObjects(linkdesc)
why is that?
Hi dmitri
I m sorry...actually it works fine even without adding the browser object to the OR
the mistake that I have done was
I have used
linkdesc("micclass").value="link"
instead of
linkdesc("micclass").value="Link"
(capital 'L' in "link")
Thanx...:)
In v9.5 this code should be corrected :
Desc("micClass").Value = "WebEdit"
has to be
Desc("micclass").Value = "WebEdit"
"micClass" results in an Run Time error.
Just an FYI :-)
Thanks to the article Dmitry
@Ganesh Babu N R,
You are right. Thank you!
I've edited the article and changed "micClass" to "micclass".
BTW, on screenshots I used correct form ("micclass").
Thank you for attention, Ganesh. :)
Thanks, it was very useful
Dmitri,
Your article gives a good insight in to Descriptive programming using QTP.
I have a question though. Doesn't one use DP to avoid using the OR. Feels like using OR defeats the purpose of introducing DP in to your testing.
Yesh
@Yesh,
The main purpose to use DP is a processing of dynamic objects (buttons, edits, link).
You can know properties of such objects during run-time session only.
That;s why you cannot create these objects into OR.
Thank you very much for all of your articles. They are fantastic.I learned a lot. I have a question here. when I run this program it is giving number of edit class =0 in message box.
what did I do wrong.Could you please tell me
@Anonymous (January 29, 2009),
Maybe, you didn't open an initial page (Google Sets).
Hi Dmitri,
i have a webedit inside the webtable in my application.
i need to set a value in the webedit.....can u help me with the function.
Hi,
I became a big fan your site, and using most of your code skills in my current project.
I have an object by name CUSTNUM and its created thru OR. Now the same object during run time i want to capture the object and update the OBJ CUSTNUM. I am able to capture the object during runtime but i dont know how to update the object onto OR.
Any help is greatly appreciated.
thanks,
BadeRaju
how to SelectAll text(CTRL+A) using QTP mine is an edit box in the application.I tried Sendkeys not working..Pls help
hi,
How to SELECTALL text(CTRL+A) in qtp.Send keys aint working.pls help
HI,
I copy pasted the code.
I also opened the google labs page and created the object in OR.
I still get the error message as "Google Sets" Browser object was not found in OR. Check the OR to confirm that object exists or to find correct name for the object.
Please help me to proceed.
How to Write a DP for following web site:(object spy display 6 thing in this web page)
Browser:
Page:
WebTable:HOME
WebTable:Parent Registraion
WebTable:Parent Registraion (Again)
WebEdit:
Can we do the same thing to count the number of objects in a window application?
Post a Comment