Um problema comum no Teste da GUI é a aparência de uma janela ativa inesperada -- por exemplo, uma caixa de mensagem de aviso em um navegador HTML. Imagine que você grave um clique em uma página segura e que esse link o leve para uma página que não é segura. Suponha que a configuração de segurança do navegador esteja ajustada para que apareça uma caixa de mensagem avisando que a página seguinte não será segura. Você clica em OK para descartar a mensagem de aviso e, em seguida, clica em uma caixa de opções na página não segura. O script gravado do Teste Funcional seria semelhante ao seguinte:
LinkThatLeavesSecurePage().Click() Dialog_HtmlDialogButtonOK().Click() CheckboxOnTheUnsecurePage().Click()
Quando você reproduz o script em um navegador com uma configuração de segurança
diferente, o script não é reproduzido porque o Dialog_HtmlDialogButtonOK()
não pode
ser localizado. É possível colocar a instrução Dialog_HtmlDialogButtonOK().Click()
como comentário, mas haverá falhas quando o diálogo realmente
for exibido.
Uma solução é aguardar que a mensagem apareça. Se não aparecer, você pode continuar. A solução é possível com o seguinte código:
LinkThatLeavesSecurePage().Click() Try Dialog_HtmlDialogButtonOK().Click() Catch E As ObjectNotFoundException End Try CheckboxOnTheUnsecurePage().Click()
Esse código realiza seu objetivo principal. Se a mensagem de aviso aparecer, descarte-a. Se não aparecer, pare de aguardar e então continue. Entretanto, é provável que você não queira aguardar o período de tempo padrão pela exibição da mensagem de aviso. Se tiver certeza que, quando a mensagem de aviso for exibida ela chegará em 5 segundos, poderá acelerar esse tempo codificando da seguinte forma:
LinkThatLeavesSecurePage().Click() Try Dialog_HtmlDialogButtonOK().WaitForExistence(5,1) Dialog_HtmlDialogButtonOK().Click() Catch E As ObjectNotFoundException End Try CheckboxOnTheUnsecurePage().Click()
Uma objeção aceitável para essa abordagem é que esse código especial precisará
ser incluído onde quer que um link em um navegador possa alternar páginas e causar
alteração na segurança. A manipulação dessa situação em um lugar comum sem
alterar muitos scripts de teste seria mais eficiente. A implementação da
exceção OnObjectNotFound
permite manipular o evento sempre
que ocorrer. A colocação da implementação em um superscript auxiliar permite
manipular o evento para qualquer script de teste que estender essa superclasse
auxiliar.
O código no exemplo a seguir implementa uma classe base para scripts
que testam aplicativos HTML. Essa classe base implementa OnObjectNotFound
.
O método OnObjectNotFound
examina todos os domínios HTML
e procura todas as caixas de diálogo HTML. Cada caixa é descartada
pressionando-se Enter. Se alguma delas
for descartada, o método TestObject
será reiniciado.
Se nenhuma for descartada, o método não agirá e a exceção ObjectNotFoundException
será lançada normalmente.
'Essa classe fornece alguns recursos básicos para trabalhar 'com HTML.
Imports Rational.Test.Ft.Object_Interfaces Public MustInherit Class HtmlScript Inherits RationalTestScript
' Substitui a implementação base de OnObjectNotFound. Sempre ' que esse evento ocorrer, examine todos os domínios ativos (locais ' em que os objetos podem ser localizados). Para domínios HTML (Java ' e outros domínios são ignorados) localiza todos os objetos superiores. ' Se o objeto superior for um Html Dialog, ' digita uma tecla Enter para descartar o diálogo. ' Registra um aviso quando isso acontece.
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
' O domínio HTML foi localizado. 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 'Um HtmlDialog de nível superior foi localizado. 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 'Cancelar o registro de todas as referências a objetos superiores Unregister(TopObjects) End Try End If End If Next I If DismissedAWindow = True Then ' Tente novamente TestObjectMethodState.FindObjectAgain() Else LogWarning( _ "HtmlScript.OnObjectNotFound; no HTML dialog to dismiss") End If End Sub End Class
Observe que a implementação anterior de HtmlScript
serve
apenas para teste de HTML. Talvez você queira utilizar essa classe-base
para qualquer script, incluindo scripts que testem Java. Nesse caso, é
necessário certificar-se de que TestObject
seja um objeto HTML do Functional
Test antes de descartar as caixas de diálogo HTML. Você pode incluir o seguinte código
no início do método OnObjectNotFound
:
If Not (TestObjectMethodState.GetTestObject() _ GetPropertyFromMap(IMapPropertyName.DOMAIN).Equals("Html"))
Return End If
Termos de uso | Feedback
(C) Copyright IBM Corporation 2002, 2004. Todos os Direitos Reservados.