簡體   English   中英

如何使Capybara / Selenium在本地環境中與SSL完美配合

[英]How to get Capybara/Selenium to play nicely with SSL in local environment

我正在使用RSpec,Capybara和Selenium來測試我的本地Rails應用程序。 水豚本身運行良好。 我的問題是我在大多數應用程序中使用了強制SSL連接。

我現在有一種解決方法是配置Capybara進行javascript測試,如下所示:

Capybara.register_driver :selenium_profile do |app|
  profile = Selenium::WebDriver::Firefox::Profile.new
  profile.secure_ssl = false
  profile.assume_untrusted_certificate_issuer = true
  Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end 
Capybara.javascript_driver = :selenium_profile

Capybara.run_server = false
Capybara.server_port = 3001
Capybara.app_host = "https://localhost:%d" % Capybara.server_port

僅當我使用有效的本地SSL證書在端口3001上獨立啟動服務器時,這才起作用。 在實踐中,這很煩人,並且通常只是我不喜歡的手動依賴項。

有誰知道更清潔的解決方法嗎? 或者:

1)如何配置Capybara的內部服務器以查找和使用我的本地SSL證書?或者

2)如何為JavaScript測試禁用強制SSL,或者

3)如何在任何JavaScript測試之前自動啟動運行的本地服務器?

任何幫助將不勝感激。

您可以通過將接受應用程序和端口的代碼傳遞給Capybara.server來告訴Capybara如何啟動服務器。 默認只調用Rake :: Handler :: WEBrick.run:

# This is the default setting
Capybara.server = {|app, port| Capybara.run_default_server(app, port)}

def run_default_server(app, port)
  require 'rack/handler/webrick'
  Rack::Handler::WEBrick.run(app, :Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0))
end

只要傳遞給服務器的任何內容都接受應用程序和端口,就可以定義您喜歡的任何服務器啟動代碼。

Rack :: Handler :: WEBrick將其大多數選項直接傳遞到WEBrick :: HTTPServer,因此您可以將SSL配置的選項( 從文檔中獲取的SSLEnable,SSLCertificate和SSLPrivateKey)傳遞給服務器,如下所示:

def run_ssl_server(app, port)
  require 'rack/handler/webrick'
  require 'webrick/https'

  certificate = OpenSSL::X509::Certificate.new File.read '/myapp/some_directory/certificate.pem'
  key = OpenSSL::PKey::RSA.new File.read '/myapp/some_directory/key.pem'

  opts = {
    :Port => port,
    :AccessLog => [],
    :Logger => WEBrick::Log::new(nil, 0),
    :SSLEnable => true,
    :SSLCertificate => certificate,
    :SSLPrivateKey => key 
  }

  Rack::Handler::WEBrick.run(app, opts)
end

# Elsewhere in your test/spec helper
Capybara.server = {|app, port| run_ssl_server(app, port)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM