Как я могу проверить одно, несколько или ни одного изображения на странице с огурцом? - PullRequest
3 голосов
/ 20 июля 2010

Я хочу проверить, есть ли у меня 0, 1, 2 или 3 раза изображения ('foo.png') на определенной странице с огурцом.

Как мне написать собственный шаг?

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

Вам нужно написать собственный шаг огурца, который использует пользовательское сопоставление ожиданий rspec.

Код sudo будет выглядеть примерно так.

функции / page.feature

Given I am on the images page
Then I should see 3 images

функции / step_definitions / page_steps.rb

Этот файл будет использовать nokogiri для сбора всех изображений с заданным именем, а затем использовать rspec для проверки вашего ожидания.

Then /^I should see (.+) images$/ do |num_of_images|
   html = Nokogiri::HTML(response.body)
   tags = html.xpath('//img[@src="/public/images/foo.png"]')
   tags.length.should eql(num_of_images)
end

Вот рабочий пример Rspec, который показывает, как использовать Nokogiri с Rspec

require 'nokogiri'

describe "ImageCount" do 

  it "should have 4 image" do
    html = Nokogiri::HTML('<html><body><div id=""><img src="/public/images/foo.png"></div>    <div id=""><img src="/public/images/foo.png"></div>    <div id=""><img src="/public/images/foo.png"></div>    <div id=""><img src="/public/images/foo.png"></div>    </html></body>')
    tags = html.xpath('//img[@src="/public/images/foo.png"]')
    tags.length.should eql(4)
  end

  it "should have 3 image" do
    html = Nokogiri::HTML('<html><body><div id=""><img src="/public/images/bar.png"></div>    <div id=""><img src="/public/images/foo.png"></div>    <div id=""><img src="/public/images/foo.png"></div>    <div id=""><img src="/public/images/foo.png"></div>    </html></body>')
    tags = html.xpath('//img[@src="/public/images/foo.png"]')
    tags.length.should eql(3)
  end

  it "should have 1 image" do
    html = Nokogiri::HTML('<html><body><div id=""><img src="/public/images/bar.png"></div>    <div id=""><img src="/public/images/aaa.png"></div>    <div id=""><img src="/public/images/bbb.png"></div>    <div id=""><img src="/public/images/foo.png"></div>    </html></body>')
    tags = html.xpath('//img[@src="/public/images/foo.png"]')
    tags.length.should eql(1)
  end

end
0 голосов
/ 25 мая 2011

Это еще один способ использования капибары:

Then /^(?:|I )should see (\d+) images?$/ do |count|
  all("img").length.should == count.to_i
end
...