Você está na página 1de 22

Imagine simple and practical QTP tasks:

• How to count all links on Web page?


• How to get them and click each link?
• How to get all WebEdits and check their values?

I'm going to show 4 approaches how to get lists of UI controls and process them (for example get their count).
As an example, I will work with links on Google Labs page. My goal is to get the list of links and count them.

I've added Google Labs page to my Object Repository and now it looks like:

I use Object Repository (OR) to simplify my demo-scripts.


Since the browser & the page were added to OR, we can use them later like:
Browser("Google Labs").Page("Google Labs").

Now we are ready to start!


1. QTP Descriptive Programming (QTP DP) and ChildObjects QTP function
The approach uses Description object, which contains a 'mask' for objects we would like to get.
QTP script is:
Set oDesc = Description.Create()
oDesc("micclass").Value = "Link"
Set Links = Browser("Google Labs").Page("Google Labs").ChildObjects(oDesc)
Msgbox "Total links: " & Links.Count
The result of this QTP script is:

ChildObjects returns the collection of child objects matched the description ("micclass" is "Link") and contained
within the object (Page("Google Labs")).
2. Object QTP property and objects collections
QTP can work with DOM:

Set Links = Browser("Google Labs").Page("Google Labs").Object.Links


Msgbox "Total links: " & Links.Length
I use Object property of Page object. It represents the HTML document in a given browser window.
This document contains different collections - forms, frames, images, links, etc.
And we use Length property to get the number of items in a collection.

The result is the same as for the previous QTP script:

3. Object QTP property and GetElementsByTagName method


Again, we can get access to the HTML document and use its GetElementsByTagName method.
As the name says, GetElementsByTagName method returns a collection of objects with the specified tag.
Since we are going to get all link, we should use "a" tag.

QTP script is:


Set Links = Browser("Google Labs").Page("Google Labs").Object.GetElementsByTagName("a")
Msgbox "Total links: " & Links.Length
The result is the following:

Note: There is another way how to select objects by tag name:


Set Links = Browser("Google Labs").Page("Google Labs").Object.all.tags("a")
Msgbox "Total links: " & Links.Length
The result will be the same. 69 link will be found.

4. XPath queries in QTP


The idea of this approach is to use XPath queries on a source code of Web page.
For example, "//a" XPath query returns all "a" nodes (= links) from XML file.

There is one problem. Web page contains HTML code, which looks like XML code but actually it is not.
For example:
o HTML code can contain unclosed img or br tags, XML code cannot.
o HTML code is a case-insensitive markup language, XML is a case-sensitive markup language, etc
More details here.
So, we have to convert HTML source code into XML. The converted code is named as XHTML.

You can convert HTML documents into XHTML using an Open Source HTML Tidy utility.
You can find more info about how to convert HTML code into XHTML code here.

I will use the final QTP script from this page, a bit modified:
' to get an HTML source code of Web page
HtmlCode = Browser("Google Labs").Page("Google Labs").Object.documentElement.outerHtml

' save HTML code to a local file


Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile("C:\HtmlCode.html", True, -1)
f.Write(HtmlCode)
f.Close()

' run tidy.exe to convert HTML to XHTML


Set oShell = CreateObject("Wscript.shell")
oShell.Run "C:\tidy.exe --doctype omit -asxhtml -m -n C:\HtmlCode.html", 1, True ' waits for tidy.exe to be
finished

' create MSXML parser


Set objXML = CreateObject("MSXML2.DOMDocument.3.0")
objXML.Async = False
objXML.Load("C:\HtmlCode.html")

XPath = "//a" ' XPath query means to find all links


Set Links = objXML.SelectNodes(XPath)
Msgbox "Total links: " & Links.Length
Note: you can download tidy.exe here for above QTP script.

This QTP script leads to the same results - 69 links found:

(Click the image to enlarge it)


5. Bonus approah
Why don't you count all Wen page objects manually? :) Open a source code of the page and start counting :)
Just joking :)
Summary:
• I shown 4 practical approaches how to count Web page links.
Similarly you can process images, webedits, etc
• Each approach gets a list of objects.
• First approach (QTP DP + ChildObjects) is the most easy
• Second & third approaches (Object + collections; Object + GetElementsByTagName) will work on Internet
Explorer, because they use DOM methods
• Fours approach is biggest but it is more powerful. It allows to use complex XPath queries.
I'm going to explain and show QTP Descriptive Programming (DP) through Google Sets site:

(click image to enlarge it)

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:

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:

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.

Today I faced with the following task with QTP (QuickTest Professional) - how to get some attributes (such as: font size,
font color, background color and so on) for any control on a web page?

Piece of cake! :)
Let's see ways how it can be done.

The task: get font size, font color, background color and others possible parameters from the gmail.com start page:

The solution:
1. First of all, I tried to use GetROProperty method.
I selected "Welcome to Gmail" label with QTP object spy and added them to Object Repository:

Well, now I know the class of web control -


WebElement.

Then, I open QuickTest Professional Help, search for "WebElement Identification Properties" and see that there are
not needed properties (font name, font color, size, ...).

Help reading shown that it is possible to get needed properties for some objects, for example, for Link. Please,
see "Link Identification Properties" from the QTP Help:

Property Name: Description


o background color: The link's background color.
o color: The link's color.
o font : The link's font.
So, these properties work correctly for Link. For example, the following code:
Browser("Welcome to Gmail").Page("Welcome to Gmail").Link("About Gmail").GetROProperty("color")
returns value #0000ff for "About Gmail" link:

In terms of RGB (red-green-blue), the value #0000ff


means that blue-color is enabled.
It looks like truth :)

This approach (GetROProperty method) has a limitation - it can be applied for some objects. In my case (I use
WebElement object) this methods cannot be applied.

Thanks to Mr. Google :) It found an appropriate solution:


2. currentStyle object!
The main idea is to read:
WebElement("SomeName").Object.currentStyle.someProperty
For example, use:
o color property to get the color of the text
o backgroundColor property to get the backgroung color (behind the content of the object)
o fontSize property to get the font size
o fontStyle property to get the font style
o fontFamily property to get the font family
o fontWeight property to get the font weight
o and so on

Please, read more detailed info on properties of currentStyle object:

So, I used this code in my QTP script:

Dim ctrlWebEl, objWebEl

Set ctrlWebEl = Browser("Welcome to Gmail").Page("Welcome to Gmail").WebElement("Welcome to


Gmail")
Set objWebEl = ctrlWebEl.Object

sColor = objWebEl.currentStyle.color
sBackgrColor = objWebEl.currentStyle.backgroundColor
sFontSize = objWebEl.currentStyle.fontSize
sFontStyle = objWebEl.currentStyle.fontStyle
sFontFamily = objWebEl.currentStyle.fontFamily
sFontWeight = objWebEl.currentStyle.fontWeight

Result is:
The last thing I have to do is to get a numerical value of background color.
For that I recorded another object - WebElement("corner_tl"):

Note: when recording, click at the right of "Welcome to Gmail" text.

I executed my QTP script for that WebElement and got results:

Background color is #c3d9ff

Now, I think, mission is completed :)


All attributes (font size/color/weight, backgroung color) are gathered.
Summary: The simple way to get different attributes of controls from QTP is a usage of currentStyle object .

This is very useful feature - minimize QTP window before script execution. It allows to observe a desktop or an
application under test wholly.

I will show and describe how to minimize (or maximize) QTP window programmatically - i.e. from QTP script.
Also, provided approach can be applied to minimize (maximize) any required window - Browser, Notepad, MS Word
or Excel, and so on.
There are two ways to minimize QTP window:
1. Using Minimize method of Window object
2. Using QTP Application object - QuickTest.Application

These methods will contain several lines only and I hope that my explanations will be understandable.
So, let's explore!
1. Using Minimize method of Window object
<!--[if !supportLineBreakNewLine]-->You can use Minimize method of Window object to minimize QTP
window (or any other).

Let's see two cases - when a window is located in Object Repository (OR) and widows is not located in OR.
o If a window is located in Object Repository (OR), then minimizing can be performed using the
following code:

1. hWnd = Browser("browser_name").GetROProperty("hwnd")
2. Window("hwnd:=" & hWnd).Minimize

In first line, we get window handle (hWnd) of Browser object . And then we pass this handle to
Window object and minimize it.
Obviously, that we can use the same approach to maximize window (use method):

3. hWnd = Browser("browser_name").GetROProperty("hwnd")
4. Window("hwnd:=" & hWnd).Maximize

o If a window is not located in Object Repository (OR), then we can use some run-time object properties
and descriptive programming to identify a window. For example, we can use window title.

Please, see a screen shot of QTP window:

QTP window title has a prefix -


'QuickTest Professional - ' followed by test name. I will use this prefix ('QuickTest Professional - ') with a
mask:

1. sTitleMask = "QuickTest Professional - .*"


2. Window("regexpwndtitle:=" & sTitleMask).Minimize

I use Regular Expressions.


Mask ".*" means "match any characters zero or more times". So, this mask will identify QTP window,
and this code will minimize it.

The same approach can be applied to Browser.


See a screen shot of this browser:
In this case, browser has prefix 'Google - '. So, I will use it as the mask:

3. sTitleMask = "Google - .*"


4. Browser("regexpwndtitle:=" & sTitleMask).GetROProperty("hwnd")
5. Window("hwnd:=" & hWnd).Minimize

Well, you can use any approach you like. All of them work and minimize/maximize windows
correctly.

2. Using QTP Application object - QuickTest.Application


Since this approach uses QuickTest Automation Object Model, it can be applied to QTP window only.

There is a procedure, which minimizes QTP window:

1.Sub MinimizeQTPWindow ()
2. Set qtApp = getObject("","QuickTest.Application")
3. qtApp.WindowState = "Minimized"
4. Set qtApp = Nothing
5.End Sub

To minimize QTP window, just execute MinimizeQTPWindow () procedure:

6.MinimizeQTPWindow

For detailed information, I recommend to Read QTP Help > QuickTest Automation Object Model Reference.
Since QuickTest Automation Object Model does not use UI, second approach is more stable.
But first method is more flexible - it allows working with browsers and stand-alone windows.
In any case, I recommend to read and explore both approaches.

How to delete objects from the object repository?


Removing objects from a local object repository:
1. Go to Resources -> Object Repository.
2. In the Filter combobox, select “Local Objects.”
3. In the object tree, select the object to be removed.
4. Click the delete toolbar button.
5. Click <Yes> to confirm the deletion.
6. Save the test to save the updated local repository.
The object, and any children it may have, will be removed.
Removing objects from a shared object repository:
1. Go to Resources -> Object Repository Manager.
2. Go to File -> Open. Navigate to the desired Shared Object Repository file.
3. By default, the repository will open in read-only mode. Go to File -> Enable Editing.
4. In the object tree, select the object to be removed.
5. Click the delete toolbar button.
6. Click <Yes> to confirm the deletion.
7. Save the updated shared repository.
The object, and any children it may have, will be removed.
How to add objects to the object repository (QTP 9.0)?
September 17, 2007 by Amit
Adding objects to a local object repository:
An object can be added to the local object repository in one of the following ways:
1. Record some actions on the object; this will automatically add this object to the object repository. If you do not need
the recorded statements in your script, you can delete them and it will not remove the added object from the object
repository.
2. Add objects manually.
1. Go to Resources -> Object Repository.
2. In the Filter combobox, select “Local Objects.”
3. Go to Object -> Add Objects to Local.
4. Click on the object to be added to the repository.
5. If the Object Selection window appears, select the desired object, and click <OK>.
6. If the Add Object to Object Repository window appears, select the appropriate option:
To add only the selected object, select the “Only the selected object” radio button. To add the selected object
and its child objects of a specified type, select the “Selected object and its descendants of type” radio button.
Then, select the checkbox next to the child object types that should be added.
7. Click <OK>.
3. Manually define a new test object.
1. Go to Resources -> Object Repository.
2. In the Filter combobox, select “Local Objects.”
3. Go to Object -> Define New Test Object.
4. Select the appropriate Environment for your test object. For example, to add a Link object, select “Web.”
5. Select the desired test object class for the new object.
6. Enter a name for your test object.
7. Fill in the Test object details as needed. The Test object details area automatically contains the mandatory
properties defined for the object class in the Object Identification dialog box. You can add or remove properties
as required, and define values for the properties.
To add properties, click the “Add description properties” button (with the + icon). Select the properties to be
added and click <OK>.
To remove properties, select the properties to be removed, and click the “Remove selected description
properties” button (with the X icon)
8. Click <Add> to add the new object.
9. Repeat steps d through h as needed.
10. When done, click <Close>.
Note:
When you manually define an object, QuickTest Professional will not automatically add the object’s parent. If the
parent objects are not present, you will need to define them as well. Once the objects are added to the repository, you
can drag-and-drop them to their appropriate positions.
4. Add the object using the Active Screen.
1. In the Active Screen, right-click on the object to be added.
2. Select “View/Add Object.”
3. If the Object Selection window appears, verify the desired object is selected, and click <OK>.
4. In the Object Properties window, click <Add to Repository>.
Adding objects to a shared object repository:
An object can be added to a shared object repository in one of the following ways:
1. From a local repository.
2. Add objects manually.
1. Go to Resources -> Object Repository Manager.
2. Go to File -> Open -> <repository to open>.
3. By default the repository will open in read-only mode. Go to File -> Enable Editing.
4. Go to Object -> Add Objects.
5. Click on the object to be added to the repository.
6. If the Object Selection window appears, select the desired object, and click <OK>.
7. If the Add Object to Object Repository window appears, select the appropriate option:
To add only the selected object, select the “Only the selected object” radio button. To add the selected object
and its child objects of a specified type, select the “Selected object and its descendants of type” radio button.
Then, select the checkbox next to the child object types that should be added.
8. Click <OK>.
3. Manually define a new test object.
1. Go to Resources -> Object Repository Manager.
2. Go to File -> Open -> <repository to open>.
3. By default the repository will open in read-only mode. Go to File -> Enable Editing.
4. Go to Object -> Define New Test Object.
5. Select the appropriate Environment for your test object. For example, to add a Link object, select “Web.”
6. Select the desired test object class for the new object.
7. Enter a name for your test object.
8. Fill in the Test object details as needed. The Test object details area automatically contains the mandatory
properties defined for the object class in the Object Identification dialog box. You can add or remove properties
as required, and define values for the properties.
To add properties, click the “Add description properties” button (with the + icon). Select the properties to be
added and click <OK>.
To remove properties, select the properties to be removed and click the “Remove selected description
properties” button (with the X icon)
9. Click <Add> to add the new object.
10. Repeat steps d through h as needed.
11. When done, click <Close>.
Note:
When you manually define an object, QuickTest Professional will not automatically add the object’s parent. If the
parent objects are not present, you will need to define them as well. Once the objects are added to the repository, you
can drag and drop them to their appropriate positions.
4. Merge with another shared object repository
How to merge object repository files (QTP 9.0)?
September 17, 2007 by Amit
Merging a local object repository with a shared object repository:
To merge the contents of a local repository into a shared repository, the shared repository must be associated with the
action containing the local repository. In the Object Repository Manager, select the “Update from Local Repository”
option.
Updating the Shared Object Repository with the objects in the Local Repository will merge all objects from the Local
Repository into the Shared Repository. All objects will be removed from the Local Repository.
1. Save the script containing the Local Repository. Open a new test.
2. Go to Resources -> Object Repository Manager.
3. In the Object Repository Manager window, go to File -> Open, and select the Shared Object Repository file. Clear the
“Open in read-only mode” checkbox.
4. If the repository file opened in read-only mode, go to File -> Enable Editing.
5. Go to Tools -> Update from Local Repository.
6. Click the “Add Tests” icon button. If you are connected to a TestDirector for Quality Center with Business Process
Testing, you will have the option to browse for a test or a component. Select the appropriate choice.
7. Navigate to the test or component containing the Local Repository.
Note:
You can only add a test containing actions that are associated with the Shared Object Repository you are updating and
whose Local Object Repositories contain objects.
8. In the Update from Local Repository dialog, select the desired action.
9. Repeat steps 6 through 8 as needed.
10. Click <Update All>.
Note:
If the test using the Shared and Local Repositories is currently open, you may receive an error similar to the following:
“You cannot update this shared object repository from the <path> test’s local object repository because the test is
currently locked by ‘<username> on machine ‘<machine name>’. Wait for the test to be unlocked and then try to
perform the update operation for this test again.
If so, open a new test in QuickTest Professional to release (unlock) the test and repeat step 10.
11. Perform any steps needed to resolve conflicts.
12. If you are performing multiple merges, go to File -> Save and Merge Next to perform the next merge (the Local
Object Repository of the next action being merged into the Shared Object Repository).
13. Click <Yes> to save your changes between merges. If you click <No>, the current merge (objects merged from the
last action) will not be saved.
14. Repeat steps 11 through 13 to complete the multiple merges.
15. Choose File -> Exit, then click <Yes> to save the updated Object Repository.
Merging shared object repositories:
1. Open the Object Repository Manager.
2. Go to Tools -> Object Repository Merge Tool.
3. In the New Merge window, browse to the primary repository file. Mercury recommends selecting the repository file
you have invested the most time into as the primary repository file.
4. Select the secondary repository file.
5. Click <OK>.
6. Review the merge statistics, as described in Viewing Merge Statistics, and click <Close>.
7. Resolve any merge conflicts that were reported.
Resolving object conflicts:
Conflicts between objects in the primary and secondary object repositories are resolved automatically by the Object
Repository Merge Tool using default resolution settings. For information on defining the default settings, refer to the
QuickTest Professional User’s Guide (Help -> QuickTest Professional Help -> QuickTest Professional User’s Guide ->
Managing and Merging Object Repositories -> Merging Shared Object Repositories -> Defining Default Settings).
The Object Repository Merge Tool also allows you to change the way the merge was performed for each individual
object that causes a conflict.
1. In the object repository tree, select an object that has a conflict (there will be an icon to the left of the object name). The
conflicting objects are highlighted in the source repositories. A description of the conflict and the resolution method
used by the Object Repository Merge Tool is described in the Resolution Options pane.
2. In the Resolution Options pane, select a radio button to choose a resolution method. The target object repository is
updated according to your selection and redisplayed.
Note:
The resolution method the Merge Tool used is selected by default.
3. Click <Previous Conflict> or <Next Conflict> to jump directly to the next or previous conflict in the target object
repository hierarchy.
4. Repeat steps 1 through 3, as needed.
5. Save the merged object repository file
What is the QuickTest Automation Object Model and how is it used?
September 4, 2007 by Amit
You can use the QuickTest Professional Automation Object Model to write programs that automate your QuickTest
operations. The QuickTest Automation Object Model provides objects, methods, and properties that enable you to
control QuickTest from another application.The new QuickTest Professional Automation Object Model enables you to
automate test management.
You can now control virtually every QuickTest feature and capability using the objects, methods and properties
included in the QuickTest Professional Automation Object Model. Automation scripts make it easy to perform any
QuickTest operation multiple times in multiple tests without having to open the QuickTest application, for example,
• You can write a script that modifies the test object description properties in the Object Identification dialog box
and performs an update run on all tests in a specified file folder.
• After installing a new add-in, an automation script can associate this add-in to all relevant tests.
• You can write an automation script to run a selected batch of tests. For each test, you can retrieve the associated
add-ins list. Then, if the necessary add-ins are not already loaded, you can close QuickTest, load the necessary
add-ins, reopen QuickTest, and run the test.
• You can define your settings for a test in QuickTest, then click “Generate Script” in the Generate tab of the Test
Settings dialog box to generate an automation script based on the current test settings. You can then apply those
same settings automatically to multiple tests using the whole automation script or excerpts from the generated
file.
Example:
You can create and run an automation program from Microsoft Visual Basic that loads the required add-ins for a test,
starts QuickTest in visible or minimized mode, opens the test, configures settings that correspond to those in the
Options, Test Settings, and Record and Run Settings dialog boxes, runs the test, and saves the test.
Creating automation programs:
The Properties tab of the Test Settings dialog box, the General tab of the Options dialog box, and the Object
Identification dialog box each contain a “Generate Script” button. Clicking this button generates a automation script file
(.vbs) containing the current settings from the corresponding dialog box.
You can run the generated script as is to open QuickTest with the exact configuration of the QuickTest application that
generated the script, or you can copy and paste selected lines from the generated files into your own automation script.
Generating an automation script for QuickTest Professional options:
1. Go to Tools -> Options.
2. Select the General tab.
3. Click <Generate Script>.
4. Save the script to the desired location.
5. Click <OK> to close the Options dialog.
Generating an automation script for test settings:
1. Go to Test -> Settings.
2. Select the Properties tab.
3. Click <Generate Script>.
4. Save the script to the desired location.
5. Click <OK> to close the Test Settings dialog.
Generating an automation script for object identification settings:
1. Go to Tools -> Object Identification.
2. Click <Generate Script>.
3. Save the script to the desired location.
4. Click <OK> to close the Object Identification dialog.
The QuickTest Automation Object Model Reference file is a help file that provides detailed descriptions, syntax
information, and examples for the objects, methods, and properties in the QuickTest Automation Object Model.
Use an Automation Object Model to load the Shared Object Repository?
September 4, 2007 by Amit
QuickTest Professional 9.0
QuickTest Professional 9.0 does not support dynamically loading object repositories at runtime. AOM statements are
not designed to be executed from within a test script.
QuickTest Professional 9.0 does allow you to associate and load (not at runtime) multiple Object Repository files.
QuickTest Professional 8.2 and below
Use the Automation Object Model to specify the path to a Shared Object Repository:
Dim App ‘As Application
Set App = CreateObject(”QuickTest.Application”)
App.Test.Settings.Resources.ObjectRepositoryPath = “<PathToYourSharedRepositoryTsrFileHere>”
Note:
Be sure to replace <PathToYourSharedRepositoryTsrFileHere> with the path to the repository you want to use.
Now the test will load and use the specified Shared Object Repository.
Note:
You may be able to execute the AOM statements from within a script, however they are not intended to be used this
way. Whenever possible, check your conditions and modify the settings in an external .vbs file before the test execution
begins.
How to associate Shared Object Repositories to the test (QTP 9.0)?
September 4, 2007 by Amit
With QuickTest Professional 9.0, you can associate multiple Shared Object Repositories with each action. Each action
will always be associated with a Local Object Repository and can also be associated with one or more Shared Object
Repositories.
Note:
All Shared Object Repositories are associated at the action level, not the test level, in QuickTest Professional 9.0. If you
open a test that was created with an earlier version of QuickTest Professional, the Shared Object Repository will be
associated with all of the test’s actions automatically.
Associating Shared Object Repositories with an action:
1. Right-click on the action, and select “Action Properties.”
2. Select the Associated Repositories.
3. Click the “Adds a new shared object repository file to the list” button (with the + icon).
4. Browse to and select the desired Shared Object Repository.
5. Repeat steps 3 and 4, as needed.
6. If needed, move the selected repository files up and down in the list using the arrow buttons.
Associating Shared Object Repositories with multiple actions in one script:
1. Go to Resources -> Associate Repositories.
2. In the Associate Repositories dialog, click the “Add Repository” button (with the + icon).
3. Browse to and select the desired Shared Object Repository file.
4. Repeat steps 2 and 3 as needed for all Shared Object Repository files.
5. Select one of the repository files.
6. In the Available Actions list, select the actions the Shared Object Repository should be associated with.
7. Click the “>” button. The selected actions will move to the Associated Actions list. If you want to associate the file to
all actions, click the “>>” button.
8. Repeat steps 5 through 7 for all repository files in the list.
9. Click <OK>.
Associating Shared Object Repositories with all new actions:
1. Right-click on the action, and select “Action Properties.”
2. Select the Associated Repositories.
3. Click the “Adds a new shared object repository file to the list” button (with the + icon).
4. Browse to and select the desired Shared Object Repository.
5. Repeat steps 3 and 4, as needed.
6. If needed, move the selected repository files up and down in the list using the arrow buttons.
7. Click <Set as Default>.
8. Click <OK>.
Note:
Any new action created after this option has been set will use the specified Shared Object Repository files by default. To
modify existing scripts, you will need to use one of the first two options.
How to set the Shared Object Repository option for a test ?
September 4, 2007 by Amit
To set only one test to use the Shared Object Repository option:
1. Click the “New” button or go to File -> New to open a new test.
2. Go to Test -> Settings.
3. Select the Resources tab.
4. In the Object repository type box, select one of the options:
• Select “Per-action” to set the Object Repository mode for your test to the Object Repository per action mode.
• Select “Shared” to set the Object Repository mode for your test to the Shared Object Repository mode.
5. If you selected Shared in step 4, specify the Shared Object Repository file you want to use as the test’s Object
Repository file. To specify a file, enter the Object Repository file name or click the “Browse” button and select a resource
file (*.tsr) from the Open dialog box. To create a new Shared Object Repository file, enter a new file name in the Shared
box.Note:
These steps need to be done in a new script. Once you have modified the script, you will not be able to change the
option.
To set all new scripts to use a Shared Object Repository:
For QuickTest Professional 6.5 and above
1. Click the New button or go to File -> New to open a new test.
2. Go to Test -> Settings.
3. Select the Resources tab.
4. Select the Shared option for the “Object-repository type”.
5. Specify the Shared Object Repository file you want to use as the test’s Object Repository file. To specify a file, enter
the Object Repository file name or click the ellipse button <…> and select a resource file (*.tsr) from the Open dialog
box. To create a new Shared Object Repository file, enter a new file name and path in the Shared box.
6. Click the “Set as Default” button.
7. Click <Apply> and <OK>.
For previous versions of QuickTest Professional:
1. Click the New button or go to File -> New to open a new test.
2. Go to Tools -> Options.
3. Select the Resources tab.
4. Select the Shared option for the “Default object repository type.”
5. Specify the Shared Object Repository file you want to use as the test’s Object Repository file. To specify a file, enter
the Object Repository file name or click the “Browse” button and select a resource file (*.tsr) from the Open dialog box.
To create a new Shared Object Repository file, enter a new file name in the Shared box.
6. Click <Apply> and <OK>.
Note:
Any new script created after this option has been set will use the Shared Object Repository by default.
What are the new features of the QTP 9.0 Object Repository?
August 29, 2007 by Amit
Features and functionality of the QTP 9.0 Object Repository With the QTP 9.0 Object Repository, you can:
1. Associate multiple repositories with an action.
2. Use both a Local and Shared Object Repositories with an action.
Note:
If both the Local and Shared Object Repository files contain the same object, QuickTest Professional will use the object
in the Local Repository.
3. Add objects from the Local Repository to an associated Shared Repository.
4. Manually create objects in the repository.
5. Specify different Shared Object Repository files with each action in a test.
6. Merge Object Repository files.
7. Import/export the Object Repository file into an XML file.
8. Move objects from one parent to another.
For more information on the Object Repository, refer to the QuickTest Professional User’s Guide (Help -> QuickTest
Professional Help -> QuickTest User’s Guide -> Managing and Merging Object Repositories
What is Smart Identification?
August 28, 2007 by Amit
Smart Identification is used to locate objects that may have changed
When the recorded definition for an object does not enable QuickTest to identify an option, QuickTest uses the Smart
Identification definition (if defined and enabled) to identify the object.
When QuickTest uses the recorded description to identify an object, it searches for an object that matches every one 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 recorded object description, or if it finds more than one object
that fits the description, then QuickTest ignores the recorded 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, and thus, if configured logically, a Smart
Identification definition can probably help QuickTest identify an object, if it is present, even when the recorded
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 as they are unlikely to change on a regular basis, but
which can be ignored if they are no longer applicable.
If QuickTest activates the Smart Identification mechanism during a test run (because it was unable to identify an object
based on its recorded description), it follows the following process to identify the object:
1. QuickTest forgets the recorded 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 property list.
2. From that list of objects, QuickTest filters out any object 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:
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.
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.
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 recorded description plus the ordinal identifier to identify the object.
If the combined recorded description and ordinal identifier are not sufficient to identify the object, then QuickTest stops
the test run and displays a Run Error message.
1-72540913
Difficulties in identifying dynamic objects
August 13, 2007 by Amit
Sometimes, the user has an object with a dynamic description (e.g., the name property is completely dynamic). Regular
Expressions will not help in this case, since the whole name is changed between runs.
Uniquely identifying dynamic objects
When QuickTest Professional has difficulties identifying objects uniquely, you may need to change the properties used
in the description of the object.
There are two ways to do this:
1. Configure the properties that are used to identify the object class.Note:
These changes will affect all objects of this class type.For QuickTest Professional 6.0 and above
QuickTest Professional 6.0 added the Object Identification tool to allow you to configure the properties which
are learned for object classes.
1. Go to Tools -> Object Identification.
2. Select the environment type (e.g., ActiveX or Java) for the problem object from the Environment
combobox.
3. Select the object class in the Test Object classes list. The lists on the right side of the dialog will be
populated with the current mandatory and assistive properties.
4. Click <Add/Remove> under the desired list.
5. Clear the checkbox next to the dynamic properties.
6. Select the checkbox next to the new properties you wish to use.
7. Click <OK>.
8. Click <OK> to close the Object Identification dialog.
9. Relearn the objects into the Object Repository.
For detailed step by step instructions, please refer to the “Configuring Mandatory and Assistive Recording
Properties” chapter in the User’s guide.
For Astra QuickTest/QuickTest Professional 5.6 or below
10. Open the registry editor (Start -> Run -> regedit.)
11. Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive\QuickTest
Professional\MicTest\Test Objects\<object>\Description where <object> is the class type of the
problem object. Expand the Astra QuickTest folder if you are using Astra QuickTest. You will see a list
of properties that are used to identify these objects.
12. Remove the dynamic property by right-clicking on the value and selecting Modify. Set the value data to
zero. Repeat as needed.
13. Add a new property to identify the object. Go to Edit -> New -> DWORD Value. Enter the name of the
property to be used. Right-click and select “Modify.” Set the value data to 58 Hexadecimal to make the
property mandatory or 448 Hexadecimal to make the property additional (used if there are not enough
mandatory properties to uniquely identify the object). Repeat as needed.
14. Close the registry.
15. Restart Astra QuickTest/QuickTest Professional.
16. Relearn the object into the Object Repository.
You can find a list of available properties in the registry at HKEY_CURRENT_USER\Software\Mercury
Interactive\Astra QuickTest\MicTest\Attributes (or QuickTest Professional if you are using QuickTest
Professional).
Note:
The exact paths within the registry may differ slightly with different versions of the applications. Also, all the
properties listed under the registry key may not be available for all objects.
2. Instruct QuickTest Professional to use different properties only for the problem object.Note:
These changes will affect only the objects you modify but will not affect other objects of the same class
type.QuickTest Professional 9.0
For information on modifying object property or property values in QuickTest Professional 9.0, QuickTest
Professional 8.2 and below
1. Right-click on the object in the Keyword View (Tree View, in QuickTest Professional 6.5 and below).
2. Select Object Properties.
3. Click <Add/Remove> and clear the checkbox for the dynamic property.
4. Click <OK> to close the Add/Remove Properties and Object Properties dialogs.
5. Go to Tools -> Object Repository.
6. Select the problem object in the object repository tree.
7. Click <Add/Remove>.
8. Set the checkbox next to the properties you wish to use to uniquely identify the object.

QTP - How to set/get system time and date?


QTP allows running different types of test. And sometimes, it needs perform time and date manipulations on a
computer. In this article, I will show and explain - how to get system time/date and change them.

Actually, today's lecture consists of two questions:

1. How to get system time and date?


2. How to set system time and date?

Let start training right now :)


So, the first section is:

How to get system time and date?

Actually, this is not difficult task! Use the following functions:

• Now - function returns the current date and time according to the setting of your computer's system date and
time.
• Date - function returns the current system date.
• Time - function returns a Variant of subtype Date indicating the current system time.
So, the code is very simple. I provide it with a screen shot containing results:

Well, let's deal with the second section:

How to set system time and date?

For that, I will use simple DOS commands:

• time - this command displays or sets the system time:

To change the time, pass it as a parameter


to time command. See the above screen shot as an example.

• date - this command displays or sets the system date:

To change the date, pass it as a parameter


to date command. See the above screen shot as an example for date manipulations :)
Now, I will combine all the above VBScript functions (Now, Date, Time) and DOC commands (time and date):

As you can see, initial date and time were '26.10.2007 22:45:10'. Then I added 3 days and 2 hours to initial date & time.
The result of addition is - '30.10.2007 0:45:10'.

By the way, could you guess, why the result day is 30th, not 29th? :) To answer, please pay attention that we added 2
hours too :)

The last step - running of time and date commands from command line. I used Run method of WScript.Shell object.

So, as you can see - date and time manipulation is easy enough.

Você também pode gostar