Testes Funcionais Automatizados com Watir-Webdriver | How To Test
por Karoline Leite
Testes Funcionais Automatizados com Watir-Webdriver
No post anterior, falei um pouco de Cucumber como framework para testes automatizados no mundo Ruby, mas e a API de testes?
Leia o post sobre Cucumber aqui: http://blog.howtotest.com.br/2013/06/cucumber-framework-executando-cenarios.html
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.
Olha o site deles aqui > http://watirwebdriver.com/ (eles tem um "Getting Going" bem legal!).
Anteriormente, criamos um projeto com Cucumber e vamos continuar do ponto em que paramos lá atrás.
O projeto com Cucumber pode ser baixado aqui: https://bitbucket.org/karolxavierleite/how-to-test-cucumber-framework
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/
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.
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.
Está pronto, temos um cenário de teste automatizado. Pra ver a magia acontecer, é necessário executar o cenário.