Angenommen, Sie haben das Klicken auf eine sichere Seite aufgezeichnet, werden beim Verwenden dieses Links aber auf eine nicht sichere 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 Warnung wieder zu entfernen, und anschließend auf ein Markierungsfeld auf der nicht sicheren Seite. Das aufgezeichnete Functional Tester-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 Möglichkeit besteht darin, auf die Anzeige der Nachricht zu warten. Wenn diese nicht angezeigt wird, können Sie 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 wird das wichtigste Ziel erreicht. Wenn die Warnung angezeigt wird, schließen Sie das Nachrichtenfenster. Wird die Nachricht nicht angezeigt, können Sie schließlich mit Ihrer Arbeit fortfahren. Möglicherweise möchten Sie jedoch nicht die gesamte standardmäßig festgelegte Zeitspanne auf die Anzeige der Warnung warten. Wenn Sie sicher sind, dass eine angezeigte Warnung innerhalb von fünf Sekunden erscheint, können Sie den Vorgang mit Hilfe des folgenden Codes beschleunigen:
LinkThatLeavesSecurePage().Click() Try Dialog_HtmlDialogButtonOK().WaitForExistence(5,1) Dialog_HtmlDialogButtonOK().Click() Catch E As ObjectNotFoundException End Try CheckboxOnTheUnsecurePage().Click()
Ein Nachteil dieses Ansatzes ist, dass Sie diesen speziellen Code immer dort hinzufügen müssen, wo durch einen Link in einem Browser Seiten gewechselt werden und dadurch eine Änderung der Sicherheitsstufe eintreten kann. Es wäre wesentlich effizienter, diese Situation generell zu handhaben, ohne zahllose Testscripts ändern zu müssen. 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. Alle HTML-Dialogfenster werden durch Drücken der Eingabetaste geschlossen. Wurden Dialogfenster geschlossen, wird die Methode TestObject erneut 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
Beachten Sie, dass die oben angegebene Implementierung von HtmlScript nur für das Testen von HTML geeignet ist. 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 Tester 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