Estoy usando Cucumber/Capybara with Rails 3 y estoy tratando de validar la existencia de una imagen después de la carga. No estoy seguro de cómo verificar la URL de la imagen para validarla.¿Cómo puedo encontrar una imagen en una página con Cucumber/Capybara en Rails 3
que tienen el siguiente escenario:
Scenario: Create new listing
Given I am on the new listing page
When I fill in "listing_name" with "Amy Johnson Photography"
And I attach the file "features/support/test_image.jpg" to "listing_images_attributes_0_photo"
And I press "Create"
Then I should see "Amy Johnson Photography"
And I should see the image "test_image.jpg"
Todo pasa, excepto el último paso.
He intentado esto para mi definición de paso, que funciona muy bien si se trata de texto en la página, pero no lo hace para una URL de la imagen:
Then /^I should see the image "(.+)"$/ do |image|
if page.respond_to? :should
page.should have_content(image)
else
assert page.has_content?(image)
end
end
Luego También he intentado algo parecido a este paso definición lugar:
Then /^I should see the image "(.+)"$/ do |image|
html = Nokogiri::HTML(response.body)
tags = html.xpath('//img[@src="/public/images/foo.png"]')
# tags.length.should eql(num_of_images)
end
que provoca el error siguiente:
And I should see the image "test_image.jpg" # features/step_definitions/listing_steps.rb:41
undefined method `body' for nil:NilClass (NoMethodError)
./features/step_definitions/listing_steps.rb:42:in `/^I should see the image "(.+)"$/'
features/manage_listings.feature:24:in `And I should see the image "test_image.jpg"'
Asumo necesitas un paso de nokogiri para encontrar esto correctamente. O si hay una mejor manera, estoy abierto a sugerencias. ¿Cómo puedo validar que la imagen que acabo de subir está en la página? Gracias.
En su definición de paso que está recibiendo un error de capibara común. Intenta usar 'page.body' en lugar de 'response.body' si no recuerdo mal. – Mauricio
No sé si puede usar una expresión regular en xpath, pero si tiene acceso a su instancia de Listing, puede usar una interpolación de cadena "// img [@src = '/ public/images/# {@ listing_id } /foo.png '] " – monocle
Esta página contiene una buena referencia de selector CSS3 que lo ayudará a: http://reference.sitepoint.com/css/css3attributeselectors – sivabudh