2010
03.27

No post onde abordei a configuração do Webrat em modo Selenium surgiu uma dúvida do Diego sobre timeout quando estamos testando algo que depende de retorno via AJAX. Como a dúvida é recorrente, decidi mostrar como resolver isso no seu framework JavaScript preferido.

A chave de tudo está no método waitForCondition do Selenium que como o próprio nome  já diz, faz a execução aguardar até que determinada condição seja satisfeita. Utilizaremos o waitForCondition para aguardar até não existirem requisições AJAX pendentes, a forma de fazer isso depende do framework que você utiliza:

JQuery : jQuery.active

ExtJS: Ext.Ajax.isLoading()

Dojo Toolkit: dojo.io.XMLHTTPTransport.inFlight.length

Prototype: Ajax.activeRequestCount

O waitForCondition recebe dois parâmetros: a condição e o tempo em milissegundos de tolerância para a resposta (timeout). Note que como o comando roda por padrão na janela do test runner e não na da aplicação precisamos usar o snippet JavaScript “selenium.browserbot.getCurrentWindow()”. Na tabela Selenese abaixo armazenamos a implementação específica de framework na variável requisicoesAJAX:

Wait For Jquery Ajax
store jQuery.active requisicoesAJAX
store ’selenium.browserbot.getCurrentWindow().${requisicoesAJAX}==0′ condicao
waitForCondition ${condicao} 5000

Se você usa ruby, a gem selenium-client possui o método wait_for_ajax com implementações para Prototype (padrão) e jQuery. O framework é configurável na instanciação:

Outra opção é escrever seu próprio método (no meu caso deixo isso nas definições de passos do Cucumber):

Você conhece formas de fazer isso para outros frameworks JavaScript? Seja bem vindo a sugerir nos comentários  :)

Nenhum comentário.

Adicione Seu Comentário