Curso de Selenium WebDriver – Aula 2 – Chamada em Espera

Pra quem conhece e/ou usava o Selenium IDE para executar os testes funcionais automatizados sobre sistemas e sabia como controlar a velocidade dos testes, sentirá uma grande diferença ao migrar para o Selenium WebDriver. Isso porque no Selenium IDE existia apenas uma forma de fazer isso: através do manuseio dos parâmetros fast e slow na seguinte barrinha barrinha_velocidade

Uma simples mudança na velocidade é capaz de fazer com que o seu teste falhe ou passe, ainda que a tela ou o objetivo do teste estejam corretos. Isso acontece porque, muitas vezes, em páginas web, os elementos são carregados em momentos distintos, até que toda a página seja “montada”. Então, se o seu teste vai atuar justamente naquela função que ainda não foi carregada, vai acontecer de ele falhar, ainda que o elemento em questão esteja correto para o contexto do teste que deveria ser executado. Por vezes isso acontece em páginas contendo Ajax ou outros scripts dinâmicos. 

Obs.: É importante aprender este conceito antes de partir para as próximas etapas do Curso, para que assim todos fiquem atentos à esta limitação da(s) ferramenta(s).

Bom… então vamos lá. E como é que faz para realizar uma chamada em espera no Selenium WebDriver? Lembrando que você irá implementar o teste diretamente no código-fonte, existem 4 formas de realizar isso. As duas primeiras usam métodos que atuam diretamente na forma de execução do objeto, assim com as duas últimas passam apenas parâmetros para o momento da execução do objeto sobre o Selenium. Ao fim do post você verá uma dica de boa prática:

  1. Você pode invocar a classe Thread e colocar o seu fluxo de execução para “dormir”:
    1. Thread.sleep(miliseconds)
  2. Para diminuir o tempo de execução do OBJETO selenium você invoca o método setSpeed dele. Depois você passa o valor da espera em milisegundos:
    1. selenium.setSpeed(String miliseconds) 
  3. Espera Implícita: Comunica ao WebDriver a espera de um elemento não carregado na página:
    1. driver.manager().timeouts().implicityWait(15, TimeUnit.SECONDS); 15 é o valor da espera;
  4. Espera Explícita = Realiza buscas por elementos na página a cada 500 milisegundos e retorna sucesso ou timeout. Para realizar isso é necessário impelementar o objeto WebDriverWait
    1. chamada_explicita

O problema em atuar sobre a Thread está: 1) no método invocado, que não é próprio do framework Selenium; 2) não há garantias que após este tempo o elemento alvo do teste estará carregado. O problema em atuar sobre o objeto selenium, invocando o seu método de acesso setSpeed(), é que isto viola as fronteiras de relacionamento da arquitetura do framework. Por isso duas novas formas de integar com a velocidade dos testes foram criadas: a espera implícita e a espera explícita. Importante entender que essas duas formas, trabalhar com a Thread ou o método setSpeed do objeto selenium não irão aguardar pelo carregamento do objeto, mas sim, apenas dar um pause no teste. 

Sendo assim, a melhor prática considerada é a seguinte:
MELHOR PRÁTICA = Setar um implicityWait no início do teste para forçar a espera do carregamento do(s) elemento(s) alvo do teste e depois implementar um WebDriveWait para checar(s) este carregamento(s) ou a conclusão de um script dinâmico.

Obs.: Mas para usá-los juntos, em um mesmo teste você tem que passar o valor null no implicityWait antes de chamar o WebDriverWait. Senão, pode dar falhar no teste. Essa é só mais uma limitação a ser corrigida no framework.

Dica: Esse link é o da ferramenta WaitTool (https://github.com/ChonC/wtbox/blob/master/src/wtbox/util/WaitTool.java). Ela é uma biblioteca Java que abstrai as chamadas de espera do Selenium :).

Referências: 
http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits-reference
https://groups.google.com/forum/#!topic/selenium-users/Kks-rxwZkxM
http://chon.techliminal.com/ajax_wait 

Espero que estejam gostando. Espero voltar com novidades em breve.

Restando dúvidas ou sugestões, fique à vontade para comentar! 😉

Anúncios

Um pensamento sobre “Curso de Selenium WebDriver – Aula 2 – Chamada em Espera

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s