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.