Передача пользовательских заголовков в Selenium из Капибары - PullRequest
1 голос
/ 14 апреля 2011

Мы используем пользовательские заголовки для аутентификации наших веб-приложений. Прокси-сервис http перехватывает запросы, подтверждает подлинность пользователя и затем вводит пользовательские заголовки в запрос.

Чтобы протестировать приложение, мне нужно записать эти заголовки в запрос, прежде чем он попадет в мои методы ApplicationController. Прямо сейчас, текущий взлом работает для всех моих не-JavaScript-тестов:

# in hooks.rb
Before do

  require 'capybara/driver/rack_test_driver'
  module Capybara::Driver
    class Authentic < RackTest
      def env
        super.merge('My-Custom-Header' => "foo")
      end
    end
  end

  Capybara.register_driver(:authentic) do |app|
    Capybara::Driver::Authentic.new(app)
  end

  Capybara.default_driver = :authentic
end

#in the controller    
class ApplicationController < ActionController::Base
  before_filter :authenticate

  def authenticate
    render :file => File.join(Rails.root, "public", "403.html") unless request.env.keys.include?('foo')
  end
end

любой запрос, который я не хочу аутентифицировать, я могу просто использовать тег для использования обычного драйвера rack_test:

Feature: Authentication
  Valid users should be authenticated.
  Invalid users should be redirected to the login page.

  Scenario: Authorized
    Given I am on the homepage
    Then I should see "Create a New Research Project"

  @rack_test
  Scenario: Unauthorized
    Given I go to the homepage
    Then I should see "You are not authorized to view this page."

когда я использую браузер селена, подобный метод переопределения env в драйвере, похоже, не эффективен. Я предполагаю, что это потому, что приложение помещено в очередь в потоке Java, и все элементы Rack уже настроены.

Куда мне добавить специальные заголовки для селена, чтобы забрать их?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

вы можете попробовать создать новый драйвер Selenium, новый профиль и переопределить заголовки этого нового профиля. Мне пришлось сделать что-то похожее, чтобы подделать различные пользовательские агенты.

Capybara.register_driver :mobile_browser do |app|
  require 'selenium-webdriver'

  profile = Selenium::WebDriver::Firefox::Profile.new
  profile['general.useragent.override'] = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7"

  Capybara::Driver::Selenium.new(app, {:browser => :firefox, :profile =>  profile})
end

Я не уверен, что вы можете изменить заголовки во время выполнения шагов - я уверен, что вы можете, используя Selenium API.

1 голос
/ 15 апреля 2011

Мы используем дополнительный кусок промежуточного программного обеспечения стойки (для тестовой среды) перед нашим приложением.Там вы можете сделать что угодно с env / request и полностью прозрачным для приложения и всех драйверов.

...