2013-03-23 12 views

Odpowiedz

6
describe "check images and favicon" do 
    before { visit "url/to/check") 

    it "should have the images" do 
    page.should have_css('img', text: "image1.jpg") 

    it "should have the favicon" do 
    page.should have_xpath("/html/head/link[@href='favicon.ico']" 
    end 
end 
+0

I Domyślam się, że to jest najlepsze, co ja dostać. Podziękowania –

+0

Obecność selektora to za mało, obraz może zostać złamany –

2

Pytanie dotyczy tego, czy obecny jest img i favicon. Oto kod sprawdzający, czy wszystkie obrazy dla suwaka są obecne.

page.all('#carousel img').each do |img| 
    visit img[:src] 
    page.status_code.should be 200 
end 

Dla indywidualny wizerunek z wykorzystaniem id myimage

visit page.find('img#myimage')[:src] 
page.status_code.should be 200 

a dla favicon najprostszych jest uruchomienie następujących

page.all('link[rel~="icon"]', visible: :any).each do |fav| 
    visit fav[:href] 
    page.status_code.should be 200 
end 
+0

kod statusu ma pewne wyjątki w niektórych sterownikach, np. Firefox –

3
# frozen_string_literal: true 

module Capybara 
    module CustomMatchers 
    include Capybara::DSL 

    class Asset 
     def asset_exists?(actual, src) 
     js_script = <<JSS 
xhr = new XMLHttpRequest(); 
xhr.open('GET', '#{src}', true); 
xhr.send(); 
JSS 
     actual.execute_script(js_script) 
     status = actual.evaluate_script('xhr.status') # get js variable value 
     status == 200 || status == 302 
     end 
    end 

    class LoadImage < Asset 
     def initialize(*args) 
     @args = args 
     @src = args.first 
     end 

     def matches?(actual) 
     is_present = actual.has_selector?("img[src='#{@src}']") 
     is_present && asset_exists?(actual, @src) 
     end 

     def does_not_match?(actual) 
     actual.has_no_selector?("img[src='#{@src}']") 
     end 

     def failure_message 
     "No image loaded with source: '#{@src}'" 
     end 

     def failure_message_when_negated 
     "Image loaded with source: '#{@src}'" 
     end 

     def description 
     "Verify if image with source: '#{@src}' is loaded" 
     end 
    end 

    class LoadFavicon < Asset 
     def initialize(*args) 
     @args = args 
     @rel = args.first 
     @href = args.second 
     end 

     def matches?(actual) 
     is_present = actual.has_selector?("link[rel='#{@rel}'][href='#{@href}']", visible: false) 
     is_present && asset_exists?(actual, @href) 
     end 

     def does_not_match?(actual) 
     actual.has_no_selector?("link[rel='#{@rel}'][href='#{@href}']", visible: false) 
     end 

     def failure_message 
     "No favicon loaded with rel: '#{@rel}' and href: '#{@href}'" 
     end 

     def failure_message_when_negated 
     "Favicon loaded with rel: '#{@rel}' and href: '#{@href}'" 
     end 

     def description 
     "Verify if favicon with rel: '#{@rel}' and href: '#{@href}' is loaded" 
     end 
    end 

    def load_image(*args) 
     LoadImage.new(*args) 
    end 

    def load_favicon(*args) 
     LoadFavicon.new(*args) 
    end 
    end 
end 

RSpec.configure do |config| 
    config.include Capybara::CustomMatchers 
end 

Odjazd https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db Star i pobrać

+0

To jest sprytne. Zmodyfikowałem go do pracy z moją konfiguracją MiniTest. – jfroom

+0

Uważaj na CORS, może musisz zmodyfikować opcje przeglądarki, aby je wyłączyć –

Powiązane problemy