首页 > 解决方案 > 初始化后是否可以设置 Selenium::Driver::Proxy

问题描述

我目前正在使用 Capybara 和 Chromedriver 在我们的 Rails 应用程序中运行功能测试。目前我可以看到在初始化驱动程序时可以通过 args 设置代理。

    Capybara.register_driver :selenium_chrome do |app|
      Capybara::Selenium::Driver.new(
        app,
        browser: :chrome,
        args: [
          '--window-size=1240,1400',
          "--proxy-server=#{s.url}",
          '--proxy-bypass-list=127.0.0.1'
        ]
      )
    end

但是,我只想要特定测试来代理特定端口,因为我还使用 Capybara::Discoball 来启动 Sinatra 应用程序作为我代理外部请求的应用程序。所以我需要能够在代理初始化到当前启动的 Sinatra 应用程序的端口后更改它。初始化后可以吗?

标签: ruby-on-railsrspeccapybaraselenium-chromedriver

解决方案


否,但您可以使用另一个名称注册另一个驱动程序,然后指定将其用于需要它的测试。假设您使用的是默认的 capybara rspec 配置,类似于

Capybara.register_driver :selenium_chrome do |app|
  # register the driver without proxy here
end

Capybara.register_driver :selenium_chrome_proxy do |app|
  # register the driver with proxy config here
end

Capybara.javascript_driver = :selenium_chrome # register default JS driver

it "does something that doesn't need proxy", js: true do
   # test that doesn't use the proxy config
end

it "does something that needs proxy", driver: :selenium_chrome_proxy do
  # test that uses proxy
end

推荐阅读