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.
