Подтвердить что ты не робот

Как найти изображение на странице с помощью Cucumber/Capybara в Rails 3

Я использую Cucumber/Capybara с Rails 3 и пытаюсь проверить наличие изображения после загрузки. Я не уверен, как проверить URL-адрес изображения, чтобы проверить его.

У меня есть следующий сценарий:

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"

Все проходит за исключением последнего шага.

Я пробовал это для определения своего шага, который отлично работает, если текст на странице, но не для URL-адреса изображения:

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

Затем я также попробовал что-то вроде этого определения шага:

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

который вызывает следующую ошибку:

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"'

Я предполагаю, что вам нужен шаг nokogiri, чтобы найти это правильно. Или, если есть лучший способ, я открыт для предложений. Как я могу проверить, что изображение, которое я только что загрузил, находится на странице? Спасибо.

4b9b3361

Ответ 1

Решение с Nokogiri должно работать нормально. Единственная проблема заключается в том, что API Cabybara отличается от Webrat, поэтому вместо response.body вы должны использовать page.body.

Но это еще лучший способ проверить изображение с помощью Cabybara:

Then /^I should see the image "(.+)"$/ do |image|
    page.should have_xpath("//img[@src=\"/public/images/#{image}\"]")
end

Ответ 2

Привет, я плохо разбираюсь в XPATH, но с CSS вы можете попробовать:

  if page.respond_to? :should
    page.should have_selector("img[src$='#{imagename}']")
  else
    assert page.has_selector?("img[src$='#{imagename}']")
  end

желание помогает! jramby

Ответ 3

Вы можете протестировать его таким образом, а также не в зависимости от пути:

Then /^I should see the image "(.+)"$/ do |image|
    page.should have_xpath("//img[contains(@src, \"#{image}\")]")
end

Ответ 4

page.should

теперь устарел. Вместо этого используйте

ожидать (страницы).то

Полный пример:

Then /^I should see the image "(.+)"$/ do |image|
    expect(page).to have_xpath("//img[contains(@src, \"#{image}\")]")
end

Ответ 5

Это работает?

page.should have_xpath('//img[@src="/public/images/foo.png"]')

Ответ 6

Да, но эти тесты xpath не будут иметь дело с тем, что...

/public/images/foo.jpg
public/images/foo.jpg
http://mydomain.com/public/images/foo.jpg

... - все равно действительная ссылка на изображение.

Ответ 7

Если у вас много изображений, которые вы хотите проверить, вы можете создать has_image? для Capybara.

Это легко, и этот пост объясняет это шаг за шагом: Добавление has_image? Матчи в Капибаре

Ответ 8

этот синтаксис работал у меня и более читабельен.

page.should have_css ( "img",: src= > "/public/images/foo.png" )