gpt4 book ai didi

ruby-on-rails - 如何让 Capybara/Selenium 在本地环境中很好地使用 SSL

转载 作者:行者123 更新时间:2023-12-04 13:50:13 24 4
gpt4 key购买 nike

我正在使用 RSpec、Capybara 和 Selenium 来测试我的本地 Rails 应用程序。 Capybara 本身运行良好。我的问题是我在大部分应用程序中使用了强制 SSL 连接。

我现在的解决方法是像这样为 javascript 测试配置 Capybara:

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 测试之前自动启动本地服务器运行?

如有任何帮助,我们将不胜感激。

最佳答案

您可以通过将接受应用程序和端口的 block 传递给 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,采用 from the docs)并启动您的服务器,例如这个:

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)}

关于ruby-on-rails - 如何让 Capybara/Selenium 在本地环境中很好地使用 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17687993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com