ruby - 使用 headless Chrome 将 URL 列入黑名单

标签 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)

但是我得到了

Real HTTP connections are disabled. Unregistered request: POST http://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 对于您想要的是无用的,因为它实际上不会阻止您的浏览器从 google 等加载任何内容。要在使用 selenium 驱动程序时做到这一点,您需要使用可编程代理,如 puffing-billy这将允许您为浏览器发出的任何匹配请求自定义响应。

要使用 headless 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

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

关于ruby - 使用 headless Chrome 将 URL 列入黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536998/

相关文章:

ruby - 如何排除匹配特定标签的 RSpec 测试?

ruby-on-rails - Rspec 测试失败,当用户应该被授予访问他拥有的交易的权限时,用户被重定向

ruby-on-rails - 使用 capistrano 时如何阻止 bundle 程序在屏幕上显示密码?

ruby-on-rails - 仅在生产中查找 Controller 问题的问题

ruby-on-rails - (JSON::ParserError) "{N}: unexpected token at ' alihack<%eval 请求(\"alihack.com\")%>

ios - 在 iOS 上测试不同的日历

javascript - 在单元测试中,如何测试具有对象参数的函数?

java - 使用 PowerMockito 测试 Unirest

ruby-on-rails - 使用 rspec 测试 before_destroy 方法

ruby-on-rails - 什么样的行为应该成为测试的对象?