When your Cucumber feature needs to browse the page HTML, and you are not sure how to express your query as a clever CSS or XPath expression, there is another way: You can use 
  all
  
    Show archive.org snapshot
  
 and 
  find
  
    Show archive.org snapshot
  
 to grep through the DOM and then perform your search in plain Ruby.
Here is an example for this technique:
Then /^I should see an image with the filename "([^\"]*)"$/ do |filename|
  patiently do
    match = page.all('img').find do |img|
      img[:src].include?("/#{filename}")
    end
    expect(match).to be_present
  end  
end
Note that the check needs to be wrapped in a patiently helper since the DOM might change between page.all('img') and the check img[:src].include?, causing a Selenium::WebDriver::Error::StaleElementReferenceError.
If you can express a check in a readable CSS query, you should always do so. It does not need patiently since it is executed in a single Selenium command:
Then /^I should see an image with the filename "([^\"]*)"$/ do |filename|
  expect(page).to have_css("img[src*='/#{filename}']")
end
Note that Capybara matcher also take a block to define arbitrary conditions in Ruby:
Then /^I should see an image with the filename "([^\"]*)"$/ do |filename|
  expect(page).to have_css("img") { |img| img[:src].include?("/#{filename}") }
end