, एक ही मुद्दा आज था, सिवाय इसके कि मैं परीक्षण प्रति अलग संदर्भित सेट करने के लिए की जरूरत है। मैं हेडर्स पास करने के लिए एक मिडलवेयर और एक वर्ग का उपयोग कर समाप्त हुआ। सोचा मैं साझा करते हैं (या शायद वहाँ एक क्लीनर समाधान है?):
lib/request_headers.rb:
class CustomHeadersHelper
cattr_accessor :headers
end
class RequestHeaders
def initialize(app, helper = nil)
@app, @helper = app, helper
end
def call(env)
if @helper
headers = @helper.headers
if headers.is_a?(Hash)
headers.each do |k,v|
env["HTTP_#{k.upcase.gsub("-", "_")}"] = v
end
end
end
@app.call(env)
end
end
config/initializers/middleware.rb
require 'request_headers'
if %w(test cucumber).include?(Rails.env)
Rails.application.config.middleware.insert_before Rack::Lock, "RequestHeaders", CustomHeadersHelper
end
spec/support/capybara_headers.rb
require 'request_headers'
module CapybaraHeaderHelpers
shared_context "navigating within the site" do
before(:each) { add_headers("Referer" => Capybara.app_host + "/") }
end
def add_headers(custom_headers)
if Capybara.current_driver == :rack_test
custom_headers.each do |name, value|
page.driver.browser.header(name, value)
end
else
CustomHeadersHelper.headers = custom_headers
end
end
end
spec/spec_helper.rb
...
config.include CapybaraHeaderHelpers
तब मैं साझा संदर्भ मैं जहाँ भी जरूरत है शामिल कर सकते हैं , या before
ब्लॉक में विभिन्न शीर्षलेख पास करें। मैंने सेलेनियम और रैकटेस्ट के अलावा किसी अन्य चीज़ के साथ इसका परीक्षण नहीं किया है, लेकिन यह पारदर्शी होना चाहिए, क्योंकि अनुरोध वास्तव में एप्लिकेशन को हिट करने से पहले हेडर इंजेक्शन किया जाता है।
संभावित डुप्लीकेट: [हेडर और सेलेनियम वेबड्राइवर 2] (http://stackoverflow.com/q/13047195/841064), [सेलेनियम 2 का उपयोग कर http RequestHeader कैसे भेजें?] (Http://stackoverflow.com/ क्यू/6478672/841064) –
एक और संभावित डुप्लिकेट: [सेलेनियम वेबड्राइवर के साथ संभाले गए HTTP अनुरोध में हेडर या पैरामीटर कैसे जोड़ें?] (http://stackoverflow.com/q/10426860/841064) –
धन्यवाद, एंड्री। मुझे आश्चर्य है कि जब मैं खोज रहा था तो इन्हें क्यों पेश नहीं किया गया था ... – tamouse