Descriptive Programmierung in QTP/UFTDynamisch & Statisch
โก Intelligente Zusammenfassung
Descriptive Programming ermรถglicht ein QTP or UFT Eine Anweisung enthรคlt die Objektbeschreibung selbst, entweder als Eigenschaftswertpaare oder als โฆ Description-Objekt, sodass ein Schritt auch dann ausgefรผhrt wird, wenn das Objekt nie im Objekt-Repository gespeichert wurde.
Was ist Descriptive Programmierung?
Descriptive Programmierung wird verwendet, um Operationen an einem Objekt in der zu testenden Anwendung (AUT) auszufรผhren, dessen Definition nicht in der Datenbank gespeichert ist. Objekt-RepositoryMithilfe dieses Mechanismus kรถnnen Sie die Identifizierung durch das Objekt-Repository umgehen und das Objekt bereitstellen. Description in der Aussage selbst.
Ein Objektname dient lediglich dazu, ein Objekt in einem Skript seiner Beschreibung in einem Objekt-Repository zuzuordnen. Das bedeutet: Selbst wenn Sie den Objektnamen sowohl im Skript als auch im Objekt-Repository รคndern, sollte das Skript weiterhin ausgefรผhrt werden kรถnnen. Sehen Sie sich dazu das folgende Video an.
Klicken Sie auf werden auf dieser Seite erlรคutert wenn das Video nicht zugรคnglich ist
Video Highlights
- Lรถschen des Objekts DescriptDas Objekt โAgent Name WinEditโ aus dem Objektrepository wird nicht erkannt. Wenn Sie den Test erneut ausfรผhren, schlรคgt er fehl. Untersuchen wir die Ursache fรผr das Fehlschlagen des Skripts.
- Wรคhrend der Laufzeit UFT Man identifiziert die Operation, die im WinEdit-Feld ausgefรผhrt wird, und das Objekt. DescriptDie Ion im Objekt-Repository wird als Agentenname gespeichert. Dieser Name wird verwendet, um track ist das Objekt im Objekt-Repository. Fรผr ein รผbergeordnetes Objekt kรถnnen keine zwei untergeordneten Objekte mit demselben Namen existieren, daher QTP Das Objekt wird im Repository eindeutig zugeordnet. Anschlieรend wird die gespeicherte Beschreibung aus dem Objekt-Repository verwendet, der Name durch die Beschreibung ersetzt und die resultierende Anweisung genutzt, um das Objekt in der zu testenden Anwendung zu identifizieren.
- Da wir in unserem Fall diese Objektbeschreibung vollstรคndig gelรถscht hatten, schlรคgt das Skript fehl.
- Was aber, wenn stattdessen QTP Ersetzen Sie die Objektbeschreibung, indem Sie als Tester die Objektbeschreibungen direkt in Ihrem Skript angeben? Das ist nichts anderes als โDescriptive Programmierungโ
Diese eine Verlagerung der Verantwortung wird durch die beiden untenstehenden Formulare umgesetzt, und jedes Formular eignet sich fรผr eine andere Art von Drehbuch.
Arten von Descriptive Programmierung
Sie kรถnnen verwenden Descriptive Programmierung auf zwei Arten
- Statisch
- Dynamisch
Statisch Descriptive Programmierung
Bei der statischen Methode geben Sie zur Objektidentifikation die Eigenschaft eines Objekts im folgenden Format an
property:=values,
Dieses Format wird als Eigenschaft-Wert-Paar bezeichnet und in Anfรผhrungszeichen gesetzt. Ausgeschrieben sieht eine statische Anweisung folgendermaรen aus:
TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method
Wenn Ihr Objekt mehrere Beschreibungen zur Identifizierung verwendet, kรถnnen Sie diese mithilfe von Kommas angeben.
In unserem Fall lautet die Beschreibung fรผr den Agentennamen also
"nativeclass:=Edit", "attached text:=Agent Name:"
Statische Beschreibungen werden an der Stelle gelesen, an der die Anweisung ausgefรผhrt wird. Dadurch eignen sie sich ideal fรผr einmalige Schritte und fรผr schnelle Korrekturen an einem Skript, das man nicht neu aufzeichnen mรถchte.
Dynamisch Descriptive Programmierung
Die zweite Methode, die gleiche Aktion durchzufรผhren, ist die Verwendung von Dynamic Descriptive Programmierung
Falls Ihr Skript den Objektkandidaten fรผr die beschreibende Programmierung mehrmals verwendet, ist es sehr mรผhsam, alle Eigenschaftswertpaare fรผr jede Anweisung anzugeben
In solchen Fรคllen kรถnnen Sie Folgendes nutzen: DescriptIonenklasse bereitgestellt von QTP
Die Syntax zum Erstellen eines Beschreibungsobjekts lautet:
Set MyDescription = Description.Create() MyDescription("property").Value = "property-value"
Dies ist die dynamische Methode
Durch das Hinzufรผgen der oben verwendeten Agentennamen-Eigenschaften zu diesem Objekt erhรคlt man eine vollstรคndige, wiederverwendbare Beschreibung:
Dim oDesc Set oDesc = Description.Create() oDesc("nativeclass").Value = "Edit" oDesc("attached text").Value = "Agent Name:"
Die Variable oDesc kann nun an jede Anweisung รผbergeben werden, die dieses Objekt benรถtigt, sodass eine Bearbeitung jeden Schritt aktualisiert, der es verwendet.
Statisch vs. Dynamisch DescriptLive-Programmierung: Wann verwendet man welches Programm?
Beide Formen erzeugen die gleiche Laufzeitbeschreibung, daher geht es bei der Wahl eher um die Wartung als um die Leistungsfรคhigkeit.
| Eigenschaften | Statisch (inline) | Dynamisch (DescriptIonenobjekt) |
|---|---|---|
| Wie die Beschreibung geschrieben wird | Die im Testobjekt eingegebenen Eigenschaftswertpaare rufen | Eigenschaften, die einem Objekt hinzugefรผgt wurden, das mit Description.Create() |
| Wiederverwendung: | Wird in jeder Anweisung wiederholt, die das Objekt benรถtigt. | In einer Variable gespeichert und รผberall dort รผbergeben, wo sie benรถtigt wird |
| Ablesbarkeit | Kurze Aussagen bleiben lesbar; lange werden unรผbersichtlich. | Zusรคtzliche Setup-Zeilen, aber die Anweisung selbst bleibt kurz |
| Laufzeitรคnderungen | Die Werte sind fest, sofern sie nicht aus Variablen verkettet werden. | Die Eigenschaftswerte kรถnnen vor jeder Verwendung neu zugewiesen werden. |
| Funktioniert mit untergeordneten Objekten | Nein, das Filterargument muss ein DescriptIonenobjekt | Ja, dies ist das erforderliche Formular. |
| am besten geeignet fรผr | Ein oder zwei Schritte an einem Objekt, das sich nicht im Repository befindet. | Objekte, die wiederholt verwendet werden, oder Sammlungen, die zur Laufzeit abgerufen werden |
Warum verwenden Descriptive Programmierung?
Das unten stehende Transkript begleitet die Video-Anleitung zu einem realen Szenario, in dem die Anzahl der Objekte nicht im Voraus bekannt sein kann.
Video Transcript
- Die Millionen-Dollar-Frage ist, warum man DP verwenden sollte, wenn der Objektidentifizierungsprozess von ... รผbernommen wird. QTP
- Angenommen, Sie sollen ein Jobportal testen. Sie geben eine Suchanfrage in das Portal ein, und der Test erwartet von Ihnen, dass Sie alle verfรผgbaren Stellen auswรคhlen und auf โBewerbenโ klicken.
- Die Anzahl der angezeigten Stellen hรคngt jedoch von der Suchanfrage und den zum Zeitpunkt der Skriptausfรผhrung verfรผgbaren Stellen ab, und es gibt keine Mรถglichkeit, die Anzahl der angezeigten Stellen im Voraus vorherzusagen.
- In solchen Fรคllen kรถnnen Sie deskriptive Programmierung verwenden. Auch wenn Sie weder die Anzahl noch die Namen der Kontrollkรคstchen kennen, kennen Sie die Klasse der Objekte als โWebCheckโ.Box"
- Sie kรถnnen die Verwendung Methode ChildObjects um Objekte zurรผckzugeben, die zu einem bestimmten รผbergeordneten Element gehรถren
- Eine Codezeile wie โ
Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()
Gibt alle untergeordneten Objekte dieser Seite zurรผck.
- Aber wir wollen nur WebCheckBox Objekte. Dazu kรถnnen wir ein Filterobjekt erstellen und dessen Eigenschaft auf die Web-Checkbox-Klasse setzen. Anschlieรend รผbergeben wir diesen Filter als Argument an die Methode ChildObjects.
- In diesem Fall werden nur die Kontrollkรคstchen zurรผckgegeben.
- Als Nรคchstes kรถnnen Sie Code wie diesen schreiben, der auf die gesamte Sammlung von Kontrollkรคstchen ab Null zugreift und alle Kontrollkรคstchen aktiviert.
- Anschlieรend kรถnnen Sie auf die Schaltflรคche โAnwendenโ klicken, um den Test abzuschlieรen
- Sie kรถnnen auch DescriptIntelligente Programmierung zum Ausfรผhren schwer aufzuzeichnender Objekte, wie z. B. automatisch auszublendende Bedienfelder, Objekte mit wechselnden Hierarchien, verschachtelte innere Objekte, Untermenรผs.
- Mithilfe der deskriptiven Programmierung kรถnnen Sie auch erweiterte Zeichenfolgenmanipulationen durchfรผhren
- In Verbindung mit der Index-Eigenschaft kann die deskriptive Programmierung sehr nรผtzlich sein, um schwierige Objekte zu identifizieren.
- Wenn Sie eine programmatische Beschreibung fรผr ein Objekt in einer Objekthierarchie verwenden, mรผssen Sie fรผr nachfolgende Kindobjekte eine beschreibende Programmierung verwenden.
- Wenn beispielsweise fรผr das Page-Objekt deskriptive Programmierung verwendet wurde, das nachfolgende WinEdit-Objekt jedoch aus dem Objekt-Repository stammt, ist die Aussage falsch.
- Im Gegenteil, wenn deskriptive Programmierung sowohl fรผr das Page- als auch fรผr das WinEdit-Objekt verwendet wird, ist die Aussage korrekt.
Ausgeschrieben sehen der im Transkript beschriebene Filter und die Schleife folgendermaรen aus:
Dim oFilter, allCheckBoxes, i Set oFilter = Description.Create() oFilter("micclass").Value = "WebCheckBox" Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter) For i = 0 To allCheckBoxes.Count - 1 allCheckBoxes(i).Set "ON" Next
Die Sammlung ist nullbasiert, weshalb die Schleife bei Anzahl โ 1Da der Filter erst bei der Ausfรผhrung der Zeile ausgewertet wird, funktioniert derselbe Code unabhรคngig davon, ob die Suche drei oder dreiรig Stellenangebote zurรผckgibt.
Regulรคre Ausdrรผcke, Ordinalbezeichner und hรคufige Fallstricke
DescriptDie i-Programmierung verhรคlt sich auf zwei Arten, die die meisten Menschen รผberraschen, wenn zum ersten Mal eine Anweisung ohne erkennbaren Grund fehlschlรคgt.
1) Jeder Eigenschaftswert wird als regulรคrer Ausdruck behandelt. Eine Bildunterschrift wie zum Beispiel Gesamt (USD) Daher schlรคgt die รbereinstimmung fehl, da die Klammern regulรคre Ausdrรผcke darstellen. Maskieren Sie diese mit einem Backslash oder deaktivieren Sie die Auswertung regulรคrer Ausdrรผcke fรผr diese Eigenschaft. DescriptIonenobjekt:
Set oDesc = Description.Create() oDesc("name").Value = "Total (USD)" oDesc("name").RegularExpression = False
2) Bei Gleichstand entscheiden Ordinalzahlen. Wenn eine Beschreibung noch auf mehr als ein Objekt zutrifft, fรผgen Sie Folgendes hinzu: Index, Standort or Erstellungszeit als zusรคtzliche Eigenschaft. Die Indexzรคhlung beginnt bei null:
WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99" WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"
Drei weitere mรถgliche Fehlerquellen sollten Sie รผberprรผfen, bevor Sie mit dem Debuggen der Anwendung beginnen:
- Arbeiten jederzeit weiterbearbeiten kรถnnen. Jede Prรคsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, Mikrofonklassenicht das Etikett Klassenname Im Objekt-Spion angezeigt. Der Anzeigename ist keine gรผltige Eigenschaft in einer Beschreibung.
- Bei Eigenschaftsnamen wird nicht zwischen Groร- und Kleinschreibung unterschieden, sie mรผssen jedoch exakt so geschrieben werden, wie sie von der Technologie gemeldet werden, einschlieรlich des Leerzeichens. beigefรผgter Text und HTML-Tag.
- DescriptDie Live-Programmierung umgeht das Repository; sie verbessert die Objekterkennung nicht. Wenn das richtige Add-in nicht geladen ist, kann das Objekt durch keine Beschreibung identifiziert werden.
