SlideShare a Scribd company logo
Capybara
Exemplos de configuração
Com cucumber sem Rails
require 'capybara/cucumber'
Capybara.app = MyRackApp
Com cucumber-rails
rails generate cucumber:install --
capybara
Nos steps do cucumber
When /I sign in/ do
within("#session") do
fill_in 'Login', :with =>
'user@example.com'
fill_in 'Password', :with => 'password'
end
click_link 'Sign in'
end
Tags para uso de JS
@javascript
Scenario: do something Ajaxy
When I click the Ajax link
...
Capybara.javascript_driver = :culerity
Tags disponívels
@javascript
Scenario: do something Ajaxy
When I click the Ajax link
...
@selenium
Scenario: do something Ajaxy
When I click the Ajax link
...
@culerity
Scenario: do something Ajaxy
When I click the Ajax link
...
@rack_test
Scenario: do something Ajaxy
When I click the Ajax link
...
Utilizando com RSpec
require 'capybara/rspec'
describe "the signup process", :type =>
:request do
before :each do
User.make(:email => 'user@example.com',
:password => 'caplin')
end
it "signs me in" do
within("#session") do
fill_in 'Login', :with =>
'user@example.com'
fill_in 'Password', :with => 'password'
end
click_link 'Sign in'
end
end
Habilitando o driver JS
describe 'some stuff which requires js', :js
=> true do
it 'will use the default js driver'
it 'will switch to one specific driver',
:driver => :celerity
end
DSL do Capybara
feature "Signing up" do
background do
User.make(:email => 'user@example.com',
:password => 'caplin')
end
scenario "Signing in with correct
credentials" do
within("#session") do
fill_in 'Login', :with =>
'user@example.com'
fill_in 'Password', :with => 'caplin'
end
click_link 'Sign in'
end
end
Isto é apenas uma forma de utilizar o
RSpec.
feature é um alias para describe ...,
:type => :request
background é um alias para before'
scenario é um alias para it/specify
Junto com Test::Unit
class ActionDispatch::IntegrationTest
include Capybara::DSL
end
Capybara com qualquer aplicação
Rack
Capybara.app = MyRackApp
Selecionando o Driver
Capybara.default_driver = :selenium
Capybara.current_driver = :rack_test # Este é
o padrão se não mudarmos para outro na linha
acima
Capybara.use_default_driver #volta para o
driver padrão
A DSL
Navegando
visit('/projects')
visit(post_comments_path(post))
current_path.should ==
post_comments_path(post)
Clicando em links e botões
click_link('id-of-link')
click_link('Link Text')
click_button('Save')
click_on('Link Text') # clica em um link ou
botão
click_on('Button Value')
Interagindo com formulários
fill_in('First Name', :with => 'John')
fill_in('Password', :with => 'Seekrit')
fill_in('Description', :with => 'Really Long
Text...')
choose('A Radio Button')
check('A Checkbox')
uncheck('A Checkbox')
attach_file('Image', '/path/to/image.jpg')
select('Option', :from => 'Select Box')
Verificando o conteúdo da página
page.has_selector?('table tr')
page.has_selector?(:xpath, '//table/tr')
page.has_no_selector?(:content)
page.has_xpath?('//table/tr')
page.has_css?('table tr.foo')
page.has_content?('foo')
page.has_text?('foo')
Verificando o conteúdo da página
com RSpec
page.should have_selector('table tr')
page.should have_selector(:xpath,
'//table/tr')
page.should have_no_selector(:content)
page.should have_xpath('//table/tr')
page.should have_css('table tr.foo')
page.should have_text('foo')
page.should have_no_text('foo')
page.html.should match /<span>.../i
Buscando
find_field('First Name').value
find_link('Hello').visible?
find_button('Send').click
find(:xpath, "//table/tr").click
find("#overlay").find("h1").click
all('a').each { |a| a[:href] }
find('#navigation').click_link('Home')
find('#navigation').should have_button('Sign
out')
Definindo escopos
within("li#employee") do
fill_in 'Name', :with => 'Jimmy'
end
within(:xpath, "//li[@id='employee']") do
fill_in 'Name', :with => 'Jimmy'
end
within_fieldset('Employee') do
fill_in 'Name', :with => 'Jimmy'
end
within_table('Employee') do
fill_in 'Name', :with => 'Jimmy'
end
Rodando Javascript
page.execute_script("$('body').empty()")
result = page.evaluate_script('4 + 4');
Debug
save_and_open_page
Mais exemplos
Utilizando a DSL em qualquer lugar
require 'capybara'
require 'capybara/dsl'
Capybara.default_driver = :culerity
module MyModule
include Capybara::DSL
def login!
within("//form[@id='session']") do
fill_in 'Login', :with =>
'user@example.com'
fill_in 'Password', :with => 'password'
end
click_link 'Sign in'
end
end
Chamando servidores remotos
visit('http://www.google.com')
Capybara.current_driver = :selenium
Capybara.app_host = 'http://www.google.com'
...
visit('/')
Capybara sem o servidor Rack
interno
Capybara.run_server = false
Session
require 'capybara'
session = Capybara::Session.new(:culerity,
my_rack_app)
session.within("//form[@id='session']") do
session.fill_in 'Login', :with =>
'user@example.com'
session.fill_in 'Password', :with =>
'password'
end
session.click_link 'Sign in'
Seletores XPath
within(:xpath, '//ul/li') { ... }
find(:xpath, '//ul/li').text
find(:xpath, '//li[contains(.//a[@href =
"#"]/text(), "foo")]').value
Seletores padrão
Capybara.default_selector = :xpath
find('//ul/li').text
Seletores personalizados
Capybara.add_selector(:id) do
xpath { |id|
XPath.descendant[XPath.attr(:id) == id.to_s] }
end
Capybara.add_selector(:row) do
xpath { |num| ".//tbody/tr[#{num}]" }
end
Capybara.add_selector(:flash_type) do
css { |type| "#flash.#{type}" }
end
find(:id, 'post_123')
find(:row, 3)
find(:flash_type, :notice)
Adicionando drivers
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser
=> :chrome)
end
Capybara.register_driver :selenium_chrome do
|app|
Capybara::Selenium::Driver.new(app, :browser
=> :chrome)
end
Parte do Livro de Rails 3.1 de Rodrigo Urubatan Ferreira Jardim, guia de referência rápida
publicado originalmente em http://www.urubatan.com.br

More Related Content

Quick ref capybara

  • 1. Capybara Exemplos de configuração Com cucumber sem Rails require 'capybara/cucumber' Capybara.app = MyRackApp Com cucumber-rails rails generate cucumber:install -- capybara Nos steps do cucumber When /I sign in/ do within("#session") do fill_in 'Login', :with => 'user@example.com' fill_in 'Password', :with => 'password' end click_link 'Sign in' end Tags para uso de JS @javascript Scenario: do something Ajaxy When I click the Ajax link ... Capybara.javascript_driver = :culerity Tags disponívels @javascript Scenario: do something Ajaxy When I click the Ajax link ... @selenium Scenario: do something Ajaxy When I click the Ajax link ... @culerity Scenario: do something Ajaxy When I click the Ajax link ... @rack_test Scenario: do something Ajaxy When I click the Ajax link ... Utilizando com RSpec require 'capybara/rspec' describe "the signup process", :type => :request do before :each do User.make(:email => 'user@example.com', :password => 'caplin') end it "signs me in" do within("#session") do fill_in 'Login', :with => 'user@example.com' fill_in 'Password', :with => 'password' end click_link 'Sign in' end end
  • 2. Habilitando o driver JS describe 'some stuff which requires js', :js => true do it 'will use the default js driver' it 'will switch to one specific driver', :driver => :celerity end DSL do Capybara feature "Signing up" do background do User.make(:email => 'user@example.com', :password => 'caplin') end scenario "Signing in with correct credentials" do within("#session") do fill_in 'Login', :with => 'user@example.com' fill_in 'Password', :with => 'caplin' end click_link 'Sign in' end end Isto é apenas uma forma de utilizar o RSpec. feature é um alias para describe ..., :type => :request background é um alias para before' scenario é um alias para it/specify Junto com Test::Unit class ActionDispatch::IntegrationTest include Capybara::DSL end Capybara com qualquer aplicação Rack Capybara.app = MyRackApp Selecionando o Driver Capybara.default_driver = :selenium Capybara.current_driver = :rack_test # Este é o padrão se não mudarmos para outro na linha acima Capybara.use_default_driver #volta para o driver padrão A DSL
  • 3. Navegando visit('/projects') visit(post_comments_path(post)) current_path.should == post_comments_path(post) Clicando em links e botões click_link('id-of-link') click_link('Link Text') click_button('Save') click_on('Link Text') # clica em um link ou botão click_on('Button Value') Interagindo com formulários fill_in('First Name', :with => 'John') fill_in('Password', :with => 'Seekrit') fill_in('Description', :with => 'Really Long Text...') choose('A Radio Button') check('A Checkbox') uncheck('A Checkbox') attach_file('Image', '/path/to/image.jpg') select('Option', :from => 'Select Box') Verificando o conteúdo da página page.has_selector?('table tr') page.has_selector?(:xpath, '//table/tr') page.has_no_selector?(:content) page.has_xpath?('//table/tr') page.has_css?('table tr.foo') page.has_content?('foo') page.has_text?('foo') Verificando o conteúdo da página com RSpec page.should have_selector('table tr') page.should have_selector(:xpath, '//table/tr') page.should have_no_selector(:content) page.should have_xpath('//table/tr') page.should have_css('table tr.foo') page.should have_text('foo') page.should have_no_text('foo') page.html.should match /<span>.../i Buscando find_field('First Name').value find_link('Hello').visible? find_button('Send').click find(:xpath, "//table/tr").click find("#overlay").find("h1").click all('a').each { |a| a[:href] } find('#navigation').click_link('Home') find('#navigation').should have_button('Sign out') Definindo escopos within("li#employee") do fill_in 'Name', :with => 'Jimmy' end within(:xpath, "//li[@id='employee']") do fill_in 'Name', :with => 'Jimmy' end within_fieldset('Employee') do fill_in 'Name', :with => 'Jimmy' end within_table('Employee') do fill_in 'Name', :with => 'Jimmy' end Rodando Javascript page.execute_script("$('body').empty()") result = page.evaluate_script('4 + 4');
  • 4. Debug save_and_open_page Mais exemplos Utilizando a DSL em qualquer lugar require 'capybara' require 'capybara/dsl' Capybara.default_driver = :culerity module MyModule include Capybara::DSL def login! within("//form[@id='session']") do fill_in 'Login', :with => 'user@example.com' fill_in 'Password', :with => 'password' end click_link 'Sign in' end end Chamando servidores remotos visit('http://www.google.com') Capybara.current_driver = :selenium Capybara.app_host = 'http://www.google.com' ... visit('/') Capybara sem o servidor Rack interno Capybara.run_server = false Session require 'capybara' session = Capybara::Session.new(:culerity, my_rack_app) session.within("//form[@id='session']") do session.fill_in 'Login', :with => 'user@example.com' session.fill_in 'Password', :with => 'password' end session.click_link 'Sign in' Seletores XPath within(:xpath, '//ul/li') { ... } find(:xpath, '//ul/li').text find(:xpath, '//li[contains(.//a[@href = "#"]/text(), "foo")]').value Seletores padrão Capybara.default_selector = :xpath find('//ul/li').text
  • 5. Seletores personalizados Capybara.add_selector(:id) do xpath { |id| XPath.descendant[XPath.attr(:id) == id.to_s] } end Capybara.add_selector(:row) do xpath { |num| ".//tbody/tr[#{num}]" } end Capybara.add_selector(:flash_type) do css { |type| "#flash.#{type}" } end find(:id, 'post_123') find(:row, 3) find(:flash_type, :notice) Adicionando drivers Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end Capybara.register_driver :selenium_chrome do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end Parte do Livro de Rails 3.1 de Rodrigo Urubatan Ferreira Jardim, guia de referência rápida publicado originalmente em http://www.urubatan.com.br