2008-09-18 8 views
6

Ich habe eine virtuelle Maschine (VMware) mit Mercury Quick Test Professional 9.2 installiert. Ich habe ein Skript, um eine Anwendung zu testen, geschrieben in VB.NET mit der Infragistics-Bibliothek.Mercury Quick Test Pro und virtuelle Maschinen: Funktioniert von einem Client-Rechner, aber kein anderer

Wenn ich auf diese virtuelle Maschine mit meinem Laptop (mit Remote Desktop) zugreifen, funktioniert alles einwandfrei, das Skript wird ohne ein Problem abgeschlossen. Mein Laptop läuft XP mit Windows Classic Theme.

Wenn ich auf diese virtuelle Maschine mit einem anderen Computer zugreifen (mit Remotedesktop), startet das Skript gut, aber stoppt auf halbem Weg, ohne keine Fehlermeldung von QTP, nichts. Auf diesem Computer wird XP mit Windows Classic-Design ausgeführt.

Ein Unterschied zwischen den beiden Setups ist die Größe des Bildschirms, der Laptop ist 1920x1280, andere Maschine 1280x1024.

Der Schritt, in dem das Skript beendet wird, umfasst das Aktivieren eines Kontrollkästchens in einem UltraWinGrid. Das Kontrollkästchen selbst wird angezeigt, ist in beiden Fällen auf dem Bildschirm.

Hat jemand dieses Problem schon einmal gehabt, oder haben Sie eine Idee, warum das Verhalten zwischen den beiden Maschinen unterschiedlich ist?

Danke.

Antwort

5

OK. Ich habe das Problem gefunden. Tatsächlich scheiterte das Skript still, denn genau das hat die Person, die das Skript geschrieben hat, dazu aufgefordert. Es konnte etwas nicht validiert werden, das sich außerhalb des Bildschirms befand, sodass das Skript fehlschlug.

Das Problem war die QTP-Definition von 'Off-Screen'. Ich habe zwei Bildschirme an meinem Laptop, den Bildschirm für den Laptop selbst (1920x1200) und einen weiteren Bildschirm (1280x1024). Ich verbinde mich über Remote Desktop mit der VM für QTP und verwende die Einstellungen des Bildschirms für den Laptop. Dies bedeutet, dass wenn ich mein QTP-Skript starte und es auf den anderen Bildschirm verschiebe, es nicht passt, so dass der Bildschirm nicht länger maximiert wird und das Objekt teilweise nicht mehr auf dem Bildschirm angezeigt wird und daher nicht gefunden werden kann.

Die Lösung ist einfach: Verwenden Sie im Remotedesktop die Registerkarte Anzeige, und legen Sie die Größe des Bildschirms auf eine Größe von 1280 x 1024, und QTP hat keine Probleme mehr.

Voilà.

+0

Ich denke, sichtbar ist relativ :) Ich bin RDP von Linux, so dass ich nicht auf dieses spezielle Problem gelaufen bin, da mein RDP-Fenster nicht geändert werden kann, nachdem ich es gestartet habe ... – tloach

1

Wenn Sie nicht den Expertenmodus verwenden und/oder es QTP erlauben, die meiste Arbeit zum Erstellen Ihrer Repository-Objekte zu tun, dann bezieht sich ja alles auf Pixel.

Ich erstelle alle meine Repository-Objekte von Hand, schaue mir die Quelle an (im Fall von automatisierten Web-Anwendungstests) und benutze den Object Spy für Hilfe, wo nötig. Ich habe darauf geachtet, keine Positionsinformationen als Teil meiner Objektdefinition zu haben, aus dem gleichen Grund, in den Sie hineinrennen.

Für die Teile meiner Web-App, die mit Windows interagiert haben (Öffnen einer Datei zum Hochladen usw.), war der Object Spy für die Erprobung erforderlich, um einen eindeutigen Bezeichner zum Erstellen des Repository-Objekts zu erstellen. Aber es kann getan werden.

Ex1: Datei Durchsuchen Dialog
text = "Datei auswählen"
nativeclass = # 32770 (anscheinend einige Windows-VooDoo für eine Datei Öffnen-Dialog?)

Ex2: Dateiname Textbox in Browse-Dialog:
nativeclass = "Edit"
beigefügten Text "File & Name:" (? mehr Windows-VooDoo Es woudn't für mich arbeiten, ohne die "&")

Ex3: Open-Knopf im Dialog:
text = "& Open"
Objekt class = "Button"

Good Luck!

0

QTP tut nicht Verwendung Bildschirmkoordinaten außer als letztes Mittel, wenn die Objekte als hohe Objekte (SwfTable in diesem Fall) identifiziert werden, sollten Sie in Ordnung sein, wenn jedoch nicht QTP das Objekt nicht erkennen, es fällt zurück zu WinObject und Bildschirmkoordinaten.

Wenn Sie Infragistics verwenden, dann sollten Sie wissen, dass sie die Unterstützung von QTP mit ihrem TestAdvantage Produkt erweitern, das Ihr Problem wahrscheinlich lösen wird.


Edit: @MatthieuF sagte:

In der Tat, verwenden wir das Infragistics Plugin für QTP, und wir haben immer noch das Problem

Können Sie mir eine geben Beispiel für eine Zeile, die fehlschlägt?

0

Ein paar Dinge:

Sie sollten leicht auf dem VM zu debuggen fähig sein - nur warten, bis es geht in Ihre Objekt-Repository zu stoppen, und sehen, ob es das Objekt identifizieren kann. Wenn nicht, dann verwenden Sie einen Objektspion, um herauszufinden, welche Eigenschaften zwischen den Betriebssystemen unterschiedlich sind. Wenn es einen Unterschied gibt, können Sie diese Eigenschaft immer auf einen regulären Ausdruck setzen und nach beiden Möglichkeiten suchen lassen.

Angenommen, dies ist nicht das Problem, dass Probleme mit Remote-Desktop mit QTP aufgetreten sind, wenn das Remote-Fenster geschlossen oder minimiert ist. Für uns war es ein Problem, bei dem die Zwischenablage nicht geändert werden kann, wenn ein RDP-Fenster nicht sichtbar ist, aber es könnte andere Überraschungen geben, wenn QTP auf diese Weise verwendet wird.

1

Punkt der Klärung: Sie erwähnten, dass QTP ohne Fehlermeldung stoppt. Bedeutet das auch, dass die Testergebnisprotokolldatei auch keine Fehlermeldung enthält? Wenn das Protokoll Informationen enthält, kann dies bei der Diagnose des Problems hilfreich sein. Können Sie die Codezeilen an dem Punkt teilen, an dem das Skript fehlschlägt?

Außerdem ändert Remote Desktop den Desktop auf dem Remote-Computer. Obwohl QTP-Skripts nicht von Natur aus koordinatenbasiert sind, können einzelne Anweisungen relativ zu einem Objekt koordinatenbasiert sein. Die Entschließung könnte in dieser Hinsicht ein Problem darstellen. Angenommen, Sie haben eine Zeile wie Button.Click (5, 150) auf einem Computer mit höherer Auflösung aufgenommen. Wenn Sie jedoch versucht haben, es auf einem Gerät mit niedrigerer Auflösung wiederzugeben, und die 150 außerhalb des Bereichs des Objekts mit der niedrigeren Auflösung liegt, könnte dies ein Problem verursachen.