我试图在我的规范中屏蔽URL,实现了与使用capybara_webkit
:时类似的功能
Capybara::Webkit.configure do |config|
config.block_url("*google*")
config.allow_url('*my_website.com')
end
看完这篇文章后,我试着做一些类似的事情:
require 'webmock/rspec'
module WebmockConfig
def self.default_disabled_urls
[
'*google*'
]
end
end
WebMock.disable_net_connect!(allow_localhost: true)
WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls)
但我得到
实际HTTP连接被禁用。未注册的请求:POSThttp://127.0.0.1/session
即使这应该由WebMock.disable_net_connect!(allow_localhost: true)
解决。
在没有WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls)
的情况下运行规范时,一切正常。
capybara-webkit
白/黑名单会影响浏览器发出的请求,而WebMock只能影响应用程序发出的请求。这意味着WebMock
对你想要的东西毫无用处,因为它实际上不会阻止你的浏览器从谷歌等加载任何东西。要在使用硒驱动程序时做到这一点,你需要使用一个可编程的代理程序,比如puffing-billy,它可以让你自定义浏览器发出的任何匹配请求的响应。
要使用无头chrome和蓬松的billy配置驱动程序,可以执行类似的操作
Capybara.register_driver :headless_chrome do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.headless!
browser_options.add_argument("--proxy-server=#{Billy.proxy.host}:#{Billy.proxy.port}")
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
您是否需要任何其他选项取决于您的系统配置等,但您应该能够通过查看当前的驱动程序注册来判断。
allow_localhost: true
设置被allow: WebmockConfig.default_disabled_urls
覆盖,您必须用两个设置调用WebMock.disable_net_connect!
一次,或者通过将'localhost', '127.0.0.1'
条目添加到self.default_disabled_urls
中