frameworks-capybara 0.0.16 → 0.0.17
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.
- data/VERSION +1 -1
- data/frameworks-capybara.gemspec +5 -2
- data/lib/frameworks/capybara.rb +25 -26
- data/lib/frameworks/cucumber.rb +1 -0
- data/lib/monkey-patches/capybara-patches.rb +23 -0
- data/lib/monkey-patches/cucumber-patches.rb +47 -0
- data/lib/monkey-patches/webdriver-patches.rb +31 -0
- metadata +7 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.17
|
data/frameworks-capybara.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{frameworks-capybara}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.17"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["mcrmfc"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-04-01}
|
13
13
|
s.description = %q{gem ti aid setup of Capybara for testing bbc sites}
|
14
14
|
s.email = %q{mcrobbins@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,6 +28,9 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/frameworks-capybara.rb",
|
29
29
|
"lib/frameworks/capybara.rb",
|
30
30
|
"lib/frameworks/cucumber.rb",
|
31
|
+
"lib/monkey-patches/capybara-patches.rb",
|
32
|
+
"lib/monkey-patches/cucumber-patches.rb",
|
33
|
+
"lib/monkey-patches/webdriver-patches.rb",
|
31
34
|
"test/helper.rb",
|
32
35
|
"test/test_frameworks-capybara.rb"
|
33
36
|
]
|
data/lib/frameworks/capybara.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'monkey-patches/webdriver-patches'
|
2
|
+
require 'monkey-patches/capybara-patches'
|
1
3
|
require 'selenium-webdriver'
|
2
4
|
|
3
5
|
class CapybaraSetup
|
@@ -10,18 +12,16 @@ class CapybaraSetup
|
|
10
12
|
|
11
13
|
def initialize
|
12
14
|
|
13
|
-
capybara_opts = {:environment => ENV['ENVIRONMENT'], :proxy => ENV['PROXY_URL'], :remote_browser_proxy_url => ENV['REMOTE_BROWSER_PROXY_URL'], :platform => ENV['PLATFORM'], :browser_name => ENV['REMOTE_BROWSER'], :version => ENV['REMOTE_BROWSER_VERSION'], :url => ENV['REMOTE_URL'], :profile => ENV['FIREFOX_PROFILE'], :browser => ENV['BROWSER'], :javascript_enabled => ENV['CELERITY_JS_ENABLED']}
|
15
|
+
capybara_opts = {:environment => ENV['ENVIRONMENT'], :proxy => ENV['PROXY_URL'], :remote_browser_proxy_url => ENV['REMOTE_BROWSER_PROXY_URL'], :platform => ENV['PLATFORM'], :browser_name => ENV['REMOTE_BROWSER'], :version => ENV['REMOTE_BROWSER_VERSION'], :url => ENV['REMOTE_URL'], :profile => ENV['FIREFOX_PROFILE'], :browser => ENV['BROWSER'], :javascript_enabled => ENV['CELERITY_JS_ENABLED'], :job_name => ENV['JOB_NAME']}
|
14
16
|
|
15
|
-
#validate environment variables set using cucumber.yml or passed via command line
|
16
|
-
validate_env_vars(capybara_opts)
|
17
|
+
validate_env_vars(capybara_opts) #validate environment variables set using cucumber.yml or passed via command line
|
17
18
|
|
18
|
-
|
19
|
-
capybara_opts[:browser] = capybara_opts[:browser].intern
|
19
|
+
|
20
|
+
capybara_opts[:browser] = capybara_opts[:browser].intern #update :browser value to be a symbol, required for Selenium
|
20
21
|
capybara_opts[:browser_name] = capybara_opts[:browser_name].intern if capybara_opts[:browser_name]
|
21
|
-
#Disable rack server
|
22
|
-
Capybara.run_server = false
|
23
22
|
|
24
|
-
#
|
23
|
+
Capybara.run_server = false #Disable rack server
|
24
|
+
|
25
25
|
capybara_opts.delete_if {|k,v| v.nil?}
|
26
26
|
|
27
27
|
case capybara_opts[:browser]
|
@@ -39,10 +39,10 @@ class CapybaraSetup
|
|
39
39
|
opts.has_key?(item) && opts[item]==nil ? abort(ERROR_MSG1) : ''
|
40
40
|
end
|
41
41
|
|
42
|
-
#delete environment, only add to opts for conveniance when validating
|
43
|
-
opts.delete(:environment)
|
42
|
+
opts.delete(:environment) #delete environment, only add to opts for conveniance when validating
|
44
43
|
|
45
|
-
|
44
|
+
|
45
|
+
if opts[:browser]=='remote'
|
46
46
|
[:platform, :remote_url, :browser_name].each do |item|
|
47
47
|
opts.has_key?(item) && opts[item]==nil ? abort(ERROR_MSG2) : ''
|
48
48
|
end
|
@@ -52,34 +52,36 @@ class CapybaraSetup
|
|
52
52
|
def register_selenium_driver(opts)
|
53
53
|
Capybara.register_driver :selenium do |app|
|
54
54
|
|
55
|
-
if
|
56
|
-
#create remote driver client instance
|
55
|
+
if opts[:browser] == :remote
|
57
56
|
client = Selenium::WebDriver::Remote::Http::Default.new
|
58
57
|
|
59
58
|
#set proxy on client connection if required
|
60
|
-
if
|
59
|
+
if opts[:proxy]
|
61
60
|
client.proxy = Selenium::WebDriver::Proxy.new(:http => opts[:proxy])
|
62
61
|
opts.delete :proxy
|
63
62
|
end
|
64
63
|
|
65
64
|
#set proxy for remote browser (only supported for ff at present)
|
66
|
-
if
|
65
|
+
if opts[:remote_browser_proxy_url]
|
67
66
|
opts[:proxy] = Selenium::WebDriver::Proxy.new(:http => opts[:remote_browser_proxy_url])
|
68
67
|
opts.delete :remote_browser_proxy_url
|
69
68
|
end
|
70
|
-
|
69
|
+
|
70
|
+
#TODO: temp workaround - needs refactoring
|
71
71
|
cap_opts = opts.clone
|
72
72
|
cap_opts.delete :profile
|
73
73
|
cap_opts.delete :browser
|
74
|
-
|
74
|
+
|
75
75
|
caps = Selenium::WebDriver::Remote::Capabilities.new(cap_opts)
|
76
|
-
|
77
|
-
opts
|
76
|
+
|
77
|
+
if opts[:job_name] then caps.custom_capabilities({:'job-name' => opts.delete(:job_name)}) end #set custom job name for sauce-labs
|
78
|
+
|
79
|
+
opts.delete_if {|k,v| [:browser_name, :platform, :profile, :version].include? k} #remove options that would have been added to caps
|
80
|
+
|
78
81
|
opts[:desired_capabilities] = caps
|
79
82
|
opts[:http_client] = client
|
80
83
|
else
|
81
|
-
#may want to pass env variables that are not relevant for in browser 'non-remote' tests e.g. proxy, so delete these before setting up driver
|
82
|
-
opts.delete_if {|k,v| [:proxy].include? k}
|
84
|
+
opts.delete_if {|k,v| [:proxy].include? k} #may want to pass env variables that are not relevant for in browser 'non-remote' tests e.g. proxy, so delete these before setting up driver
|
83
85
|
end
|
84
86
|
Capybara::Driver::Selenium.new(app,opts)
|
85
87
|
end
|
@@ -88,12 +90,9 @@ class CapybaraSetup
|
|
88
90
|
|
89
91
|
def register_celerity_driver (opts)
|
90
92
|
Capybara.register_driver :celerity do |app|
|
91
|
-
#delete browser from options as value with be 'headless'
|
92
|
-
opts.delete :browser
|
93
|
-
#set boolean for js_enabled
|
93
|
+
opts.delete :browser #delete browser from options as value with be 'headless'
|
94
94
|
opts[:javascript_enabled] == 'true' ? opts[:javascript_enabled] = true : opts[:javascript_enabled] = false
|
95
|
-
|
96
|
-
if(opts[:proxy])
|
95
|
+
if opts[:proxy]
|
97
96
|
opts[:proxy] = opts[:proxy].gsub(/http:\/\//,'')
|
98
97
|
end
|
99
98
|
Capybara::Driver::Celerity.new(app,opts)
|
data/lib/frameworks/cucumber.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'selenium-webdriver'
|
2
|
+
require 'capybara/cucumber'
|
3
|
+
|
4
|
+
#Monkey Patch's - Use with care!
|
5
|
+
#
|
6
|
+
class Capybara::Driver::Selenium::Node
|
7
|
+
def style(prop)
|
8
|
+
native.style(prop)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Capybara::Node::Element
|
13
|
+
def style(prop)
|
14
|
+
base.style(prop)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Capybara::Driver::Node
|
19
|
+
def style(prop)
|
20
|
+
raise NotImplementedError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'cucumber/formatter/html.rb'
|
2
|
+
module Cucumber
|
3
|
+
module Formatter
|
4
|
+
class Html
|
5
|
+
TEAM_NAME = 'BBC Frameworks'
|
6
|
+
def before_features(features)
|
7
|
+
@project_name = ENV['PROJECT_NAME'] || ''
|
8
|
+
unless @project_name.empty? then @project_name += ' - ' end
|
9
|
+
|
10
|
+
@step_count = get_step_count(features)
|
11
|
+
|
12
|
+
# <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
13
|
+
@builder.declare!(
|
14
|
+
:DOCTYPE,
|
15
|
+
:html,
|
16
|
+
:PUBLIC,
|
17
|
+
'-//W3C//DTD XHTML 1.0 Strict//EN',
|
18
|
+
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'
|
19
|
+
)
|
20
|
+
|
21
|
+
@builder << '<html xmlns ="http://www.w3.org/1999/xhtml">'
|
22
|
+
@builder.head do
|
23
|
+
@builder.meta(:content => 'text/html;charset=utf-8')
|
24
|
+
@builder.title 'Cucumber'
|
25
|
+
inline_css
|
26
|
+
inline_js
|
27
|
+
end
|
28
|
+
@builder << '<body>'
|
29
|
+
@builder << "<!-- Step count #{@step_count}-->"
|
30
|
+
@builder << '<div class="cucumber">'
|
31
|
+
@builder.div(:id => 'cucumber-header') do
|
32
|
+
@builder.div(:id => 'label') do
|
33
|
+
@builder.h1("#{@project_name}#{TEAM_NAME} - #{Time.now.strftime('%d/%m/%y-%H:%M:%S')}")
|
34
|
+
end
|
35
|
+
@builder.div(:id => 'summary') do
|
36
|
+
@builder.p('',:id => 'totals')
|
37
|
+
@builder.p('',:id => 'duration')
|
38
|
+
@builder.div(:id => 'expand-collapse') do
|
39
|
+
@builder.p('Expand All', :id => 'expander')
|
40
|
+
@builder.p('Collapse All', :id => 'collapser')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'selenium-webdriver'
|
2
|
+
|
3
|
+
#Monkey Patch's - Use with care!
|
4
|
+
#
|
5
|
+
module Selenium
|
6
|
+
module WebDriver
|
7
|
+
module Remote
|
8
|
+
class Capabilities
|
9
|
+
|
10
|
+
def custom_capabilities(opts)
|
11
|
+
@custom_capabilities = opts
|
12
|
+
end
|
13
|
+
|
14
|
+
#hopefuly this alias approach will mean we capture changes in the webdriver method
|
15
|
+
alias_method :old_as_json, :as_json
|
16
|
+
def as_json(opts = nil)
|
17
|
+
|
18
|
+
hash = old_as_json
|
19
|
+
if @custom_capabilities
|
20
|
+
@custom_capabilities.each do |key, value|
|
21
|
+
hash[key] = value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
hash
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frameworks-capybara
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 17
|
10
|
+
version: 0.0.17
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- mcrmfc
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-04-01 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -113,6 +113,9 @@ files:
|
|
113
113
|
- lib/frameworks-capybara.rb
|
114
114
|
- lib/frameworks/capybara.rb
|
115
115
|
- lib/frameworks/cucumber.rb
|
116
|
+
- lib/monkey-patches/capybara-patches.rb
|
117
|
+
- lib/monkey-patches/cucumber-patches.rb
|
118
|
+
- lib/monkey-patches/webdriver-patches.rb
|
116
119
|
- test/helper.rb
|
117
120
|
- test/test_frameworks-capybara.rb
|
118
121
|
has_rdoc: true
|