![Page 2: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/2.jpg)
Quem?
Maurício Linhares
João Pessoa, terra que o sol nasce primeiro
Ruby e Java developer;
![Page 3: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/3.jpg)
De Onde?
![Page 4: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/4.jpg)
Testes “in-browser” em Rails – A.C.
![Page 5: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/5.jpg)
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...;
![Page 6: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/6.jpg)
Selenium RC
![Page 7: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/7.jpg)
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 é...
![Page 8: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/8.jpg)
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;
![Page 9: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/9.jpg)
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;
![Page 10: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/10.jpg)
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;
![Page 11: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/11.jpg)
DEMO
![Page 12: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/12.jpg)
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
![Page 13: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/13.jpg)
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 | [email protected] | 123456 | 123456 |
E que estou na página de login
Quando preencho "email" com "[email protected]"
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
![Page 14: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/14.jpg)
features/support/paths.rb
def path_to(page_name)
case page_name
when /página inicial/
'/'
when 'listagem de produtos'
produtos_path
when 'página do carrinho'
itens_path
else
raise_path_error( page_name )
end
end
![Page 15: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/15.jpg)
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 "[email protected]"
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
![Page 16: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/16.jpg)
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 |
![Page 17: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/17.jpg)
@javascript
Capybara usa tags do Cucumber para marcar se a suafuncionalidade precisa ser testada com JavaScript ou não;
Não é necessário ter os arquivos em pastas separadas nemimplementar 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 navegadorpra fazer o serviço;
![Page 18: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/18.jpg)
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"
![Page 19: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/19.jpg)
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
![Page 20: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/20.jpg)
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"
![Page 21: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/21.jpg)
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
![Page 22: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/22.jpg)
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
![Page 23: Testes In Browser Em Rails Com Capybara E Webdriver](https://reader033.vdocuments.pub/reader033/viewer/2022050920/54b54e654a795992298b456b/html5/thumbnails/23.jpg)
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