带有无头Chrome的黑名单网址

时间:2018-07-26 10:47:03

标签: ruby testing rspec capybara webmock

我正在尝试阻止规范中的URL,以实现与使用capybara_webkit时类似的效果:

Capybara::Webkit.configure do |config|
  config.block_url("*google*")
  config.allow_url('*my_website.com')
end

阅读this article之后,我试图做类似的事情:

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连接被禁用。未注册的请求:POST http://127.0.0.1/session

即使应该由WebMock.disable_net_connect!(allow_localhost: true)解决。

在不使用WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls)的情况下运行规范时,一切正常。

2 个答案:

答案 0 :(得分:2)

capybara-webkit白名单/黑名单会影响浏览器发出的请求,而WebMock仅会影响您的应用发出的请求。这意味着WebMock对您想要的东西毫无用处,因为它实际上并不会阻止您的浏览器从Google加载任何内容,等等。为此,在使用硒驱动程序时,您需要使用{{3}这样的可编程代理},您可以针对浏览器发出的任何匹配请求自定义响应。

要使用无头chrome和puffing_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

是否需要其他选项取决于您的系统配置等,但是您应该可以通过查看当前的驱动程序注册来判断。

答案 1 :(得分:1)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="tree"></div>的设置被allow_localhost: true覆盖,您必须同时调用两次allow: WebmockConfig.default_disabled_urls或将WebMock.disable_net_connect!项添加到'localhost', '127.0.0.1'