L'un des problèmes les plus couramment rencontrés au cours des tests d'une application à interface graphique est l'apparition d'une fenêtre active imprévue, telle qu'une boîte de message d'avertissement dans un navigateur HTML. Imaginons que vous enregistriez un clic sur une page sécurisée et que le lien correspondant vous mène à une page qui n'est pas sécurisée. Votre navigateur est configuré pour vous prévenir de cette situation par l'affichage d'un message d'avertissement dans une boîte de dialogue. Vous cliquez sur OK pour fermer la boîte de message, puis vous cliquez sur une case à cocher, sur la page non sécurisée. La partie correspondante du script Functional Tester enregistré ressemblerait alors à ceci :
LinkThatLeavesSecurePage().Click() Dialog_HtmlDialogButtonOK().Click() CheckboxOnTheUnsecurePage().Click()
Lorsque vous lisez ensuite ce script pour tester l'application avec un autre navigateur dont les paramètres de sécurité
sont réglés différemment, la lecture échoue, car l'objet Dialog_HtmlDialogButtonOK()
n'apparaît jamais. Bien sûr, vous pourriez mettre en commentaire l'instruction Dialog_HtmlDialogButtonOK().Click()
,
mais le script échouerait alors en cas d'affichage de la boîte de message.
Une solution est d'attendre un certain temps que le message apparaisse. S'il ne s'affiche pas, vous pouvez continuer. Cette solution peut être mise en oeuvre avec le code suivant :
LinkThatLeavesSecurePage().Click() Try Dialog_HtmlDialogButtonOK().Click() Catch E As ObjectNotFoundException End Try CheckboxOnTheUnsecurePage().Click()
Ce code atteint l'objectif principal : si le message d'avertissement s'affiche, vous fermez la boîte de dialogue correspondante. S'il n'apparaît pas, vous arrêtez de l'attendre au terme d'un délai par défaut, puis vous poursuivez le traitement. Cependant, le délai par défaut peut vous sembler trop long. Si vous êtes sûr que dans les cas où l'affichage du message d'avertissement est prévu, celui-ci apparaît dans les cinq secondes à compter du moment où l'utilisateur clique sur le lien sortant de la page, vous pouvez accélérer la procédure en la codant comme suit :
LinkThatLeavesSecurePage().Click() Try Dialog_HtmlDialogButtonOK().WaitForExistence(5,1) Dialog_HtmlDialogButtonOK().Click() Catch E As ObjectNotFoundException End Try CheckboxOnTheUnsecurePage().Click()
La principale objection à cette approche est que ce code spécial doit être
ajouté partout où un lien dans un navigateur est susceptible de provoquer un changement de page
et de niveau de sécurité. Il serait plus efficace de gérer cette situation à un endroit commun, vous évitant
de modifier chacun de vos nombreux scripts de test. En implémentant l'exception
OnObjectNotFound
, vous pouvez traiter l'événement chaque fois qu'il
a lieu. Mieux encore, en plaçant cette implémentation dans un superscript auxiliaire,
vous pouvez gérer l'événement dans n'importe quel script de test étendant la classe de ce superscript.
Le code présenté dans l'exemple suivant implémente une classe de base destinée aux
scripts de test d'applications HTML. Cette classe de base implémente OnObjectNotFound
.
La méthode OnObjectNotFound
scrute tous les domaines HTML et y
recherche les boîtes de dialogue HTML. Chaque boîte de dialogue HTML est fermée par une
action sur la touche Entrée. Si une boîte de dialogue
est fermée, la méthode TestObject
est relancée.
Si aucune boîte de dialogue n'est fermée, la méthode ne fait rien et l'exception ObjectNotFoundException
est lancée comme à l'accoutumée.
'Cette classe fournit des fonctionnalités élémentaires de traitement des 'fenêtres HTML.
Imports Rational.Test.Ft.Object_Interfaces Public MustInherit Class HtmlScript Inherits RationalTestScript
' Remplacer l'implémentation de base de OnObjectNotFound. Chaque ' fois que cet événement a lieu, scruter tous les domaines actifs ' (endroits où les objets peuvent être trouvés). Pour les domaines HTML (Java et ' les autres domaines sont ignorés), trouver tous les objets de niveau supérieur. ' Si l'objet de niveau supérieur est un HtmlDialog, actionner la touche Entrée ' pour fermer la boîte de dialogue. ' Consigner un avertissement dans le journal lorsque cela arrive.
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
' Domaine HTML trouvé. 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 'Un HtmlDialog de niveau supérieur a été trouvé. LogWarning("HtmlScript.OnObjectNotFound - fermeture de la boîte de dialogue.") Try DismissedAWindow = true Dim CastTopObject As TopLevelTestObject CastTopObject.InputKeys("{ENTER}") Catch E As System.Exception End Try End If Next J Catch 'Désenregistrer toutes les références aux objets de niveau supérieur Unregister(TopObjects) End Try End If End If Next I If DismissedAWindow = True Then ' Recommencer TestObjectMethodState.FindObjectAgain() Else LogWarning( _ "HtmlScript.OnObjectNotFound; aucune boîte de dialogue HTML à fermer") End If End Sub End Class
Notez que l'implémentation de HtmlScript
présentée ci-dessus n'est valable que
pour le test d'applications HTML. Vous pouvez souhaiter utiliser cette classe de base
pour n'importe quel script, y compris ceux qui servent à tester des applications Java. Dans ce cas,
vous devez vous assurer que le TestObject
est un objet HTML Functional Tester
avant de coder la fermeture des boîtes de dialogue HTML. Pour ce faire, vous pouvez
ajouter le code suivant au début de la méthode OnObjectNotFound
:
If Not (TestObjectMethodState.GetTestObject() _ GetPropertyFromMap(IMapPropertyName.DOMAIN).Equals("Html"))
Return End If
Conditions d'utilisation | Appréciations en retour
(C) Copyright IBM Corporation 2002, 2004. All Rights Reserved.