Testes Funcionais Automatizados com Watir-Webdriver



Olá!

No post anterior, falei um pouco de Cucumber como framework para testes automatizados no mundo Ruby, mas e a API de testes?




Quando falo em "API de testes", me refiro às bibliotecas que vão viabilizar a interação entre os scripts de teste e a aplicação. Por si só, o Ruby, o Java, o .Net, não interagem com o browser, não clicam em botões e não preenchem campos. Quem possibilita isso são as APIs de testes.

Entre as APIs para testar aplicações web, com Ruby, existem dois grandes nomes: Capybara e watir-webdriver. Vou tentar mostrar o que conheço de cada um deles, começando pelo watir-webdriver (que conheço um pouco melhor, diga-se).

O watir-webdriver é simples de usar e suporta diversos browsers. Possui uma comunidade bastante ativa, com blogs e grupos, o que é bem relevante ao optar por ele como API para os seus testes.



Mãos na massa


Anteriormente, criamos um projeto com Cucumber e vamos continuar do ponto em que paramos lá atrás.




No nosso projeto, existe um arquivo chamado Gemfile, que lista todas as gems que o projeto utiliza. Nele, vamos adicionar a gem do watir-webdriver:


gem "watir-webdriver", "~> 0.6.4"

Estamos especificando a versão 0.6.4 ou maior, mas limitada a 0.6.x. Quando você executar um bundle no seu projeto, ele vai instalar a versão mais recente da gem a partir daquela que especificamos.

É importante estar atento a versão dessa gem, pois ela está diretamente relacionada a versão do seu browser. Um browser sempre atualizado necessita da gem sempre atualizada também.

Por default, o watir-webdriver interage com o Firefox sem que você precise deixar explicito. Se você precisar usar outro browser, é necessário explicitar e, provavelmente, utilizar um driver que viabiliza a interação.

No nosso projeto, vamos de Firefox mesmo! A versão que tenho instalada no meu Ubuntu é a 21.0, mas a 20 também é compatível com a versão da gem que estamos utilizando.

Watir-Webdriver Cheat Sheet


Os métodos básicos do watir-webdriver são facilmente encontrados na documentação deles e na internet, de forma geral. No link abaixo, um cheat sheet bem legal!

http://wiki.openqa.org/display/WTR/Cheat+Sheet

UPDATE [25/11/2013]:
O Leandro Coelho avisou que o link acima estava fora do ar. Vai um novo link:

http://relevantcodes.com/watir-webdriver-cheat-sheet/

Hooks


Na pasta support, precisamos criar o arquivo hooks.rb. Nele, vamos colocar as pré e pós condições de cada cenário de teste que executarmos. A configuração mais simples do hooks.rb é criarmos e fecharmos o browser.




Step by Step

Os steps do nosso projeto estavam todos pending. É nesse trecho que vamos implementar o código que vai interagir com o browser. O browser está acessível no arquivo default_steps.rb através da variável @browser, que é criada no hooks.rb.




Step 1 - Dado que eu esteja no site do Walmart

Método goto navega para o endereço especificado.

Step 2 - E clico no menu "Meus Pedidos"

Acessamos o elemento link através do texto contido nele (o texto é "Meus Pedidos", foi inserido na feature) e clicamos (método click). 

Step 3 - E eu clico no link "Esqueci meu e-mail"

Acessamos o elemento link através do texto contido nele (o texto é "Esqueci meu e-mail", foi inserido na feature) e clicamos (método click). 

Step 4 - E eu preencho o CPF "XXX"

Acessamos o elemento text_field através do seu ID e preenchemos (método set) com o CPF (inserido na feature). 

Step 5 - E eu preencho o CEP "01415-000"

Acessamos os dois elementos text_field através de seus IDs e preenchemos (método set) com o CEP (inserido na feature). É importante notar que precisamos "quebrar" o texto que veio da feature para preencher os campos.

Step x - E eu clico no botao Continuar

Faltou esse step no outro post, né? Depois de preencher o CEP, é preciso clicar no botão 'Continuar' e só depois desse click é que vão aparecer as mensagens do Step 6. Precisamos então, acrescentar esse step nos arquivos default_steps.rb e no recuperar_login.feature.


Acessamos o link através do seu ID e clicamos (método click). Mas é link? Não é um botão? Apesar de vermos um botão, esse elemento no HTML é um link com uma imagem que dá a aparência de botão.


Step 6 - Entao eu devo ver a mensagem "XXXYYYZZZ"

Acessamos o elemento div através da sua class e verificamos se o texto enviado está contido nele. O método text do watir-webdriver recupera o texto da div, e o include? do Ruby verifica se o texto está contido.

E esse when_present?

Na maioria dos steps, utilizamos esse recuso do watir-webdriver. Com ele estamos dizendo que o método deve ser executado apenas quando o elemento estiver presente. Isso evita colocarmos waits "hardcoded" - o que não é uma boa prática - e evitamos TIMEOUT quando o watir tentar interagir com algum elemento que ainda não carregou. Por default, o when_present aguarda até 30 segundos, mas isso pode ser customizado.

Done! 


Está pronto, temos um cenário de teste automatizado. Pra ver a magia acontecer, é necessário executar o cenário.

Lembram como é? No outro post executamos esse comando:


cucumber features/recuperar_login.feature



Repositório com o projeto


Disponível no bitbucket:
https://bitbucket.org/karolxavierleite/how-to-test-watir-webdriver/

Karoline Leite

Software Quality Engineer

Nenhum comentário:

Postar um comentário