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