QuickTest Pro: Zeichen einer Stelle ermitteln

Um in QuickTest Professional ein Zeichen auf einer bestimmten Position im String zu ermitteln, kann die Funktion Mid() verwendet werden.

Hier ein kleines Beispiel, wie jedes Zeichen eines Strings nacheinander ausgegeben werden kann:

For i=1 to Len("Tomate")
  msgbox Mid("Tomate", i, 1)
Next

QuickTest Pro: Hintergrundfarbe ermitteln

Soll bei einer Automatisierung die Hintergrundfarbe ermittelt werden, gestaltet es sich in QuickTest recht schwierig, wenn es sich nicht um Webseiten oder WPF handelt, da die Hintergrundfarbe bei Win Oberfllächen keine abfragbare Eigenschaft von GUI Objekten ist.

Ein Lösungsansatz ist es, die Hintergrundfarbe über die WinAPI Funktion GetPixel (Beschreibung Microsoft) zu ermitteln. Diese Funktion liefert einen COLORREF Wert zurück. Dieser muss dann nur noch umgerechnet werden. In dem unteren Beispiel verwende ich dazu eine selbstgeschriebene Funktion. Es gibt aber auch einen saubereren Weg an die RGB Werte zu kommen (WinApi Funktionen: GetRValue, GetGValue und GetBValue -> siehe hier)

In diesem Beispiel wird bei dem Windows „Taschenrechner“ (calc, unter Windows 7) die Farbe des Buttons mit und ohne Hover Effekt geprüft.
Vor dem MouseMove hat der Button eine blaue, dannach eine orangene Farbe.

Dim Hintergrundfarbe1, Hintergrundfarbe2
Set Hintergrundfarbe1 = GetRGBValues(GetBackGroundColor(Window("Rechner").WinButton("Button")))

msgbox "Blau: " & Hintergrundfarbe1.Blue & " - Rot: " & Hintergrundfarbe1.Red & " - Grün: " & Hintergrundfarbe1.Green

Window("Rechner").WinButton("Button").MouseMove 1,1

Set Hintergrundfarbe2 = GetRGBValues(GetBackGroundColor(Window("Rechner").WinButton("Button")))
msgbox "Blau: " & Hintergrundfarbe2.Blue & " - Rot: " & Hintergrundfarbe2.Red & " - Grün " & Hintergrundfarbe2.Green

'Funktion zum Umrechnen der Werte in RGB
Function GetRGBValues(lngRGB)
  Dim Farbe
  'Neues Objekt definieren
  Set Farbe = new Farbe
  Farbe.Red = lngRGBAND &HFF&
  Farbe.Green = (lngRGB AND &H0000FF00&)/256
  Farbe.Blue = (lngRGB and &H00FF0000&)/65536

  set GetRGBValues = Farbe
End Function

Function GetBackGroundColor(dlgObject)
  Extern.Declare micLong, "GetPixel", "gdi32", "GetPixel", micLong, micLong, micLong
  Extern.Declare micLong, "ReleaseDC", "user32", "ReleaseDC", micLong, micLong
  Extern.Declare micLong, "GetDC", "user32", "GetDC", micLong
  Extern.Declare micLong, "SetForegroundWindow", "user32", "SetForegroundWindow", micLong

  Dim hDCSource, hWndSource, backColor

  hWndSource = dlgObject.GetROProperty("hwnd")
  Extern.SetForegroundWindow hWndSource
  hDCSource = CLng(Extern.GetDC(hWndSource))
  backColor = CLng(Extern.GetPixel(hDCSource, CLng(1), CLng(1)))

  Extern.ReleaseDC hWndSource, hDCSource
  GetBackGroundColor = backColor
End Function

Class Farbe
  Dim Red
  Dim Green
  Dim Blue
End Class

XML File mit QuickTest Pro lesen

XML ist in QuickTest Pro sehr nützlich. Die Hilfe von QuickTest dazu ist aber verbesserungswürdig. Hier ist eine Beispielfunktion, mit der alle XML Knoten rekursiv geöffnet werden.

Set xml = XMLUtil.CreateXML()
xml.LoadFile "C:\test.xml"
Set root = xml.GetRootElement()

'initialer Aufruf der Funktion
lese_xml root

Function lese_xml (element)
  set children = element.ChildElements()
  For i=1 to children.Count
    set child = children.Item(i)
    ' Hier können die unterschiedlichen Eigenschaften des Knotens abgefragt werden
    'z.B. Ausgabe des Namens
    print child.ElementName
    lese_xml child
  Next
End Function