capybara-selenium 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +38 -25
- data/capybara_selenium.gemspec +1 -1
- data/lib/capybara_selenium.rb +35 -17
- data/lib/capybara_selenium/app_server/configuration.rb +11 -0
- data/lib/capybara_selenium/app_server/configurator.rb +21 -0
- data/lib/capybara_selenium/selenium_server/configuration.rb +11 -0
- data/lib/capybara_selenium/selenium_server/configurator.rb +36 -0
- data/lib/capybara_selenium/server/configurator.rb +34 -0
- data/lib/capybara_selenium/version.rb +1 -1
- metadata +10 -6
- data/lib/capybara_selenium/app_server.rb +0 -42
- data/lib/capybara_selenium/selenium_server.rb +0 -71
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e7b1e32af7160025a7ba412bf91e82e7db92c5b0
         | 
| 4 | 
            +
              data.tar.gz: 23460a046866acf85a8485c2f496c2038d0730dd
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a6a5849c6b568f26632895a671746f0db3a7b9666750ed8bccf2a4bba8c4b892e1d883f9ea8db6322ab4da9046b2070b2569b03b076db8ede9a15948677bac45
         | 
| 7 | 
            +
              data.tar.gz: d681950100ef0fa127ab6bdf8939da450d051bb4bc25b27a0e190749d13c7da23e92901a44d954af8a476ab62a01fba9cd2bb82945d348ab8adeff53c412dd9c
         | 
    
        data/CHANGELOG.md
    ADDED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -32,40 +32,53 @@ Supported applications: | |
| 32 32 | 
             
            - [X] Modular sinatra apps (through config.ru)
         | 
| 33 33 | 
             
            - [ ] Rails apps
         | 
| 34 34 |  | 
| 35 | 
            +
            #### Option 1: Using a block in constructor call (Recommended)
         | 
| 36 | 
            +
             | 
| 35 37 | 
             
            ```ruby
         | 
| 36 38 | 
             
            # features/support/continous_integration.rb
         | 
| 37 | 
            -
             | 
| 38 | 
            -
               | 
| 39 | 
            -
                 | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
                   | 
| 43 | 
            -
                  config_ru_path: ENV['CI_APP_SERVER_CONFIG_RU'] || config_ru_path
         | 
| 44 | 
            -
                }.merge(opts)
         | 
| 39 | 
            +
            CapybaraSelenium::Configurator.new do
         | 
| 40 | 
            +
              rack_app_server.configure do |config|
         | 
| 41 | 
            +
                config.host = ENV['CI_APP_SERVER_HOST'] || 'localhost'
         | 
| 42 | 
            +
                config.port = ENV['CI_APP_SERVER_PORT'] || 8080
         | 
| 43 | 
            +
                config.config_ru_path  = File.expand_path(
         | 
| 44 | 
            +
                  File.join(__FILE__, '../web_app/config.ru'))
         | 
| 45 45 | 
             
              end
         | 
| 46 46 |  | 
| 47 | 
            -
               | 
| 48 | 
            -
                 | 
| 49 | 
            -
                   | 
| 50 | 
            -
             | 
| 51 | 
            -
                  capabilities: {
         | 
| 52 | 
            -
                    browser_name: :firefox
         | 
| 53 | 
            -
                  }
         | 
| 54 | 
            -
                }.merge(opts)
         | 
| 47 | 
            +
              remote_selenium_server.configure do |config|
         | 
| 48 | 
            +
                config.server_url = ENV['CI_SELENIUM_SERVER_URL'] ||
         | 
| 49 | 
            +
                  'http://127.0.0.1:4444/wd/hub'
         | 
| 50 | 
            +
                config.capabilities = { browser_name: browser_name }
         | 
| 55 51 | 
             
              end
         | 
| 52 | 
            +
            end
         | 
| 53 | 
            +
            ```
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            #### Option 2: Using instance methods
         | 
| 56 56 |  | 
| 57 | 
            +
            ```ruby
         | 
| 58 | 
            +
            # features/support/continous_integration.rb
         | 
| 59 | 
            +
            module ContinousIntegration
         | 
| 57 60 | 
             
              def driver_for(browser_name)
         | 
| 58 | 
            -
                CapybaraSelenium:: | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 61 | 
            +
                @configurator = CapybaraSelenium::Configurator.new
         | 
| 62 | 
            +
                configure_rack_app_server
         | 
| 63 | 
            +
                configure_selenium_server(browser_name)
         | 
| 64 | 
            +
                @configurator.apply
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              def configure_rack_app_server
         | 
| 68 | 
            +
                @configurator.rack_app_server.configure do |config|
         | 
| 69 | 
            +
                  config.host = ENV['CI_APP_SERVER_HOST'] || 'localhost'
         | 
| 70 | 
            +
                  config.port = ENV['CI_APP_SERVER_PORT'] || 8080
         | 
| 71 | 
            +
                  config.config_ru_path  = File.expand_path(
         | 
| 72 | 
            +
                    File.join(__FILE__, '../web_app/config.ru'))
         | 
| 73 | 
            +
                end
         | 
| 65 74 | 
             
              end
         | 
| 66 75 |  | 
| 67 | 
            -
              def  | 
| 68 | 
            -
                 | 
| 76 | 
            +
              def configure_selenium_server(browser_name)
         | 
| 77 | 
            +
                @configurator.remote_selenium_server.configure do |config|
         | 
| 78 | 
            +
                  config.server_url = ENV['CI_SELENIUM_SERVER_URL'] ||
         | 
| 79 | 
            +
                    'http://127.0.0.1:4444/wd/hub'
         | 
| 80 | 
            +
                  config.capabilities = { browser_name: browser_name }
         | 
| 81 | 
            +
                end
         | 
| 69 82 | 
             
              end
         | 
| 70 83 | 
             
            end
         | 
| 71 84 |  | 
    
        data/capybara_selenium.gemspec
    CHANGED
    
    | @@ -10,7 +10,7 @@ Gem::Specification.new do |spec| | |
| 10 10 | 
             
              spec.email         = ['david.saenz.tagarro@gmail.com']
         | 
| 11 11 | 
             
              spec.summary       = %q{Dead-simple way to make Capybara and Selenium play together }
         | 
| 12 12 | 
             
              spec.description   = %q{}
         | 
| 13 | 
            -
              spec.homepage      = ''
         | 
| 13 | 
            +
              spec.homepage      = 'https://github.com/dsaenztagarro/capybara-selenium'
         | 
| 14 14 | 
             
              spec.license       = 'MIT'
         | 
| 15 15 |  | 
| 16 16 | 
             
              spec.files         = `git ls-files -z`.split("\x0")
         | 
    
        data/lib/capybara_selenium.rb
    CHANGED
    
    | @@ -1,6 +1,9 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 1 | 
            +
            require_relative 'capybara_selenium/version'
         | 
| 2 | 
            +
            require_relative 'capybara_selenium/server/configurator'
         | 
| 3 | 
            +
            require_relative 'capybara_selenium/app_server/configurator'
         | 
| 4 | 
            +
            require_relative 'capybara_selenium/app_server/configuration'
         | 
| 5 | 
            +
            require_relative 'capybara_selenium/selenium_server/configurator'
         | 
| 6 | 
            +
            require_relative 'capybara_selenium/selenium_server/configuration'
         | 
| 4 7 |  | 
| 5 8 | 
             
            require 'active_support/inflector'
         | 
| 6 9 |  | 
| @@ -8,32 +11,47 @@ require 'active_support/inflector' | |
| 8 11 | 
             
            module CapybaraSelenium
         | 
| 9 12 | 
             
              # Class for configuring capybara and selenium in order to instance the
         | 
| 10 13 | 
             
              # desired driver.
         | 
| 11 | 
            -
              class  | 
| 14 | 
            +
              class Configurator
         | 
| 12 15 | 
             
                include AppServer
         | 
| 13 16 | 
             
                include SeleniumServer
         | 
| 17 | 
            +
                attr_reader :driver
         | 
| 14 18 |  | 
| 15 | 
            -
                def initialize( | 
| 16 | 
            -
                   | 
| 17 | 
            -
                  @app_server = configurator_for :app_server, opts
         | 
| 18 | 
            -
                  @selenium_server = configurator_for :selenium_server, opts
         | 
| 19 | 
            +
                def initialize(&block)
         | 
| 20 | 
            +
                  define_singleton_method(:dispatch, block) if block_given?
         | 
| 19 21 | 
             
                end
         | 
| 20 22 |  | 
| 21 | 
            -
                def  | 
| 23 | 
            +
                def apply
         | 
| 22 24 | 
             
                  @app_server.apply
         | 
| 23 | 
            -
                  @selenium_server.apply
         | 
| 25 | 
            +
                  @driver = @selenium_server.apply
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def method_missing(method, *args, &block)
         | 
| 29 | 
            +
                  if method =~ /(.*)_app_server/
         | 
| 30 | 
            +
                    @app_server ||= configurator :app_server, $1
         | 
| 31 | 
            +
                  elsif method =~ /(.*)_selenium_server/
         | 
| 32 | 
            +
                    @selenium_server ||= configurator :selenium_server, $1
         | 
| 33 | 
            +
                  else
         | 
| 34 | 
            +
                    raise
         | 
| 35 | 
            +
                  end
         | 
| 24 36 | 
             
                end
         | 
| 25 37 |  | 
| 26 38 | 
             
                private
         | 
| 27 39 |  | 
| 28 | 
            -
                def  | 
| 29 | 
            -
                   | 
| 30 | 
            -
                   | 
| 40 | 
            +
                def configurator(server_type, configurator_type, &block)
         | 
| 41 | 
            +
                  klass = self.class
         | 
| 42 | 
            +
                  server_module = klass.classify(server_type)
         | 
| 43 | 
            +
                  configurator_klass = klass.classify(configurator_type)
         | 
| 44 | 
            +
                  "CapybaraSelenium::#{server_module}::#{configurator_klass}Configurator"
         | 
| 45 | 
            +
                    .constantize.new(configuration(server_module, configurator_klass))
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                def configuration(server_module, klass)
         | 
| 49 | 
            +
                  "CapybaraSelenium::#{server_module}::#{klass}Configuration"
         | 
| 50 | 
            +
                    .constantize.new
         | 
| 31 51 | 
             
                end
         | 
| 32 52 |  | 
| 33 | 
            -
                def  | 
| 34 | 
            -
                   | 
| 35 | 
            -
                  opts = args.first[configurator_type]
         | 
| 36 | 
            -
                  send "#{configurator_type}_configurator", opts
         | 
| 53 | 
            +
                def self.classify(type)
         | 
| 54 | 
            +
                  ActiveSupport::Inflector.classify(type)
         | 
| 37 55 | 
             
                end
         | 
| 38 56 | 
             
              end
         | 
| 39 57 | 
             
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            module CapybaraSelenium
         | 
| 2 | 
            +
              module AppServer
         | 
| 3 | 
            +
                class BaseConfigurator < Server::Configurator
         | 
| 4 | 
            +
                  def apply
         | 
| 5 | 
            +
                    Capybara.server_host = host
         | 
| 6 | 
            +
                    Capybara.server_port = port
         | 
| 7 | 
            +
                    Capybara.app_host = "http://#{host}:#{port}"
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                # Class responsible for applying to Capybara the configuration of a Rack
         | 
| 12 | 
            +
                # Web Application
         | 
| 13 | 
            +
                class RackConfigurator < BaseConfigurator
         | 
| 14 | 
            +
                  def apply
         | 
| 15 | 
            +
                    super
         | 
| 16 | 
            +
                    fail 'Invalid config.ru file path' unless File.exist? config_ru_path
         | 
| 17 | 
            +
                    Capybara.app = Rack::Builder.parse_file(config_ru_path).first
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            module CapybaraSelenium
         | 
| 2 | 
            +
              module SeleniumServer
         | 
| 3 | 
            +
                class BaseConfigurator < Server::Configurator
         | 
| 4 | 
            +
                  private
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def caps(key)
         | 
| 7 | 
            +
                    capabilities[key]
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                class RemoteConfigurator < BaseConfigurator
         | 
| 12 | 
            +
                  def apply
         | 
| 13 | 
            +
                    Capybara.current_driver = driver_name
         | 
| 14 | 
            +
                    Capybara.javascript_driver = driver_name
         | 
| 15 | 
            +
                    Capybara.register_driver(driver_name) do |app|
         | 
| 16 | 
            +
                      Capybara::Selenium::Driver.new(
         | 
| 17 | 
            +
                        app,
         | 
| 18 | 
            +
                        browser: :remote,
         | 
| 19 | 
            +
                        url: server_url,
         | 
| 20 | 
            +
                        desired_capabilities: desired_capabilities)
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def driver_name
         | 
| 25 | 
            +
                    "#{caps(:browser_name)}_#{caps(:version)}_#{caps(:platform)}"
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  # @return [] The desired capabilities for the browser
         | 
| 29 | 
            +
                  def desired_capabilities
         | 
| 30 | 
            +
                    return @desired_capabilities if @desired_capabilities
         | 
| 31 | 
            +
                    @desired_capabilities = Selenium::WebDriver::Remote::Capabilities
         | 
| 32 | 
            +
                                            .send(caps(:browser_name))
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            module CapybaraSelenium
         | 
| 2 | 
            +
              module Server
         | 
| 3 | 
            +
                class Configurator
         | 
| 4 | 
            +
                  def initialize(configuration)
         | 
| 5 | 
            +
                    @configuration = configuration
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def configure(&block)
         | 
| 9 | 
            +
                    @configuration = create_configuration
         | 
| 10 | 
            +
                    block.call @configuration
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def method_missing(method)
         | 
| 14 | 
            +
                    if @configuration.respond_to? method
         | 
| 15 | 
            +
                      return @configuration.send(method)
         | 
| 16 | 
            +
                    else
         | 
| 17 | 
            +
                      raise
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  private
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def create_configuration
         | 
| 24 | 
            +
                    *modules, klass = self.class.to_s.split('::')
         | 
| 25 | 
            +
                    "#{modules.join('::')}::#{type_of(klass)}Configuration"
         | 
| 26 | 
            +
                      .constantize.new
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def type_of(klass)
         | 
| 30 | 
            +
                    /^(?<type>(.*))Configurator/.match(klass)[:type]
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: capybara-selenium
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - David Saenz Tagarro
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-12- | 
| 11 | 
            +
            date: 2014-12-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: capybara
         | 
| @@ -174,16 +174,20 @@ files: | |
| 174 174 | 
             
            - ".gitignore"
         | 
| 175 175 | 
             
            - ".ruby-gemset"
         | 
| 176 176 | 
             
            - ".ruby-version"
         | 
| 177 | 
            +
            - CHANGELOG.md
         | 
| 177 178 | 
             
            - Gemfile
         | 
| 178 179 | 
             
            - LICENSE.txt
         | 
| 179 180 | 
             
            - README.md
         | 
| 180 181 | 
             
            - Rakefile
         | 
| 181 182 | 
             
            - capybara_selenium.gemspec
         | 
| 182 183 | 
             
            - lib/capybara_selenium.rb
         | 
| 183 | 
            -
            - lib/capybara_selenium/app_server.rb
         | 
| 184 | 
            -
            - lib/capybara_selenium/ | 
| 184 | 
            +
            - lib/capybara_selenium/app_server/configuration.rb
         | 
| 185 | 
            +
            - lib/capybara_selenium/app_server/configurator.rb
         | 
| 186 | 
            +
            - lib/capybara_selenium/selenium_server/configuration.rb
         | 
| 187 | 
            +
            - lib/capybara_selenium/selenium_server/configurator.rb
         | 
| 188 | 
            +
            - lib/capybara_selenium/server/configurator.rb
         | 
| 185 189 | 
             
            - lib/capybara_selenium/version.rb
         | 
| 186 | 
            -
            homepage:  | 
| 190 | 
            +
            homepage: https://github.com/dsaenztagarro/capybara-selenium
         | 
| 187 191 | 
             
            licenses:
         | 
| 188 192 | 
             
            - MIT
         | 
| 189 193 | 
             
            metadata: {}
         | 
| @@ -203,7 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 203 207 | 
             
                  version: '0'
         | 
| 204 208 | 
             
            requirements: []
         | 
| 205 209 | 
             
            rubyforge_project: 
         | 
| 206 | 
            -
            rubygems_version: 2. | 
| 210 | 
            +
            rubygems_version: 2.4.3
         | 
| 207 211 | 
             
            signing_key: 
         | 
| 208 212 | 
             
            specification_version: 4
         | 
| 209 213 | 
             
            summary: Dead-simple way to make Capybara and Selenium play together
         | 
| @@ -1,42 +0,0 @@ | |
| 1 | 
            -
            module CapybaraSelenium
         | 
| 2 | 
            -
              # Responsible for generating an application server object that applies the
         | 
| 3 | 
            -
              # configuration needed
         | 
| 4 | 
            -
              module AppServer
         | 
| 5 | 
            -
                # Base Class for applying to Capybara the configuration of an App Server
         | 
| 6 | 
            -
                class BaseConfigurator
         | 
| 7 | 
            -
                  attr_accessor :server_host, :server_port, :app_type
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                  def initialize(opts = {})
         | 
| 10 | 
            -
                    @server_host = opts[:host] || 'localhost'
         | 
| 11 | 
            -
                    @server_port = opts[:port] || 5000
         | 
| 12 | 
            -
                    @app_type = opts[:type] || :rack
         | 
| 13 | 
            -
                    @opts = opts
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  def apply
         | 
| 17 | 
            -
                    Capybara.server_host = @server_host
         | 
| 18 | 
            -
                    Capybara.server_port = @server_port
         | 
| 19 | 
            -
                    Capybara.app_host = "http://#{@server_host}:#{@server_port}"
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                # Class responsible for applying to Capybara the configuration of a Rack
         | 
| 24 | 
            -
                # Web Application
         | 
| 25 | 
            -
                class RackAppConfigurator < BaseConfigurator
         | 
| 26 | 
            -
                  def apply
         | 
| 27 | 
            -
                    super
         | 
| 28 | 
            -
                    path = @opts[:config_ru_path]
         | 
| 29 | 
            -
                    fail 'Invalid config.ru file path' unless File.exist? path
         | 
| 30 | 
            -
                    # require 'pry'
         | 
| 31 | 
            -
                    # binding.pry
         | 
| 32 | 
            -
                    Capybara.app = Rack::Builder.parse_file(path).first
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
                end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                def app_server_configurator(opts)
         | 
| 37 | 
            -
                  ('CapybaraSelenium::AppServer::' \
         | 
| 38 | 
            -
                   "#{ActiveSupport::Inflector.classify(opts[:type])}AppConfigurator")
         | 
| 39 | 
            -
                    .constantize.new(opts)
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
              end
         | 
| 42 | 
            -
            end
         | 
| @@ -1,71 +0,0 @@ | |
| 1 | 
            -
            module CapybaraSelenium
         | 
| 2 | 
            -
              # Module for applying to Capybara configuration for Selenium Server
         | 
| 3 | 
            -
              module SeleniumServer
         | 
| 4 | 
            -
                # Class for applying to Capybara configuration for Selenium Server
         | 
| 5 | 
            -
                class BaseConfigurator
         | 
| 6 | 
            -
                  attr_accessor :browser_name
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  def initialize(opts = {})
         | 
| 9 | 
            -
                    @browser_name = opts[:capabilities][:browser_name] || 'firefox'
         | 
| 10 | 
            -
                    @capabilities = opts[:capabilities] || {}
         | 
| 11 | 
            -
                  end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  private
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                  # @return [] The desired capabilities for the browser
         | 
| 16 | 
            -
                  def desired_capabilities
         | 
| 17 | 
            -
                    return @desired_capabilities if @desired_capabilities
         | 
| 18 | 
            -
                    @desired_capabilities = Selenium::WebDriver::Remote::Capabilities
         | 
| 19 | 
            -
                                            .send(browser_name)
         | 
| 20 | 
            -
                    # @capabilities.keys.each do |key|
         | 
| 21 | 
            -
                    #   @desired_capabilities.send "#{key}=", @capabilities[key]
         | 
| 22 | 
            -
                    # end
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  def default_capabilities
         | 
| 26 | 
            -
                    {
         | 
| 27 | 
            -
                      version: 'ANY',
         | 
| 28 | 
            -
                      platform: 'ANY'
         | 
| 29 | 
            -
                    }
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  def method_missing(method)
         | 
| 33 | 
            -
                    capability = desired_capabilities[method]
         | 
| 34 | 
            -
                    return capability if capability
         | 
| 35 | 
            -
                    fail
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                # Applies Capybara specific configuration for selenium remote server
         | 
| 40 | 
            -
                class SeleniumRemoteConfigurator < BaseConfigurator
         | 
| 41 | 
            -
                  attr_accessor :server_url
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                  def initialize(opts)
         | 
| 44 | 
            -
                    super
         | 
| 45 | 
            -
                    @server_url = opts[:server_url] || 'http://127.0.0.1:4444/wd/hub'
         | 
| 46 | 
            -
                  end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                  def apply
         | 
| 49 | 
            -
                    Capybara.current_driver = driver_name
         | 
| 50 | 
            -
                    Capybara.javascript_driver = driver_name
         | 
| 51 | 
            -
                    Capybara.register_driver(driver_name) do |app|
         | 
| 52 | 
            -
                      Capybara::Selenium::Driver.new(
         | 
| 53 | 
            -
                        app,
         | 
| 54 | 
            -
                        browser: :remote,
         | 
| 55 | 
            -
                        url: server_url,
         | 
| 56 | 
            -
                        desired_capabilities: desired_capabilities)
         | 
| 57 | 
            -
                    end
         | 
| 58 | 
            -
                  end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                  def driver_name
         | 
| 61 | 
            -
                    "#{browser_name}_#{version}_#{platform}"
         | 
| 62 | 
            -
                  end
         | 
| 63 | 
            -
                end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                def selenium_server_configurator(opts)
         | 
| 66 | 
            -
                  ('CapybaraSelenium::SeleniumServer::' \
         | 
| 67 | 
            -
                   "Selenium#{ActiveSupport::Inflector.classify(opts[:type])}Configurator")
         | 
| 68 | 
            -
                    .constantize.new(opts)
         | 
| 69 | 
            -
                end
         | 
| 70 | 
            -
              end
         | 
| 71 | 
            -
            end
         |