Como escribí en Tests funcionales de AJAX con Cucumber estámos usando la combinación Cucumber con Celerity/Culerity para los tests funcionales de nuestra aplicación. Culerity viene ya con algunos pasos de Cucumber para usar Celerity. Hoy voy a compartir algunos pasos que hemos añadido y que nos ayudan a crear mejores escenarios de Cucumber.
Rellenar campos
Culerity tiene un método "When /I fill in "(.*)" for "(.*)"/" que busca un campo a traves de un Label y lo rellena. Pero el nombre tiene que ser exactamente igual como el valor de texto del elemento Label. Esto a veces es demasiado estricto para nosotros, y por eso cambié este método:
When /I fill in "(.*)" for "(.*)"/ do |value, field|
begin
$browser.text_field(:id, find_label(field).for).set(value)
rescue
# When no label is found with an exact match, search for labels containing the supplied text.
$browser.text_field(:id, find_label(/#{field}/m).for).set(value)
end
end
Si encuentra un input con un Label llamado exactamente igual como el parametro "value" el comportamiento sigue igual. Si no encuentra in Input, intenta buscar un Label que contiene la cadena que buscamos.
Para los casos en que no tenemos un Label para un Input, usamos el siguiente método:
When /I fill in "(.*)" for TEXT INPUT with id "(.*)"/ do |value, field|
$browser.text_field(:id, field).set(value)
end
Para rellenar un campo de tipo "File" he creado el siguiente paso:
When /^I select the file "([^\"]*)" for "([^\"]*)"$/ do |file_name, field|
file_path = File.expand_path(File.join(RAILS_ROOT, "spec/fixtures", file_name))
file_path.should be_a_file
begin
file_field = $browser.file_field(:id, find_label(field).for)
rescue
# When no label is found with an exact match, search for labels containing the supplied text.
file_field = $browser.file_field(:id, find_label(/#{field}/m).for)
end
file_field.set(file_path)
file_field.value.should be_present
end
La forma de buscar el campo a traves del Label asociado es igual como arriba, pero este paso comprueba que el archivo existe en la carpeta "spec/fixtures" antes de rellenar el campo.
