Unerwartete aktive Fenster

Gängiges Problem beim Testen grafischer Benutzeroberflächen ist die unerwartete Anzeige eines aktiven Fensters, beispielsweise einer Warnmeldung in einem HTML-Browser. Angenommen, Sie haben das Klicken auf eine geschützte Seite aufgezeichnet, werden beim Verwenden dieser Verknüpfung aber zu einer ungeschützten Seite geleitet. In den Sicherheitseinstellungen Ihres Browsers ist für diesen Fall festgelegt, dass Sie in einem Nachrichtenfenster darüber informiert werden, dass es sich bei der nächsten Seite um eine ungeschützte Seite handelt. Sie klicken zunächst auf OK, um die Warnmeldung wieder zu entfernen, und anschließend klicken Sie auf ein Markierungsfeld auf der ungeschützten Seite. Das aufgezeichnete Functional Test-Script hat dann ungefähr folgendes Aussehen:

     LinkThatLeavesSecurePage().Click()
     Dialog_HtmlDialogButtonOK().Click() 
     CheckboxOnTheUnsecurePage().Click() 

Wenn Sie das Script dann für einen Browser mit einer anderen Sicherheitseinstellung abspielen möchten, findet keine Wiedergabe statt, da die Anweisung Dialog_HtmlDialogButtonOK() nicht gefunden werden kann. Sie können die Anweisung Dialog_HtmlDialogButtonOK().Click() zwar auf Kommentar setzen, doch wird es zu Störungen kommen, wenn der Dialog trotzdem angezeigt wird.

Eine Lösung besteht darin, auf die Anzeige der Nachricht zu warten. Wird diese dann doch nicht angezeigt, können Sie mit Ihrer Arbeit fortfahren. Diese Lösung lässt sich über folgenden Code umsetzen:

     LinkThatLeavesSecurePage().Click()
     Try 
        Dialog_HtmlDialogButtonOK().Click()
     
     Catch E As ObjectNotFoundException 
     End Try
        CheckboxOnTheUnsecurePage().Click()

Mit diesem Code erreichen Sie Ihr primäres Ziel. Sobald die Warnung angezeigt wird, können Sie sie entfernen. Wird die Nachricht nicht angezeigt, können Sie ohne weiteres Warten mit Ihrer Arbeit fortfahren. Eventuell ist es sinnvoll, eine standardmäßige Zeitspanne auf die Anzeige der Nachricht zu warten. Wenn Sie sicher sind, dass die Warnmeldung (wenn überhaupt) innerhalb von fünf Sekunden angezeigt wird, können Sie dies über die folgende Codierung beschleunigen:

     LinkThatLeavesSecurePage().Click()
    Try        Dialog_HtmlDialogButtonOK().WaitForExistence(5,1)
        Dialog_HtmlDialogButtonOK().Click()
     
    Catch E As ObjectNotFoundException     End Try
        CheckboxOnTheUnsecurePage().Click()

Gegen diese Vorgehensweise lässt sich einwenden, dass Sie diesen Spezialcode überall dort einfügen müssen, wo bei einer Verknüpfung mit einem Browser Seiten gewechselt werden müssen und eine Änderung in Bezug auf die Sicherheit stattfindet. In einer solchen Situation wäre es wesentlich effizienter, auf die Änderung zahlreicher Testscripts zu verzichten. Wenn Sie die Ausnahmebedingung OnObjectNotFound implementieren, können Sie das Ereignis bei jedem Auftreten handhaben. Wenn Sie die Implementierung über ein Helper-Superscript vornehmen, lässt sich das Ereignis damit in jedem Testscript handhaben, das über diese Helper-Superklasse hinausgeht.

Mit dem Code im folgenden Beispiel wird eine Basisklasse für Scripts zum Testen von HTML-Anwendungen implementiert. Diese Basisklasse implementiert die Anweisung OnObjectNotFound. Mit der Methode OnObjectNotFound werden alle HTML-Domänen auf HTML-Dialogfenster abgesucht. Die HTML-Dialogfenster werden durch Drücken der Eingabetaste entfernt. Wurden Dialogfenster entfernt, wird anschließend erneut die Methode TestObject gestartet. Andernfalls hat diese Methode keine Auswirkungen, und die Anweisung ObjectNotFoundException wird wie gewöhnlich ausgelöst.

'This class provides some base capabilities for working
'with HTML.


 Imports Rational.Test.Ft.Object_Interfaces  Public MustInherit Class HtmlScript Inherits RationalTestScript
 ' Overrides the base implementation of OnObjectNotFound. Whenever  ' this event occurs, look through all the active domains (places  ' where objects might be found). For HTML domains (Java  ' and other domains are skipped) finds all the top objects.  ' If the top object is an Html Dialog,  ' types an Enter key to dismiss the dialog.  ' Logs a warning when this happens.
 
 Public Overrides Sub OnObjectNotFound(ByVal TestObjectMethodState As ITestObjectMethodState)
 Dim DismissedAWindow As Boolean = false  Dim Domains() As DomainTestObject = GetDomains()  Dim I As Integer  For I = 0 To Domains.Length - 1     If (Domains(I).GetName().Equals("Html")) Then
     ' HTML domain is found.      Dim TopObjects As TestObject() = Domains(I).GetTopObjects()       If (Not(TopObjects Is Nothing)) Then         Try           Dim J As Integer           For J = 0 To TopObjects.Length - 1             If (TopObjects(J).GetProperty(".class").Equals("Html.Dialog"))               Then               'A top-level HtmlDialog is found.               LogWarning("HtmlScript.OnObjectNotFound - dismissing dialog.")               Try                 DismissedAWindow = true                 Dim CastTopObject As TopLevelTestObject                 CastTopObject.InputKeys("{ENTER}")               Catch E As System.Exception               End Try             End If           Next J         Catch           'Unregister all references to top objects           Unregister(TopObjects)         End Try      End If    End If  Next I  If DismissedAWindow = True Then    ' Try again    TestObjectMethodState.FindObjectAgain()  Else    LogWarning( _     "HtmlScript.OnObjectNotFound; no HTML dialog to dismiss")  End If End Sub End Class

Berücksichtigen Sie, dass die oben genannte Implementierung von HtmlScript nur zum Testen von HTML verwendet werden kann. Wenn Sie diese Basisklasse für jedes beliebige Script inklusive der Scripts zum Testen von Java verwenden möchten, müssen Sie sich vor dem Entfernen von HTML-Dialogfenstern vergewissern, ob es sich bei TestObject um ein Functional Test HTML-Objekt handelt. Dazu können Sie am Anfang der Methode OnObjectNotFound folgenden Code einfügen:

     If Not (TestObjectMethodState.GetTestObject() _
         GetPropertyFromMap(IMapPropertyName.DOMAIN).Equals("Html"))


       Return      End If

Nutzungsbedingungen | Feedback
(C) Copyright IBM Corporation 2002, 2004. Alle Rechte vorbehalten.