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
|