Created
November 8, 2012 11:07
-
-
Save rchampourlier/4038197 to your computer and use it in GitHub Desktop.
Capybara configuration connecting to selenium server for testing with a remote browser (pretty useful in Vagrant)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SELENIUM_SERVER is the IP address or hostname of the system running Selenium | |
# Server, this is used to determine where to connect to when using one of the | |
# selenium_remote_* drivers | |
SELENIUM_SERVER = "10.10.11.1" | |
# SELENIUM_APP_HOST is the IP address or hostname of this system (where the | |
# tests run against) as reachable for the SELENIUM_SERVER. This is used to set | |
# the Capybara.app_host when using one of the selenium_remote_* drivers | |
SELENIUM_APP_HOST = "10.10.11.2" | |
# CAPYBARA_DRIVER is the Capybara driver to use, this defaults to Selenium with | |
# Firefox | |
CAPYBARA_DRIVER = "selenium_remote_firefox" | |
# At this point, Capybara.default_driver is :rack_test, and | |
# Capybara.javascript_driver is :selenium. We can't run :selenium in the Vagrant box, | |
# so we set the javascript driver to :selenium_remote_firefox which we're going to | |
# configure. | |
Capybara.javascript_driver = :selenium_remote_firefox | |
RSpec.configure do |config| | |
config.before(:each) do | |
if selenium_remote? | |
Capybara.app_host = "http://#{SELENIUM_APP_HOST}:#{page.driver.rack_server.port}" | |
end | |
end | |
config.after(:each) do | |
Capybara.reset_sessions! | |
Capybara.use_default_driver | |
Capybara.app_host = nil | |
end | |
# Determines if a selenium_remote_* driver is being used | |
def selenium_remote? | |
!(Capybara.current_driver.to_s =~ /\Aselenium_remote/).nil? | |
end | |
end | |
# CapybaraDriverRegistrar is a helper class that enables you to easily register | |
# Capybara drivers | |
class CapybaraDriverRegistrar | |
# register a Selenium driver for the given browser to run on the localhost | |
def self.register_selenium_local_driver(browser) | |
Capybara.register_driver "selenium_#{browser}".to_sym do |app| | |
Capybara::Selenium::Driver.new(app, browser: browser) | |
end | |
end | |
# register a Selenium driver for the given browser to run with a Selenium | |
# Server on another host | |
def self.register_selenium_remote_driver(browser) | |
Capybara.register_driver "selenium_remote_#{browser}".to_sym do |app| | |
Capybara::Selenium::Driver.new(app, browser: :remote, url: "http://#{SELENIUM_SERVER}:4444/wd/hub", desired_capabilities: browser) | |
end | |
end | |
end | |
# Register various Selenium drivers | |
CapybaraDriverRegistrar.register_selenium_remote_driver(:firefox) |
I'm running into this problem even though my Selenium Grid is up and running with no error in the log.
Failure/Error: visit '/playlists'
Selenium::WebDriver::Error::ServerError:
status code 500
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/response.rb:74:in `assert_ok'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/bridge.rb:170:in `execute'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/bridge.rb:103:in `create_session'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/bridge.rb:54:in `handshake'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/remote/driver.rb:39:in `initialize'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/common/driver.rb:58:in `new'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver/common/driver.rb:58:in `for'
# /home/app/gems/ruby/2.2.0/gems/selenium-webdriver-3.5.2/lib/selenium/webdriver.rb:86:in `for'
# /home/app/gems/ruby/2.2.0/gems/capybara-2.11.0/lib/capybara/selenium/driver.rb:22:in `browser'
# /home/app/gems/ruby/2.2.0/gems/capybara-2.11.0/lib/capybara/selenium/driver.rb:55:in `visit'
# /home/app/gems/ruby/2.2.0/gems/capybara-2.11.0/lib/capybara/session.rb:246:in `visit'
# /home/app/gems/ruby/2.2.0/gems/capybara-2.11.0/lib/capybara/dsl.rb:52:in `block (2 levels) in <module:DSL>'
# ./spec/features/capybara_playlist_spec.rb:31:in `block (2 levels) in <top (required)>'
# /home/app/gems/ruby/2.2.0/gems/rspec-retry-0.5.4/lib/rspec/retry.rb:112:in `block in run'
# /home/app/gems/ruby/2.2.0/gems/rspec-retry-0.5.4/lib/rspec/retry.rb:101:in `loop'
# /home/app/gems/ruby/2.2.0/gems/rspec-retry-0.5.4/lib/rspec/retry.rb:101:in `run'
# /home/app/gems/ruby/2.2.0/gems/rspec-retry-0.5.4/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry'
# /home/app/gems/ruby/2.2.0/gems/rspec-retry-0.5.4/lib/rspec/retry.rb:30:in `block (2 levels) in setup'
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I keep getting:
NoMethodError:
undefined method `rack_server' for #Capybara::Selenium::Driver:0x007f9468b118c8
Any idea why that might be?