Skip to content

Commit

Permalink
Added support for using capybara
Browse files Browse the repository at this point in the history
  • Loading branch information
Paco Guzman authored and nando committed Mar 5, 2010
1 parent c862f88 commit 1fcf98f
Show file tree
Hide file tree
Showing 17 changed files with 346 additions and 76 deletions.
2 changes: 1 addition & 1 deletion Rakefile
Expand Up @@ -12,7 +12,7 @@ unless ARGV.any? {|a| a =~ /^gems/}
gem 'cucumber', '> 0.3.101', '<= 0.5.0'
require 'cucumber/rake/task'
namespace :mundo_pepino do
build_tasks = [:lib, :rails_generators, :en_US, :es_ES]
build_tasks = [:lib, :rails_generators, :en_US, :es_ES, :capybara_en_US, :capybara_es_ES]
build_tasks.each do |lang|
Cucumber::Rake::Task.new(lang) do |t|
t.cucumber_opts = "--profile #{lang} --format pretty"
Expand Down
3 changes: 3 additions & 0 deletions cucumber.yml
Expand Up @@ -2,3 +2,6 @@ lib: -r features/support/env.rb -r features/step_definitions/lib_steps.rb featur
es_ES: --require features/support/env.rb --require features/step_definitions/es_ES.rb features/es_ES/
en_US: --require features/support/env.rb --require features/step_definitions/en_US.rb features/en_US/
rails_generators: -r features/support/rails_generators_env.rb -r features/step_definitions/rails_generators_steps.rb features/rails_generators/

capybara_es_ES: --require features/support/capybara/env.rb --require features/step_definitions/es_ES.rb features/es_ES/
capybara_en_US: --require features/support/capybara/env.rb --require features/step_definitions/en_US.rb features/en_US/
4 changes: 2 additions & 2 deletions features/es_ES/cuando-adjunto-el-fichero.feature
Expand Up @@ -13,11 +13,11 @@ Característica: adjunto el fichero
########################################################################
Cuando visito la portada
Y adjunto el fichero "Rakefile" en Fichero Adjunto
Y pincho en el botón "Galleta de la fortuna"
Y pincho en el botón "Galleta de la Fortuna"
Entonces veo en la etiqueta div#file_filename el valor "Rakefile"

Escenario: Adjunto un fichero local en un campo de formulario (como Given)
Dado que visito la portada
Y que adjunto el fichero "Rakefile" en Fichero Adjunto
Cuando pincho en el botón "Galleta de la fortuna"
Cuando pincho en el botón "Galleta de la Fortuna"
Entonces veo en la etiqueta div#file_filename el valor "Rakefile"
6 changes: 3 additions & 3 deletions features/es_ES/cuando-elijo-de-radiobutton.feature
Expand Up @@ -34,16 +34,16 @@ Característica: elijo radiobutton
########################################################################
Cuando visito la portada
Y elijo la nacionalidad "Pakistaní"
Y pincho el botón "Galleta de la fortuna"
Y pincho el botón "Galleta de la Fortuna"
Entonces veo el tag div#nationality con el valor "Pakistaní"

Cuando visito la portada
Y elijo "Verde"
Y pincho el botón "Galleta de la fortuna"
Y pincho el botón "Galleta de la Fortuna"
Entonces veo el tag div#color con el valor "verde"

Escenario: Elijo una opción de un radiobutton (desde Given)
Dado que visito la portada
Y que elijo como color "VERDE"
Cuando pincho el botón "Galleta de la fortuna"
Cuando pincho el botón "Galleta de la Fortuna"
Entonces veo el tag div#color con el valor "verde"
6 changes: 3 additions & 3 deletions features/es_ES/cuando-marco-el-checkbox.feature
Expand Up @@ -20,22 +20,22 @@ Característica: marco el checkbox
########################################################################
# Pre-checking
Cuando visito la portada
Y pincho en el botón "Galleta de la fortuna"
Y pincho en el botón "Galleta de la Fortuna"
Entonces veo el tag div#selected_check con el valor "Seleccionado"
Y no veo el tag div#unselected_check con el valor "Sin seleccionar"

# Let's go for it...
Cuando visito la portada
Y desmarco la casilla seleccionada
Y marco la casilla sin seleccionar
Y pincho en el botón "Galleta de la fortuna"
Y pincho en el botón "Galleta de la Fortuna"
Entonces no veo el tag div#selected_check con el valor "Seleccionado"
Y veo el tag div#unselected_check con el valor "Sin seleccionar"

Escenario: Marco una casilla o checkbox (desde Given)
Dado que visito la portada
Y que desmarco la casilla seleccionada
Y que marco la casilla sin seleccionar
Cuando pincho en el botón "Galleta de la fortuna"
Cuando pincho en el botón "Galleta de la Fortuna"
Entonces no veo el tag div#selected_check con el valor "Seleccionado"
Y veo el tag div#unselected_check con el valor "Sin seleccionar"
Expand Up @@ -39,12 +39,12 @@ Característica: pulso una secuencia de enlaces y/o botones
Dado que visito la home
Y que pulso en los siguientes enlaces y botones:
| tipo | nombre |
| botón | Galleta de la fortuna |
| botón | Galleta de la Fortuna |
| enlace | Volver |
Y que pulso en los siguientes botones y enlaces:
| tipo | nombre |
| botón | Galleta de la fortuna |
| botón | Galleta de la Fortuna |
| enlace | Volver |
| botón | Galleta de la fortuna |
| botón | Galleta de la Fortuna |
Entonces veo la etiqueta H1 con el valor "Sorry, not implemented yet"

8 changes: 4 additions & 4 deletions features/es_ES/cuando-relleno-el-campo.feature
Expand Up @@ -21,21 +21,21 @@ Característica: relleno el campo
########################################################################
Cuando visito la portada
Y relleno "campo de texto" con "Fertilizador"
Y pincho en el botón "Galleta de la fortuna"
Y pincho en el botón "Galleta de la Fortuna"
Entonces veo el tag div#text_field con el valor "Fertilizador"
Cuando visito la portada
Y completo Campo de texto con el valor "Berenjenas"
Y pincho en el botón "Galleta de la fortuna"
Y pincho en el botón "Galleta de la Fortuna"
Entonces veo el tag div#text_field con el valor "Berenjenas"

Cuando visito la portada
Y completo "área de texto" con el valor "Garbanzos"
Y pincho en el botón "Galleta de la fortuna"
Y pincho en el botón "Galleta de la Fortuna"
Entonces veo el tag div#textarea con el valor "Garbanzos"

Escenario: Relleno un campo con un texto (desde Given)
Dado que visito la portada
Y que completo "área de texto" con el valor "Garbanzos"
Cuando pincho en el botón "Galleta de la fortuna"
Cuando pincho en el botón "Galleta de la Fortuna"
Entonces veo el tag div#textarea con el valor "Garbanzos"

2 changes: 1 addition & 1 deletion features/es_ES/cuando-relleno-los-campos.feature
Expand Up @@ -24,7 +24,7 @@ Característica: relleno los campos
| Campo | Valor |
| campo de texto | Fertilizador |
| área de texto | Garbanzos |
Y pincho en el botón "Galleta de la fortuna"
Y pincho en el botón "Galleta de la Fortuna"
Entonces veo el tag div#text_field con el valor "Fertilizador"
Y veo el tag div#textarea con el valor "Garbanzos"
Ejemplos:
Expand Down
26 changes: 13 additions & 13 deletions features/es_ES/cuando-selecciono-en-listado.feature
Expand Up @@ -17,22 +17,22 @@ Característica: selecciono en listado/s
########################################################################
Cuando visito la portada
Y selecciono "Hortalizas" en el listado de "Tipos de cultivo"
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#orchard_type con el valor "Hortalizas"

Cuando visito la portada
Y selecciono 'Frutales' en Tipos de Cultivo
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#orchard_type con el valor "Frutales"

Cuando visito la portada
Y selecciono 'Frutales' como Tipos de Cultivo
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#orchard_type con el valor "Frutales"

Cuando visito la portada
Y selecciono 'Hortalizas'
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#orchard_type con el valor "Hortalizas"

Escenario: Selecciono una fecha y hora sin indicar un campo específico
Expand All @@ -57,12 +57,12 @@ Característica: selecciono en listado/s
# (continua más abajo)
Cuando visito la portada
Y selecciono "25 de diciembre de 2008, 10:00" como fecha y hora
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#fecha-preferida con el valor "25/12/2008"
Y veo el tag div#hora-preferida con el valor "10:00"
Cuando visito la portada
Y selecciono 1 de setiembre de 1998, 12:46" como fecha y hora
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#fecha-preferida con el valor "1/9/1998"
Y veo el tag div#hora-preferida con el valor "12:46"
Expand Down Expand Up @@ -100,7 +100,7 @@ Característica: selecciono en listado/s
Cuando visito la portada
Y selecciono "23 de noviembre de 2004, 11:20" como fecha y hora Preferida
Y selecciono 25 de enero de 2005, 10:30 como fecha y hora de "Alternativa"
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#fecha-preferida con el valor "23/11/2004"
Y veo el tag div#hora-preferida con el valor "11:20"
Y veo el tag div#fecha-alternativa con el valor "25/1/2005"
Expand All @@ -126,12 +126,12 @@ Característica: selecciono en listado/s
# (continua más abajo)
Cuando visito la portada
Y selecciono 16:23 como hora
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#hora-preferida con el valor "16:23"
Cuando visito la portada
Y selecciono "4:23PM" como hora
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#hora-preferida con el valor "16:23"
Escenario: Selecciono una hora para un campo específico
Expand Down Expand Up @@ -180,12 +180,12 @@ Característica: selecciono en listado/s
# (continua más abajo)
Cuando visito la portada
Y selecciono "28 de marzo de 2005" como fecha
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#fecha-preferida con el valor "28/3/2005"
Cuando visito la portada
Y selecciono "2 de agosto de 2008" como la fecha
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#fecha-preferida con el valor "2/8/2008"
Escenario: Selecciono una fecha para un campo específico
Expand All @@ -210,7 +210,7 @@ Característica: selecciono en listado/s
Cuando visito la portada
Y selecciono 1 de octubre de 2009 como fecha para la vendimia
Y selecciono 15 de marzo de 2010 como fecha de "poda"
Y pulso el botón "Galleta de la fortuna"
Y pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#fecha-de-vendimia con el valor "1/10/2009"
Y veo el tag div#fecha-de-poda con el valor "15/3/2010"
Expand All @@ -220,7 +220,7 @@ Característica: selecciono en listado/s
Y que selecciono "23 de noviembre de 2009, 11:20" como fecha y hora "Alternativa"
Y que selecciono 1 de marzo de 2009 como fecha de la poda
Y que selecciono 'Hortalizas'
Cuando pulso el botón "Galleta de la fortuna"
Cuando pulso el botón "Galleta de la Fortuna"
Entonces veo el tag div#orchard_type con el valor "Hortalizas"
Y veo el tag div#fecha-preferida con el valor "25/1/2009"
Y veo el tag div#hora-preferida con el valor "10:30"
Expand Down
2 changes: 1 addition & 1 deletion features/support/app/config/locales/es.yml
Expand Up @@ -158,5 +158,5 @@ es:
app:
welcome:
title: 'Portada de Mundo Pepino'
cookie_fortune: 'Galleta de la fortuna'
cookie_fortune: 'Galleta de la Fortuna'
interpolated: 'Mensaje con {{name}}'
126 changes: 126 additions & 0 deletions features/support/capybara/capextensions.rb
@@ -0,0 +1,126 @@
module Capextensions

DATE_TIME_SUFFIXES = {
:year => '1i',
:month => '2i',
:day => '3i',
:hour => '4i',
:minute => '5i'
}

def click_link_within(selector, link_text)
within(:css, selector) do
click_link link_text
end
end

def select_date(date_to_select, options={})
date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
date_to_select : Date.parse(date_to_select)

if options[:id_prefix].blank?
if options[:from].blank?
source = locate(:xpath, Capybara::XPath.append("//select[contains(@id, '_#{DATE_TIME_SUFFIXES[:year]}')]"))
id_prefix = source.node.attributes["id"].value[/(.*?)_#{DATE_TIME_SUFFIXES[:year]}$/, 1]
else
msg = "cannot select option, no select box with id, name, or label '#{options[:from]}' found"
begin
label = locate(:xpath, Capybara::XPath.append("//label[text()='#{options[:from]}']"), msg)
id_prefix = label.node.attributes["for"].value
rescue Capybara::ElementNotFound
begin
previous_exception = $!
label = locate(:xpath, Capybara::XPath.append("//label[text()='#{options[:from].capitalize}']"), msg)
id_prefix = label.node.attributes["for"].value
rescue
raise "#{previous_exception}\nand\n#{$!}"
end
end
end
end

id_prefix ||= options[:id_prefix]

select date.year, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:year]}"
select date.strftime('%B'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:month]}"
select date.day, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:day]}"
end

def select_time(time_to_select, options ={})
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)

if options[:id_prefix].blank?
if options[:from].blank?
source = locate(:xpath, Capybara::XPath.append("//select[contains(@id, '_#{DATE_TIME_SUFFIXES[:hour]}')]"))
id_prefix = source.node.attributes["id"].value[/(.*?)_#{DATE_TIME_SUFFIXES[:hour]}$/, 1]
else
msg = "cannot select option, no select box with id, name, or label '#{options[:from]}' found"
begin
label = locate(:xpath, Capybara::XPath.append("//label[text()='#{options[:from]}']"), msg)
id_prefix = label.node.attributes["for"].value
rescue Capybara::ElementNotFound
begin
previous_exception = $!
label = locate(:xpath, Capybara::XPath.append("//label[text()='#{options[:from].capitalize}']"), msg)
id_prefix = label.node.attributes["for"].value
rescue
raise "#{previous_exception}\nand\n#{$!}"
end
end
end
end

id_prefix ||= options[:id_prefix]

select time.hour.to_s.rjust(2, '0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:hour]}"
select time.min.to_s.rjust(2, '0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:minute]}"
end

def select_datetime(time_to_select, options={})
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)

if options[:from]
msg = "cannot select option, no select box with id, name, or label '#{options[:from]}' found"
begin
label = locate(:xpath, Capybara::XPath.append("//label[text()='#{options[:from]}']"), msg)
id_prefix = label.node.attributes["for"].value
rescue Capybara::ElementNotFound
begin
previous_exception = $!
label = locate(:xpath, Capybara::XPath.append("//label[text()='#{options[:from].capitalize}']"), msg)
id_prefix = label.node.attributes["for"].value
rescue
raise "#{previous_exception}\nand\n#{$!}"
end
end
end

options[:id_prefix] ||= (options[:from] ? id_prefix : nil)

select_date time, options
select_time time, options
end

# Maybe this methos should be defined in the other order, capybara is the default?
def response(*args, &block)
page(*args, &block)
end

def have_tag(*args, &block)
text = args[1]
unless text.blank?
have_css(args.first, :text => text)
else
have_css(args.first)
end
end

def have_selector(path, options = {})
# content key to text key
content = options.delete(:content)
options[:text] = content unless content.nil?
have_css(path, options)
end
end

World(Capextensions)

0 comments on commit 1fcf98f

Please sign in to comment.