5. A.C. – Antes do Capybara
Teste na mão chamando o Selenium RC;
Surge o WebRat que funciona quando acha que
deve e ainda chamando o Selenium RC;
Timeouts, loops eternos, browser que não abre...;
7. Selenium RC
Lento;
WebServer em Java que de lá controla o
navegador como um controle remoto (remote
control);
Se você está do lado Java, é tudo uma maravilha,
se não, pois é...
8. Selenium original
Selenium original era escrito em JavaScript;
Browsers são muito chatos no que JavaScript pode
fazer ou não (como se você não soubesse disso);
Lento (engines de JS antigas) e muita coisa ficava
de fora;
9. Selenium 2 - WebDriver
Escrito utilizando a forma nativa do browser de ser
controlado:
Plugin
no Firefox;
Automation tools no IE;
Fast! Fast! Fast!
API orientada a objetos e simplificada;
10. D.C. – Depois do Capybara
Como Webrat, mas com WebDriver já integrado e
utilizado por padrão;
Sintaxe praticamente igual a dos testes antigos
escritos com Webrat;
Está virando a opção padrão pra testes “in-
browser” pra apps Rails com Cucumber;
12. Montando a fábrica de objetos
Dado /^que (?:o|os|a|as) seguint(?:e|es) (.+)
exist(?:e|em):$/ do |nome, table|
table.hashes.each do |hash|
Factory( nome.singularize, hash )
end
end
13. Preenchendo um formulário de login
# language: pt
Funcionalidade: Fazer login do usuário
Como usuário do sistema
Eu quero me autenticar no mesmo
Para poder acessar meu carrinho de compras
Cenário: Fazer login
Dado que o seguinte usuario existe:
| nome | email | senha | senha_confirmation |
| José da Silva | jose@silva.com | 123456 | 123456 |
E que estou na página de login
Quando preencho "email" com "jose@silva.com"
E preencho "senha" com "123456"
E pressiono "Enviar"
Então devo ver "Seja bem vindo a nossa loja, José da Silva"
E devo estar na listagem de produtos
15. Cadastrando um usuário
# language: pt
Funcionalidade: Cadastrar um usuário no sistema
Como usuário do sistema
Eu quero ser capaz de criar uma conta no mesmo
Para poder me identificar e fazer meus pedidos
Cenário: Cadastro com sucesso
Dado que estou na página de cadastro de usuário
Quando preencho "usuario[nome]" com "Marcos Silva"
E preencho "usuario[email]" com "marcos.silva@email.com"
E preencho "usuario[senha]" com "123456"
E preencho "usuario[senha_confirmation]" com "123456"
E marco "usuario[termos_e_condicoes]"
E pressiono "Enviar"
Então devo ver "Dados recebidos com sucesso"
E devo estar na listagem de produtos
16. Testando chamadas Ajax
# language: pt
@javascript
Funcionalidade: Adicionar e remover itens do carrinho
Como usuário do sistema
Eu quero adicionar e remover itens ao carrinho
Para ser capaz efetuar compras
Contexto:
Dado que os seguintes produtos existem:
| nome | preco |
| Agile Estimating and Planning | 30.00 |
| Lean Software Development | 25.00 |
17. @javascript
Capybara usa tags do Cucumber para marcar se a sua
funcionalidade precisa ser testada com JavaScript ou não;
Não é necessário ter os arquivos em pastas separadas nem
implementar steps de forma diferente;
Você deve instalar a gem “database_cleaner” para que o
banco de dados seja limpo;
O próprio Capybara inicia um servidor e abre o navegador
pra fazer o serviço;
18. Adicionando itens ao carrinho
Cenário: Adicionar item ao carrinho
Dado que estou na listagem de produtos
Quando adiciono "5" itens do produto "Lean Software
Development" ao carrinho
Então devo ver "Lean Software Development - 5"
19. Step específico
Quando /^adiciono "([^"]*)" itens do produto "([^"]*)" ao
carrinho$/ do |quantidade, nome|
produto = Produto.find_by_nome( nome )
Quando "preencho "quantidade" com
"#{quantidade}" em "#produto_#{produto.id}""
Quando "pressiono "Adicionar" em
"#produto_#{produto.id}"“
end
20. Removendo itens do carrinho
Cenário: Remover itens do carrinho
Dado que estou na listagem de produtos
E adiciono "5" itens do produto "Lean Software Development" ao
carrinho
E adiciono "5" itens do produto "Agile Estimating and Planning" ao
carrinho
Quando vou pra página do carrinho
E removo o produto "Agile Estimating and Planning" do carrinho
Entao devo ver "Lean Software Development“
Mas não devo ver "Agile Estimating and Planning"
21. Step específico
Quando /^removo o produto "([^"]*)" do carrinho$/ do |nome|
produto = Produto.find_by_nome( nome )
Quando "clico em "Remover produto" em
"#produto_#{produto.id}"“
end
22. Usando Chrome como navegador
padrão
Capybara::Driver::Selenium.class_eval do
def self.driver
unless @driver
@driver = Selenium::WebDriver.for :chrome
at_exit do
@driver.quit
end
end
@driver
end
end
23. Referências
Cucumber -
http://wiki.github.com/aslakhellesoy/cucumber/
Capybara – http://github.com/jnicklas/capybara
Projeto de Exemplo -
http://github.com/mauricio/linuxfi-loja
@mauriciojr