qtp-descriptive-programming

60
DP 101 in 60 simple slides www.AdvancedQTP.com

Upload: api-3761562

Post on 13-Nov-2014

21 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: qtp-descriptive-programming

DP 101 in 60 simple slides

www.AdvancedQTP.com

Page 2: qtp-descriptive-programming

What is DP?

DP stands for

Descriptive Programming

Page 3: qtp-descriptive-programming

But what IS DP?

It’s a cool way to work without QTP’s Object-Repository (OR)

Page 4: qtp-descriptive-programming

Why would I want to do that?

Page 5: qtp-descriptive-programming

Many reasons

Page 6: qtp-descriptive-programming

You have to

Functions & Recovery scenarios work with different actions

Different actions = Different ORs

Page 7: qtp-descriptive-programming

Do I know you?

Can’t be sure…

Page 8: qtp-descriptive-programming

You have to

Can’t record certain objectsAuto-hide panels

Objects with changing hierarchies

Nested inner-objects, Sub menus

Page 9: qtp-descriptive-programming

Hold still, damnit!

Even when you think you got it, all the properties turn out null

Page 10: qtp-descriptive-programming

Simplicity

Why kill a fly with an atom bomb?

No need to use the OR for every one-time click button in the application

Page 11: qtp-descriptive-programming

And,You can do VERY cool things with DP

Page 12: qtp-descriptive-programming

OK, bring it on

Page 13: qtp-descriptive-programming

First, we need to better understand the Object Repository

What the OR is

How does the OR work

Page 14: qtp-descriptive-programming

I thought DP is all about NOT using the OR…

Page 15: qtp-descriptive-programming

Well, yes, but under the hood, DP & the OR work the same way

To understand the OR, is to understand DP

Page 16: qtp-descriptive-programming

What is the OR?

Page 17: qtp-descriptive-programming

A mysterious beast that records objects, in order to use them later

Page 18: qtp-descriptive-programming

What is to record an object?

Write down how to identify it

Page 19: qtp-descriptive-programming

Who are you?

=How can I identify you?

Page 20: qtp-descriptive-programming

Identification is done with

properties and values

Page 21: qtp-descriptive-programming

Who are you?

=Your height = 400

Your title = “NotePad”

You are visible (=True)

Page 22: qtp-descriptive-programming

So, What IS the OR?

Collections of properties & corresponding values

Each collection represents an object

No mysterious beast here

Page 23: qtp-descriptive-programming

OK, So what IS DP?

DP is a way for specifying the properties & values without using the OR interface

No mysterious beast here, either

Page 24: qtp-descriptive-programming

OK, I get it, there’s nothing more than properties and values

Can we get on with it?

Page 25: qtp-descriptive-programming

How do I actually use DP?

There are two ways

Page 26: qtp-descriptive-programming

1Throw the properties and values

straight into a command

Page 27: qtp-descriptive-programming

It’s the good old syntax you know, except the string between the () is not the OR name.

It’s the property:=value identification string

Page 28: qtp-descriptive-programming

That’s kinda restrictive

What if I want to use multiple identification properties?

Page 29: qtp-descriptive-programming

No problem:

VBWindow(“height:=400”, “title:=New Document”).Maximize

You can use as many properties as you like

Page 30: qtp-descriptive-programming

All fine and well, but what if I want to use regular expressions?

Page 31: qtp-descriptive-programming

No problem:

VBWindow(“title:=.*Document.*”).Maximize

ID strings are automatically interpreted as regular expressions

Page 32: qtp-descriptive-programming

2Throw the properties & values into a description object, and throw IT into

the command

Page 33: qtp-descriptive-programming

Here also, all the values are interpreted as regular expressions. To turn it off, use

oDesc(“Property1”).RegularExpression = False

Page 34: qtp-descriptive-programming

Method 1 is faster, best used for one or two commands, tops

Page 35: qtp-descriptive-programming

When you want to execute multiple commands on an object, method 2 is a better choice by far

(allows one-time definitions, multiple uses)

Page 36: qtp-descriptive-programming

You can use DP with OR

VBWindow(“OR”).VBButton(“text:=OK”).Click

Or (when oDesc is a description object):

VBWindow(“OR”).VBButton(oDesc).Click

Page 37: qtp-descriptive-programming

But, you can only start from OR, and move to DP

So this will not work:

VBWindow(“title:=notgood”).VBButton(“clickme”).Click

Page 38: qtp-descriptive-programming

And that’s about it

You can use each of the methods (or combine them), and you’ll be able to use objects that are not in the OR

Page 39: qtp-descriptive-programming

You said I could do really cool stuff with DP!

Page 40: qtp-descriptive-programming

Right you are

We’ll cover some of the more popular tricks and tips

These examples are only the tip of the iceberg. Play with them and see the true power of DP

Page 41: qtp-descriptive-programming

The power of the string

DP is nothing more than simple strings

We can do such interesting things with strings…

Page 42: qtp-descriptive-programming

The power of the string

Say we got an app with 4 checkboxes, check0, …, check4

We can set all of them with a nice simple loop:

Page 43: qtp-descriptive-programming

The power of the string

Very complex identification tasks can be done via strings manipulation

Try different variations for yourself

Page 44: qtp-descriptive-programming

Solving double objects

When QTP finds two object which match the same description, it freezes

This kinda sucks

Page 45: qtp-descriptive-programming

?

Page 46: qtp-descriptive-programming

DP has a magic property: “index”, which allows us to tell the double objects apart

Index is a zero-based counter

Page 47: qtp-descriptive-programming

All is well

Page 48: qtp-descriptive-programming

Getting objects collections

This feature is so cool, deserves a title on its own

Page 49: qtp-descriptive-programming

THE coolest thing you can do with DP, is to get a

collection of all the objects that math an identification

Page 50: qtp-descriptive-programming

I don’t know who you are, or how many are you, but I want to mark all of you!

Regular DP won’t help - Don’t know how to identify each checkbox

Page 51: qtp-descriptive-programming

Object collections to the rescue!

Step 1: define a description object

Page 52: qtp-descriptive-programming

Object collections to the rescue!

Step 2: get all matching objects

Page 53: qtp-descriptive-programming

Object collections to the rescue!

Step 3: Use the collection

oChildren now holds a collection of all the checkboxes

So the first checkbox is accessed by: oChildren(0)

Page 54: qtp-descriptive-programming

What can we do with it?

Anything we want

Page 55: qtp-descriptive-programming

Example for common uses

Mark all Checkboxes

Mark all checkboxes with a certain property (even RO)

Page 56: qtp-descriptive-programming

The possibilities are endless

Randomly input fields

Input only mandatory fields

Zero maintenance (new fields are added automatically, blind to UI changes)

Select object which match complex identification criteria (write custom if filters)

The list goes on and on…

Page 57: qtp-descriptive-programming

OK, this is indeed cool, but it only gets us the inner controls of a given window.

Can we also get the application’s top level windows?

Page 58: qtp-descriptive-programming

Sure

Page 59: qtp-descriptive-programming

So, With DP we can work with no OR

Sometimes we have to use it

Other times it’s just more fun and useful

DP also throws in a lot of extras that make it an inseparable part of good QTP automation

Taste it, Experience it, Learn it, Use it, Love it

It’s worth your while

Page 60: qtp-descriptive-programming

And that was DP in 60 slides