TESTES IN-BROWSER EM
RAILS COM CAPYBARA E
WEBDRIVER
Maurício Linhares – mauricio.linhares@gmail.com
Quem?
   Maurício Linhares

   João Pessoa, terra que o sol nasce primeiro

   Ruby e Java developer;
De Onde?
Testes “in-browser” em Rails – A.C.
A.C. – Antes do Capybara
   Teste na mão chamando o Selenium RC;

   Surge o WebRat que funciona quando acha que
    dev...
Selenium RC
Selenium RC
   Lento;

   WebServer em Java que de lá controla o
    navegador como um controle remoto (remote
    contr...
Selenium original
   Selenium original era escrito em JavaScript;

   Browsers são muito chatos no que JavaScript pode
 ...
Selenium 2 - WebDriver
   Escrito utilizando a forma nativa do browser de ser
    controlado:
     Plugin
           no ...
D.C. – Depois do Capybara
   Como Webrat, mas com WebDriver já integrado e
    utilizado por padrão;

   Sintaxe pratica...
DEMO
Montando a fábrica de objetos
Dado /^que (?:o|os|a|as) seguint(?:e|es) (.+)
 exist(?:e|em):$/ do |nome, table|

 table.has...
Preenchendo um formulário de login
# language: pt
Funcionalidade: Fazer login do usuário

Como usuário do sistema
Eu quero...
features/support/paths.rb
def path_to(page_name)
 case page_name
 when /página inicial/
  '/'
 when 'listagem de produtos'...
Cadastrando um usuário
# language: pt
Funcionalidade: Cadastrar um usuário no sistema

Como usuário do sistema
Eu quero se...
Testando chamadas Ajax
# language: pt
@javascript
Funcionalidade: Adicionar e remover itens do carrinho

 Como usuário do ...
@javascript
   Capybara usa tags do Cucumber para marcar se a sua
    funcionalidade precisa ser testada com JavaScript o...
Adicionando itens ao carrinho
Cenário: Adicionar item ao carrinho

 Dado que estou na listagem de produtos

 Quando adicio...
Step específico
Quando /^adiciono "([^"]*)" itens do produto "([^"]*)" ao
 carrinho$/ do |quantidade, nome|

 produto = Pr...
Removendo itens do carrinho
Cenário: Remover itens do carrinho

 Dado que estou na listagem de produtos
  E adiciono "5" i...
Step específico
Quando /^removo o produto "([^"]*)" do carrinho$/ do |nome|

 produto = Produto.find_by_nome( nome )
 Quan...
Usando Chrome como navegador
padrão
Capybara::Driver::Selenium.class_eval do

 def self.driver
  unless @driver
   @driver...
Referências
   Cucumber -
    http://wiki.github.com/aslakhellesoy/cucumber/

   Capybara – http://github.com/jnicklas/c...
Próximos SlideShares
Carregando em…5
×

Testes In Browser Em Rails Com Capybara E Webdriver

7.849 visualizações

Publicada em

Apresentação sobre testes utilizando Rails, Capybara, WebDriver e Cucumber.

Palestra apresentada originalmente no OxenteRails 2010.

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
7.849
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4.687
Ações
Compartilhamentos
0
Downloads
36
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Testes In Browser Em Rails Com Capybara E Webdriver

  1. 1. TESTES IN-BROWSER EM RAILS COM CAPYBARA E WEBDRIVER Maurício Linhares – mauricio.linhares@gmail.com
  2. 2. Quem?  Maurício Linhares  João Pessoa, terra que o sol nasce primeiro  Ruby e Java developer;
  3. 3. De Onde?
  4. 4. Testes “in-browser” em Rails – A.C.
  5. 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...;
  6. 6. Selenium RC
  7. 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. 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. 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. 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;
  11. 11. DEMO
  12. 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. 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
  14. 14. 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
  15. 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. 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. 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. 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. 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. 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. 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. 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. 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

×