2013-03-23 28 views

Trả lời

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

tôi đoán đây là tốt nhất tôi c nhận được. THanks –

+0

Sự hiện diện của bộ chọn là không đủ, hình ảnh có thể bị hỏng –

2

Câu hỏi đặt ra là tìm hiểu xem thực tế img và favicon có mặt không. Đây là mã để kiểm tra xem tất cả các hình ảnh cho thanh trượt có mặt không.

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

Đối với hình ảnh cá nhân với việc sử dụng id myimage

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

Và đối với favicon đơn giản nhất là để chạy sau

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

status_code có một số ngoại lệ trong một số trình điều khiển, firefox ví dụ –

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 

Kiểm tra https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db để ngôi sao và tải

+0

Điều này là thông minh. Tôi đã sửa đổi nó để làm việc với thiết lập MiniTest của tôi. – jfroom

+0

Hãy cẩn thận với CORS, có thể bạn cần phải sửa đổi các tùy chọn trình duyệt để tắt nó –

Các vấn đề liên quan