DevTrain

Autor: Hannes Preishuber

Web Seiten Aufrufe simulieren mit MSHTML

Manchmal möchte man bestimmte Click Reihenfolgen im Browser wiederholt durchführen. Speziell für Test von Web Anwendungen ist es praktisch diese Aufrufe zu automatisieren. Die Kombination aus MSHTML DLL und Web Browser Active X Control helfen dabei. Auch aus .NET lassen sich diese COM Objekte nutzen. Das besondere daran ist, das auch JScripte ausgeführt werden.

Für unseren Test erstellen wir eine Winform Anwendung mit VB.NET. Zunächst braucht man die Verweise im Projekt. Der erste Verweis wird in der Werkzeug Leiste erzeugt.

Der zweite Verweis wird in den Projekt Eigenschaften erzeugt.

Dann erzeugen Sie ein leeres Forumular.

In der Formular Klasse wird ein globales HTMLDocument erzeugt. Dieses wird verwendet um die aktuell geladene Seite zu speichern.

Public doc As mshtml.HTMLDocument

Aus der Werkzeug Leiste wird dann das Web Browser Control auf das Formular gezogen. Um eine Web Seite anständig anzeigen zu können ist es sinnvoll dieses zu vergrößern.
Per Button wird dann eine Web Seite geladen. Die Funktion Navigate entspricht er Eingabe einer URL in der Browserleiste.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

Button1.Click
        AxWebBrowser1.Navigate("http://www.ppedv.de")
End Sub

Da das Laden einer Web Site durchaus eine Zeit dauern kann, gibt es ein Event das anzeigt, wenn der Vorgang beendet ist. Dort wird der Inhalt des Browsers per Referenz der Doc Variable übergeben. Der Befehl Directcast ist übrigens schneller als CType.
Im folgenden soll ein bestimmter Link auf der Seite gefunden werden und dann geclickt werden.

Private Sub AxWebBrowser1_DocumentComplete(ByVal sender As Object, ByVal e As

AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Handles AxWebBrowser1.DocumentComplete
     doc = DirectCast(AxWebBrowser1.Document, mshtml.HTMLDocument)
     Dim all As mshtml.IHTMLElementCollection = doc.getElementsByTagName("A")
     Dim elm As mshtml.IHTMLElement
     Dim strLink As String
     Dim strText As String
     For Each elm In all
                If elm.getAttribute("HREF").startswith("http://www.ppedv") Then
                    elm.click()
                    Exit For
                End If
            Next
        End If
End Sub

Dazu werden alle A Elemente in eine HTMLCollection eingelesen. Durch diese wird dann per For Each durchiteriert. Wenn dieses Element einen bestimmten Wert im Attribut HREF enthält, wird das Click Ereignis aufgerufen.

Achten Sie darauf, das dann nach erfolgten Ladevorgang wieder DocumentConplete aufgerufen wird.

 


Erfasst am: 23.01.2005 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=942
© Copyright 2003 ppedv AG - http://www.ppedv.de