frameworks-capybara 0.0.43 → 0.1.1
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/.rspec +1 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +58 -0
- data/Rakefile +6 -17
- data/VERSION +1 -1
- data/frameworks-capybara.gemspec +27 -6
- data/lib/frameworks/capybara.rb +63 -57
- data/lib/frameworks/cucumber.rb +19 -20
- data/lib/frameworks-capybara.rb +2 -0
- data/lib/monkey-patches/capybara-patches.rb +1 -0
- data/spec/frameworks_capybara_spec.rb +336 -0
- data/spec/frameworks_cucumber_spec.rb +45 -0
- data/spec/spec_helper.rb +15 -0
- metadata +105 -14
- data/test/helper.rb +0 -18
- data/test/test_frameworks-capybara.rb +0 -7
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--color
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,20 +1,78 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
+
builder (3.0.0)
|
|
5
|
+
capybara (0.4.1.2)
|
|
6
|
+
celerity (>= 0.7.9)
|
|
7
|
+
culerity (>= 0.2.4)
|
|
8
|
+
mime-types (>= 1.16)
|
|
9
|
+
nokogiri (>= 1.3.3)
|
|
10
|
+
rack (>= 1.0.0)
|
|
11
|
+
rack-test (>= 0.5.4)
|
|
12
|
+
selenium-webdriver (>= 0.0.27)
|
|
13
|
+
xpath (~> 0.1.3)
|
|
14
|
+
capybara-mechanize (0.2.7)
|
|
15
|
+
capybara (~> 0.4.0)
|
|
16
|
+
mechanize (~> 1.0.0)
|
|
17
|
+
celerity (0.9.0)
|
|
18
|
+
childprocess (0.2.2)
|
|
19
|
+
ffi (~> 1.0.6)
|
|
20
|
+
cucumber (1.1.0)
|
|
21
|
+
builder (>= 2.1.2)
|
|
22
|
+
diff-lcs (>= 1.1.2)
|
|
23
|
+
gherkin (~> 2.5.0)
|
|
24
|
+
json (>= 1.4.6)
|
|
25
|
+
term-ansicolor (>= 1.0.6)
|
|
26
|
+
culerity (0.2.15)
|
|
27
|
+
diff-lcs (1.1.3)
|
|
28
|
+
ffi (1.0.9)
|
|
29
|
+
gherkin (2.5.1)
|
|
30
|
+
json (>= 1.4.6)
|
|
4
31
|
git (1.2.5)
|
|
5
32
|
jeweler (1.5.2)
|
|
6
33
|
bundler (~> 1.0.0)
|
|
7
34
|
git (>= 1.2.5)
|
|
8
35
|
rake
|
|
36
|
+
json (1.6.1)
|
|
37
|
+
json_pure (1.6.1)
|
|
38
|
+
mechanize (1.0.0)
|
|
39
|
+
nokogiri (>= 1.2.1)
|
|
40
|
+
mime-types (1.16)
|
|
41
|
+
nokogiri (1.5.0)
|
|
42
|
+
rack (1.3.3)
|
|
43
|
+
rack-test (0.6.1)
|
|
44
|
+
rack (>= 1.0)
|
|
9
45
|
rake (0.8.7)
|
|
10
46
|
rcov (0.9.9)
|
|
47
|
+
rspec (2.6.0)
|
|
48
|
+
rspec-core (~> 2.6.0)
|
|
49
|
+
rspec-expectations (~> 2.6.0)
|
|
50
|
+
rspec-mocks (~> 2.6.0)
|
|
51
|
+
rspec-core (2.6.4)
|
|
52
|
+
rspec-expectations (2.6.0)
|
|
53
|
+
diff-lcs (~> 1.1.2)
|
|
54
|
+
rspec-mocks (2.6.0)
|
|
55
|
+
rubyzip (0.9.4)
|
|
56
|
+
selenium-webdriver (2.7.0)
|
|
57
|
+
childprocess (>= 0.2.1)
|
|
58
|
+
ffi (>= 1.0.7)
|
|
59
|
+
json_pure
|
|
60
|
+
rubyzip
|
|
11
61
|
shoulda (2.11.3)
|
|
62
|
+
term-ansicolor (1.0.6)
|
|
63
|
+
xpath (0.1.4)
|
|
64
|
+
nokogiri (~> 1.3)
|
|
12
65
|
|
|
13
66
|
PLATFORMS
|
|
14
67
|
ruby
|
|
15
68
|
|
|
16
69
|
DEPENDENCIES
|
|
17
70
|
bundler (~> 1.0.0)
|
|
71
|
+
capybara (< 1.0.0)
|
|
72
|
+
capybara-mechanize
|
|
73
|
+
cucumber
|
|
18
74
|
jeweler (~> 1.5.2)
|
|
19
75
|
rcov
|
|
76
|
+
rspec
|
|
77
|
+
selenium-webdriver
|
|
20
78
|
shoulda
|
data/Rakefile
CHANGED
|
@@ -24,26 +24,10 @@ Jeweler::Tasks.new do |gem|
|
|
|
24
24
|
gem.add_runtime_dependency 'capybara', '>=0'
|
|
25
25
|
gem.add_runtime_dependency 'capybara-mechanize', '>=0'
|
|
26
26
|
gem.add_runtime_dependency 'headless', '>=0'
|
|
27
|
-
|
|
27
|
+
gem.add_development_dependency 'rspec', '>=2.6.0'
|
|
28
28
|
end
|
|
29
29
|
Jeweler::RubygemsDotOrgTasks.new
|
|
30
30
|
|
|
31
|
-
require 'rake/testtask'
|
|
32
|
-
Rake::TestTask.new(:test) do |test|
|
|
33
|
-
test.libs << 'lib' << 'test'
|
|
34
|
-
test.pattern = 'test/**/test_*.rb'
|
|
35
|
-
test.verbose = true
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
require 'rcov/rcovtask'
|
|
39
|
-
Rcov::RcovTask.new do |test|
|
|
40
|
-
test.libs << 'test'
|
|
41
|
-
test.pattern = 'test/**/test_*.rb'
|
|
42
|
-
test.verbose = true
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
task :default => :test
|
|
46
|
-
|
|
47
31
|
require 'rake/rdoctask'
|
|
48
32
|
Rake::RDocTask.new do |rdoc|
|
|
49
33
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
|
@@ -53,3 +37,8 @@ Rake::RDocTask.new do |rdoc|
|
|
|
53
37
|
rdoc.rdoc_files.include('README*')
|
|
54
38
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
55
39
|
end
|
|
40
|
+
|
|
41
|
+
require 'rspec/core/rake_task'
|
|
42
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
43
|
+
|
|
44
|
+
task :default => :spec
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.1.1
|
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.
|
|
8
|
+
s.version = "0.1.1"
|
|
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-10-10}
|
|
13
13
|
s.description = %q{gem to aid setup of Capybara for testing bbc sites}
|
|
14
14
|
s.email = %q{mcrobbins@gmail.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
|
|
|
18
18
|
]
|
|
19
19
|
s.files = [
|
|
20
20
|
".document",
|
|
21
|
+
".rspec",
|
|
21
22
|
"Gemfile",
|
|
22
23
|
"Gemfile.lock",
|
|
23
24
|
"LICENSE.txt",
|
|
@@ -40,8 +41,9 @@ Gem::Specification.new do |s|
|
|
|
40
41
|
"schemas/xhtml-symbol.ent",
|
|
41
42
|
"schemas/xhtml1-strict.dtd",
|
|
42
43
|
"schemas/xhtml1-transitional.dtd",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
44
|
+
"spec/frameworks_capybara_spec.rb",
|
|
45
|
+
"spec/frameworks_cucumber_spec.rb",
|
|
46
|
+
"spec/spec_helper.rb"
|
|
45
47
|
]
|
|
46
48
|
s.homepage = %q{http://github.com/mcrmfc/frameworks-capybara}
|
|
47
49
|
s.licenses = ["MIT"]
|
|
@@ -49,8 +51,9 @@ Gem::Specification.new do |s|
|
|
|
49
51
|
s.rubygems_version = %q{1.6.0}
|
|
50
52
|
s.summary = %q{gem to aid setup of Capybara for testing bbc sites}
|
|
51
53
|
s.test_files = [
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
+
"spec/frameworks_capybara_spec.rb",
|
|
55
|
+
"spec/frameworks_cucumber_spec.rb",
|
|
56
|
+
"spec/spec_helper.rb"
|
|
54
57
|
]
|
|
55
58
|
|
|
56
59
|
if s.respond_to? :specification_version then
|
|
@@ -61,26 +64,44 @@ Gem::Specification.new do |s|
|
|
|
61
64
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
62
65
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
|
63
66
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
|
67
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
|
68
|
+
s.add_development_dependency(%q<capybara>, ["< 1.0.0"])
|
|
69
|
+
s.add_development_dependency(%q<capybara-mechanize>, [">= 0"])
|
|
70
|
+
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
|
71
|
+
s.add_development_dependency(%q<selenium-webdriver>, [">= 0"])
|
|
64
72
|
s.add_runtime_dependency(%q<capybara>, [">= 0"])
|
|
65
73
|
s.add_runtime_dependency(%q<capybara-mechanize>, [">= 0"])
|
|
66
74
|
s.add_runtime_dependency(%q<headless>, [">= 0"])
|
|
75
|
+
s.add_development_dependency(%q<rspec>, [">= 2.6.0"])
|
|
67
76
|
else
|
|
68
77
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
69
78
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
70
79
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
|
71
80
|
s.add_dependency(%q<rcov>, [">= 0"])
|
|
81
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
|
82
|
+
s.add_dependency(%q<capybara>, ["< 1.0.0"])
|
|
83
|
+
s.add_dependency(%q<capybara-mechanize>, [">= 0"])
|
|
84
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
|
85
|
+
s.add_dependency(%q<selenium-webdriver>, [">= 0"])
|
|
72
86
|
s.add_dependency(%q<capybara>, [">= 0"])
|
|
73
87
|
s.add_dependency(%q<capybara-mechanize>, [">= 0"])
|
|
74
88
|
s.add_dependency(%q<headless>, [">= 0"])
|
|
89
|
+
s.add_dependency(%q<rspec>, [">= 2.6.0"])
|
|
75
90
|
end
|
|
76
91
|
else
|
|
77
92
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
78
93
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
79
94
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
|
80
95
|
s.add_dependency(%q<rcov>, [">= 0"])
|
|
96
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
|
97
|
+
s.add_dependency(%q<capybara>, ["< 1.0.0"])
|
|
98
|
+
s.add_dependency(%q<capybara-mechanize>, [">= 0"])
|
|
99
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
|
100
|
+
s.add_dependency(%q<selenium-webdriver>, [">= 0"])
|
|
81
101
|
s.add_dependency(%q<capybara>, [">= 0"])
|
|
82
102
|
s.add_dependency(%q<capybara-mechanize>, [">= 0"])
|
|
83
103
|
s.add_dependency(%q<headless>, [">= 0"])
|
|
104
|
+
s.add_dependency(%q<rspec>, [">= 2.6.0"])
|
|
84
105
|
end
|
|
85
106
|
end
|
|
86
107
|
|
data/lib/frameworks/capybara.rb
CHANGED
|
@@ -9,25 +9,24 @@ require 'capybara/mechanize/cucumber'
|
|
|
9
9
|
|
|
10
10
|
class CapybaraSetup
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
ERROR_MSG2 = 'Please ensure the following environment variables are set PLATFORM, REMOTE_URL, REMOTE_BROWSER (browser to use on remote machine), PROXY_URL (if required), REMOTE_BROWSER_PROXY (if required) and BROWSER_VERSION (if required)'
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
attr_accessor :driver
|
|
12
|
+
attr_reader :driver
|
|
17
13
|
|
|
18
14
|
def initialize
|
|
15
|
+
capybara_opts = {:environment => ENV['ENVIRONMENT'], :proxy => ENV['PROXY_URL'], :profile => ENV['FIREFOX_PROFILE'], :browser => ENV['BROWSER'], :javascript_enabled => ENV['CELERITY_JS_ENABLED'], :proxy_on => ENV['PROXY_ON'],:url => ENV['REMOTE_URL']}
|
|
16
|
+
selenium_remote_opts = {:platform => ENV['PLATFORM'], :browser_name => ENV['REMOTE_BROWSER'], :version => ENV['REMOTE_BROWSER_VERSION'], :url => ENV['REMOTE_URL']}
|
|
17
|
+
custom_opts = {:job_name => ENV['SAUCE_JOB_NAME'], :max_duration => ENV['SAUCE_MAX_DURATION']}
|
|
19
18
|
|
|
20
|
-
capybara_opts
|
|
21
|
-
|
|
22
|
-
validate_env_vars(capybara_opts) #validate environment variables set using cucumber.yml or passed via command line
|
|
19
|
+
validate_env_vars(capybara_opts.merge(selenium_remote_opts)) #validate environment variables set using cucumber.yml or passed via command line
|
|
23
20
|
|
|
24
21
|
@proxy_host = capybara_opts[:proxy].gsub(/http:\/\//,'').gsub(/:80/,'') unless capybara_opts[:proxy].nil?
|
|
25
22
|
capybara_opts[:browser] = capybara_opts[:browser].intern #update :browser value to be a symbol, required for Selenium
|
|
26
|
-
|
|
23
|
+
selenium_remote_opts[:browser_name] = selenium_remote_opts[:browser_name].intern if selenium_remote_opts[:browser_name]#update :browser value to be a symbol, required for Selenium
|
|
27
24
|
|
|
28
25
|
Capybara.run_server = false #Disable rack server
|
|
29
26
|
|
|
30
|
-
capybara_opts.
|
|
27
|
+
[capybara_opts, selenium_remote_opts, custom_opts].each do |opts| #delete nil options and environment (which is only used for validation)
|
|
28
|
+
opts.delete_if {|k,v| (v.nil? or k == :environment)}
|
|
29
|
+
end
|
|
31
30
|
|
|
32
31
|
case capybara_opts[:browser]
|
|
33
32
|
when :headless then
|
|
@@ -35,82 +34,81 @@ class CapybaraSetup
|
|
|
35
34
|
when :mechanize then
|
|
36
35
|
@driver = register_mechanize_driver(capybara_opts)
|
|
37
36
|
else
|
|
38
|
-
@driver = register_selenium_driver(capybara_opts)
|
|
37
|
+
@driver = register_selenium_driver(capybara_opts, selenium_remote_opts, custom_opts)
|
|
39
38
|
end
|
|
40
39
|
|
|
41
|
-
Capybara.default_driver = @driver
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
Capybara.current_session.driver.agent.set_proxy(@proxy_host, 80) if capybara_opts[:proxy]
|
|
45
|
-
Capybara.current_session.driver.agent.set_ssl_client_certification(ENV['CERT_LOCATION'], ENV['CERT_LOCATION'], ENV['CA_CERT_LOCATION']) if ENV['CERT_LOCATION']
|
|
46
|
-
end
|
|
41
|
+
Capybara.default_driver = @driver
|
|
47
42
|
end
|
|
48
43
|
|
|
49
44
|
private
|
|
50
45
|
|
|
51
46
|
def validate_env_vars(opts)
|
|
52
|
-
[:environment, :browser].each do |item|
|
|
53
|
-
opts.has_key?(item) && opts[item]==nil ? abort(ERROR_MSG1) : ''
|
|
54
|
-
end
|
|
55
47
|
|
|
56
|
-
|
|
48
|
+
msg1 = 'Please ensure following environment variables are set ENVIRONMENT [int|test|stage|live], BROWSER[headless|ie|chrome|firefox] and PROXY_URL (if required)'
|
|
49
|
+
msg2 = 'Please ensure the following environment variables are set PLATFORM, REMOTE_URL, REMOTE_BROWSER (browser to use on remote machine), PROXY_URL (if required), REMOTE_BROWSER_PROXY (if required) and BROWSER_VERSION (if required)'
|
|
57
50
|
|
|
51
|
+
[:environment, :browser].each do |item|
|
|
52
|
+
!opts.has_key?(item) or opts[item]==nil ? raise(msg1) : ''
|
|
53
|
+
end
|
|
58
54
|
|
|
59
55
|
if opts[:browser]=='remote'
|
|
60
|
-
[:
|
|
61
|
-
opts.has_key?(item)
|
|
56
|
+
[:url, :browser_name].each do |item|
|
|
57
|
+
!opts.has_key?(item) or opts[item]==nil ? raise(msg2) : ''
|
|
62
58
|
end
|
|
63
59
|
end
|
|
64
60
|
end
|
|
65
61
|
|
|
66
|
-
def register_selenium_driver(opts)
|
|
62
|
+
def register_selenium_driver(opts,remote_opts,custom_opts)
|
|
67
63
|
Capybara.register_driver :selenium do |app|
|
|
68
64
|
|
|
69
|
-
|
|
70
|
-
profile = Selenium::WebDriver::Firefox::Profile.new
|
|
71
|
-
profile["network.proxy.type"] = 1
|
|
72
|
-
profile["network.proxy.no_proxies_on"] = "*.sandbox.dev.bbc.co.uk"
|
|
73
|
-
profile["network.proxy.http"] = @proxy_host
|
|
74
|
-
profile["network.proxy.ssl"] = @proxy_host
|
|
75
|
-
profile["network.proxy.http_port"] = 80
|
|
76
|
-
profile["network.proxy.ssl_port"] = 80
|
|
77
|
-
profile.native_events = true
|
|
78
|
-
opts[:profile] = profile
|
|
79
|
-
elsif(opts[:profile])
|
|
80
|
-
profile = Selenium::WebDriver::Firefox::Profile.from_name opts[:profile]
|
|
81
|
-
profile.native_events = true
|
|
82
|
-
opts[:profile] = profile
|
|
83
|
-
end
|
|
65
|
+
opts[:profile] = create_profile(opts[:profile]) if(opts[:profile])
|
|
84
66
|
|
|
85
67
|
if opts[:browser] == :remote
|
|
86
68
|
client = Selenium::WebDriver::Remote::Http::Default.new
|
|
69
|
+
client.proxy = set_client_proxy(opts)
|
|
87
70
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
client.proxy = Selenium::WebDriver::Proxy.new(:http => opts[:proxy])
|
|
91
|
-
end
|
|
92
|
-
opts.delete_if {|k,v| [:proxy, :proxy_on].include? k}
|
|
93
|
-
|
|
94
|
-
#TODO: temp workaround - needs refactoring
|
|
95
|
-
cap_opts = opts.clone
|
|
96
|
-
cap_opts[:firefox_profile] = cap_opts.delete :profile
|
|
97
|
-
cap_opts.delete :browser
|
|
98
|
-
caps = Selenium::WebDriver::Remote::Capabilities.new(cap_opts)
|
|
99
|
-
caps.custom_capabilities({:'job-name' => opts.delete(:job_name) || 'frameworks-unamed-job', :'max-duration' => opts.delete(:max_duration) || 1800}) if opts[:url].include? 'saucelabs' #set sauce specific parameters - will this scupper other on sauce remote jobs?
|
|
71
|
+
remote_opts[:firefox_profile] = opts.delete :profile
|
|
72
|
+
caps = Selenium::WebDriver::Remote::Capabilities.new(remote_opts)
|
|
100
73
|
|
|
101
|
-
|
|
74
|
+
add_custom_caps(caps, custom_opts) if remote_opts[:url].include? 'saucelabs' #set sauce specific parameters - will this scupper other on sauce remote jobs?
|
|
102
75
|
|
|
103
76
|
opts[:desired_capabilities] = caps
|
|
104
77
|
opts[:http_client] = client
|
|
105
|
-
else
|
|
106
|
-
opts.delete_if {|k,v| [:proxy, :proxy_on].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
|
|
107
78
|
end
|
|
79
|
+
clean_opts(opts, :proxy, :proxy_on)
|
|
108
80
|
Capybara::Driver::Selenium.new(app,opts)
|
|
109
81
|
end
|
|
110
82
|
:selenium
|
|
111
83
|
end
|
|
112
84
|
|
|
113
|
-
def
|
|
85
|
+
def add_custom_caps(caps, custom_opts)
|
|
86
|
+
sauce_time_limit = custom_opts.delete(:max_duration).to_i #note nil.to_i == 0
|
|
87
|
+
caps.custom_capabilities({:'job-name' => (custom_opts[:job_name] or 'frameworks-unamed-job'), :'max-duration' => ((sauce_time_limit if sauce_time_limit != 0) or 1800)})
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def set_client_proxy(opts)
|
|
91
|
+
Selenium::WebDriver::Proxy.new(:http => opts[:proxy]) if opts[:proxy] && opts[:proxy_on] != 'false' #set proxy on client connection if required, note you may use ENV['PROXY_URL'] for setting in browser (ff profile) but not for client conection, hence allow for PROXY_ON=false
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def create_profile(profile_name)
|
|
95
|
+
if(profile_name == 'BBC_INTERNAL')
|
|
96
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
|
97
|
+
profile["network.proxy.type"] = 1
|
|
98
|
+
profile["network.proxy.no_proxies_on"] = "*.sandbox.dev.bbc.co.uk"
|
|
99
|
+
profile["network.proxy.http"] = @proxy_host
|
|
100
|
+
profile["network.proxy.ssl"] = @proxy_host
|
|
101
|
+
profile["network.proxy.http_port"] = 80
|
|
102
|
+
profile["network.proxy.ssl_port"] = 80
|
|
103
|
+
profile.native_events = true
|
|
104
|
+
else
|
|
105
|
+
profile = Selenium::WebDriver::Firefox::Profile.from_name profile_name
|
|
106
|
+
profile.native_events = true
|
|
107
|
+
end
|
|
108
|
+
profile
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def register_celerity_driver(opts)
|
|
114
112
|
Capybara.register_driver :celerity do |app|
|
|
115
113
|
opts.delete :browser #delete browser from options as value with be 'headless'
|
|
116
114
|
opts[:javascript_enabled] == 'true' ? opts[:javascript_enabled] = true : opts[:javascript_enabled] = false
|
|
@@ -120,13 +118,21 @@ class CapybaraSetup
|
|
|
120
118
|
:celerity
|
|
121
119
|
end
|
|
122
120
|
|
|
123
|
-
def register_mechanize_driver
|
|
121
|
+
def register_mechanize_driver(opts)
|
|
124
122
|
Capybara.register_driver :mechanize do |app|
|
|
125
|
-
opts.delete :browser #delete browser from options as value with be 'headless'
|
|
126
123
|
Capybara.app_host = "http://www.int.bbc.co.uk"
|
|
127
|
-
Capybara::Driver::Mechanize.new(app)
|
|
124
|
+
driver = Capybara::Driver::Mechanize.new(app)
|
|
125
|
+
driver.agent.set_proxy(@proxy_host, 80) unless opts[:proxy].nil?
|
|
126
|
+
driver.agent.set_ssl_client_certification(ENV['CERT_LOCATION'], ENV['CERT_LOCATION'], ENV['CA_CERT_LOCATION']) if ENV['CERT_LOCATION']
|
|
127
|
+
driver
|
|
128
128
|
end
|
|
129
129
|
:mechanize
|
|
130
130
|
end
|
|
131
131
|
|
|
132
|
+
def clean_opts(opts, *args)
|
|
133
|
+
args.each do |arg|
|
|
134
|
+
opts.delete arg
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
132
138
|
end
|
data/lib/frameworks/cucumber.rb
CHANGED
|
@@ -13,39 +13,38 @@ end
|
|
|
13
13
|
|
|
14
14
|
module Frameworks
|
|
15
15
|
module EnvHelper
|
|
16
|
-
|
|
17
|
-
ENV['SCHEME']=='https' ? scheme = 'https' : scheme = 'http'
|
|
18
|
-
|
|
19
|
-
WWW_PREFIX = "#{scheme}://www."
|
|
20
|
-
STATIC_PREFIX = "#{scheme}://static."
|
|
21
|
-
OPEN_PREFIX = "#{scheme}://open."
|
|
22
|
-
BBC_DOMAIN = '.bbc.co.uk'
|
|
23
|
-
STATIC_BBC_DOMAIN = '.bbc.co.uk'
|
|
24
|
-
SANDBOX = "#{scheme}://pal.sandbox.dev"
|
|
25
|
-
STATIC_SANDBOX = "#{scheme}://static.sandbox.dev"
|
|
26
|
-
|
|
27
16
|
#Generate base urls to use in Cucumber step defs
|
|
28
17
|
def generate_base_urls
|
|
18
|
+
set_scheme
|
|
29
19
|
if(ENV['ENVIRONMENT']=='sandbox')
|
|
30
|
-
@base_url =
|
|
31
|
-
@static_base_url =
|
|
20
|
+
@base_url = @sandbox + @bbc_domain
|
|
21
|
+
@static_base_url = @static_sandbox + @bbc_domain
|
|
32
22
|
elsif (ENV['ENVIRONMENT']=='live' && ENV['WWW_LIVE']=='false')
|
|
33
|
-
@base_url =
|
|
34
|
-
@static_base_url =
|
|
35
|
-
@open_base_url =
|
|
23
|
+
@base_url = @www_prefix.chop + @bbc_domain
|
|
24
|
+
@static_base_url = @static_prefix.chop + @bbc_domain
|
|
25
|
+
@open_base_url = @open_prefix.chop + @bbc_domain
|
|
36
26
|
elsif (ENV['ENVIRONMENT'].split('.')[0].include? 'pal') #address specific box
|
|
37
27
|
@base_url = "#{scheme}://#{ENV['ENVIRONMENT']}"
|
|
38
28
|
else
|
|
39
|
-
@base_url =
|
|
40
|
-
@static_base_url =
|
|
41
|
-
@open_base_url =
|
|
29
|
+
@base_url = @www_prefix + ENV['ENVIRONMENT'] + @bbc_domain
|
|
30
|
+
@static_base_url = @static_prefix + ENV['ENVIRONMENT'] + @bbc_domain
|
|
31
|
+
@open_base_url = @open_prefix + ENV['ENVIRONMENT'] + @bbc_domain
|
|
42
32
|
end
|
|
43
33
|
end
|
|
44
34
|
|
|
35
|
+
def set_scheme
|
|
36
|
+
ENV['SCHEME']=='https' ? scheme = 'https' : scheme = 'http'
|
|
37
|
+
@www_prefix = "#{scheme}://www."
|
|
38
|
+
@static_prefix = "#{scheme}://static."
|
|
39
|
+
@open_prefix = "#{scheme}://open."
|
|
40
|
+
@bbc_domain = '.bbc.co.uk'
|
|
41
|
+
@sandbox = "#{scheme}://pal.sandbox.dev"
|
|
42
|
+
@static_sandbox = "#{scheme}://static.sandbox.dev"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
45
|
end #EnvHelper
|
|
46
46
|
end #Frameworks
|
|
47
47
|
|
|
48
|
-
CapybaraSetup.new unless ENV['CAPYBARA_DISABLED']
|
|
49
48
|
|
|
50
49
|
#Add module into world to ensure visibility of instance variables within Cucumber
|
|
51
50
|
World(Frameworks::EnvHelper)
|
data/lib/frameworks-capybara.rb
CHANGED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
##
|
|
3
|
+
#Monkey Patch
|
|
4
|
+
#This is required because Capybara has module methods (singletons) which create
|
|
5
|
+
#a session and then re-use this whenever Capybara is referenced in the current process.
|
|
6
|
+
#Therefore even creating new instances of CapybaraSetup will use the same session and driver instance
|
|
7
|
+
#...not picking up changes in the different tests below.
|
|
8
|
+
#Hence the only option is to clean out the session before each test.
|
|
9
|
+
module Capybara
|
|
10
|
+
class << self
|
|
11
|
+
def delete_session
|
|
12
|
+
@session_pool = {}
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
shared_examples_for "Selenium Driver Options Array" do
|
|
18
|
+
it "should contain no nil values for unset options" do
|
|
19
|
+
#TODO: Test for nil elements in options - there shouldn't be any that we insert
|
|
20
|
+
#i.e. anything in our ENV options should not end up being nil in Selenium
|
|
21
|
+
|
|
22
|
+
Capybara.current_session.driver.options[:environment].should == nil
|
|
23
|
+
Capybara.current_session.driver.options[:proxy].should == nil
|
|
24
|
+
Capybara.current_session.driver.options[:proxy_on].should == nil
|
|
25
|
+
Capybara.current_session.driver.options[:platform].should == nil
|
|
26
|
+
Capybara.current_session.driver.options[:browser_name].should == nil
|
|
27
|
+
Capybara.current_session.driver.options[:version].should == nil
|
|
28
|
+
Capybara.current_session.driver.options[:job_name].should == nil
|
|
29
|
+
Capybara.current_session.driver.options[:max_duration].should == nil
|
|
30
|
+
Capybara.current_session.driver.options[:profile].should_not be_a_kind_of String
|
|
31
|
+
Capybara.current_session.driver.options[:browser].should_not be_a_kind_of String
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe CapybaraSetup do
|
|
36
|
+
|
|
37
|
+
before(:each) do
|
|
38
|
+
home = ENV['HOME']
|
|
39
|
+
ENV.clear
|
|
40
|
+
ENV['HOME'] = home #Want to clear some env variables but HOME is used by Webdriver, therefore need to preserve it
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "should validate options" do
|
|
44
|
+
before(:each) do
|
|
45
|
+
Capybara.delete_session
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should require as a minimum ENVIRONMENT and BROWSER" do
|
|
49
|
+
lambda {CapybaraSetup.new}.should raise_error(RuntimeError,'Please ensure following environment variables are set ENVIRONMENT [int|test|stage|live], BROWSER[headless|ie|chrome|firefox] and PROXY_URL (if required)')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should require as a minimum ENVIRONMENT, BROWSER and REMOTE_BROWSER if running a Remote Selenium Instance" do
|
|
53
|
+
ENV['BROWSER'] = 'remote'
|
|
54
|
+
ENV['ENVIRONMENT'] = 'test'
|
|
55
|
+
lambda {CapybaraSetup.new}.should raise_error(RuntimeError,'Please ensure the following environment variables are set PLATFORM, REMOTE_URL, REMOTE_BROWSER (browser to use on remote machine), PROXY_URL (if required), REMOTE_BROWSER_PROXY (if required) and BROWSER_VERSION (if required)')
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should not error if ENVIRONMENT and BROWSER are provided" do
|
|
59
|
+
ENV['BROWSER'] = 'headless'
|
|
60
|
+
ENV['ENVIRONMENT'] = 'test'
|
|
61
|
+
lambda {CapybaraSetup.new}.should_not raise_error
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should not error if ENVIRONMENT, BROWSER and REMOTE_BROSWER are provided if running a Remote Selenium Instance" do
|
|
65
|
+
ENV['BROWSER'] = 'remote'
|
|
66
|
+
ENV['ENVIRONMENT'] = 'test'
|
|
67
|
+
ENV['REMOTE_BROWSER'] = 'test'
|
|
68
|
+
ENV['REMOTE_URL'] = 'test'
|
|
69
|
+
lambda {CapybaraSetup.new}.should_not raise_error
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe "should allow Capybara drivers to be created" do
|
|
74
|
+
before do
|
|
75
|
+
ENV['ENVIRONMENT'] = 'test'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "should allow Selenium driver to be created" do
|
|
79
|
+
context "with minimal Selenium driver" do
|
|
80
|
+
before do
|
|
81
|
+
ENV['BROWSER'] = 'firefox'
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should be initialized correctly" do
|
|
85
|
+
Capybara.delete_session
|
|
86
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
87
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
88
|
+
Capybara.current_session.driver.options[:browser].should == :firefox
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
context "with Selenium driver and default firefox profile (from profiles.ini)" do
|
|
95
|
+
before do
|
|
96
|
+
ENV['BROWSER'] = 'firefox'
|
|
97
|
+
ENV['FIREFOX_PROFILE'] = 'default'
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should be initialized correctly" do
|
|
101
|
+
Capybara.delete_session
|
|
102
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
103
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
104
|
+
Capybara.current_session.driver.options[:browser].should == :firefox
|
|
105
|
+
Capybara.current_session.driver.options[:profile].should be_a_kind_of Selenium::WebDriver::Firefox::Profile
|
|
106
|
+
Capybara.current_session.driver.options[:profile].instance_variable_get(:@model).should include "default"
|
|
107
|
+
end
|
|
108
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context "with Selenium driver and programtically cretated profile" do
|
|
113
|
+
before do
|
|
114
|
+
ENV['BROWSER'] = 'firefox'
|
|
115
|
+
ENV['FIREFOX_PROFILE'] = 'BBC_INTERNAL'
|
|
116
|
+
ENV['PROXY_URL'] = 'http://example.cache.co.uk:80'
|
|
117
|
+
ENV['PROXY_ON'] = 'false'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should be initialized correctly" do
|
|
121
|
+
Capybara.delete_session
|
|
122
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
123
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
124
|
+
Capybara.current_session.driver.options[:browser].should == :firefox
|
|
125
|
+
Capybara.current_session.driver.options[:profile].should be_a_kind_of Selenium::WebDriver::Firefox::Profile
|
|
126
|
+
Capybara.current_session.driver.options[:profile].instance_variable_get(:@additional_prefs)['network.proxy.type'].should == '1'
|
|
127
|
+
Capybara.current_session.driver.options[:profile].instance_variable_get(:@additional_prefs)['network.proxy.no_proxies_on'].should == '"*.sandbox.dev.bbc.co.uk"'
|
|
128
|
+
Capybara.current_session.driver.options[:profile].instance_variable_get(:@additional_prefs)['network.proxy.http'].should == '"example.cache.co.uk"'
|
|
129
|
+
Capybara.current_session.driver.options[:profile].instance_variable_get(:@additional_prefs)['network.proxy.http_port'].should == '80'
|
|
130
|
+
Capybara.current_session.driver.options[:profile].instance_variable_get(:@additional_prefs)['network.proxy.ssl'].should == '"example.cache.co.uk"'
|
|
131
|
+
Capybara.current_session.driver.options[:profile].instance_variable_get(:@additional_prefs)['network.proxy.ssl_port'].should == '80'
|
|
132
|
+
end
|
|
133
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
context "with Remote Selenium driver" do
|
|
138
|
+
before do
|
|
139
|
+
ENV['BROWSER'] = 'remote'
|
|
140
|
+
ENV['REMOTE_BROWSER'] = 'firefox'
|
|
141
|
+
ENV['FIREFOX_PROFILE'] = 'default'
|
|
142
|
+
ENV['REMOTE_URL'] = 'http://example.com'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "should be initialized correctly" do
|
|
146
|
+
Capybara.delete_session
|
|
147
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
148
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
149
|
+
Capybara.current_session.driver.options[:browser].should == :remote
|
|
150
|
+
Capybara.current_session.driver.options[:url].should == 'http://example.com'
|
|
151
|
+
Capybara.current_session.driver.options[:http_client].should be_a_kind_of Selenium::WebDriver::Remote::Http::Default
|
|
152
|
+
Capybara.current_session.driver.options[:http_client].instance_variable_get(:@proxy).should == nil
|
|
153
|
+
Capybara.current_session.driver.options[:desired_capabilities].should be_a_kind_of Selenium::WebDriver::Remote::Capabilities
|
|
154
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:browser_name].should == :firefox
|
|
155
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].should be_a_kind_of Selenium::WebDriver::Firefox::Profile
|
|
156
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@model).should include 'default'
|
|
157
|
+
end
|
|
158
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context "with Remote Selenium driver and client proxy" do
|
|
162
|
+
before do
|
|
163
|
+
ENV['BROWSER'] = 'remote'
|
|
164
|
+
ENV['REMOTE_BROWSER'] = 'firefox'
|
|
165
|
+
ENV['FIREFOX_PROFILE'] = 'default'
|
|
166
|
+
ENV['REMOTE_URL'] = 'http://example.com'
|
|
167
|
+
ENV['PROXY_URL'] = 'http://example.cache.co.uk:80'
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "should be initialized correctly" do
|
|
171
|
+
Capybara.delete_session
|
|
172
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
173
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
174
|
+
Capybara.current_session.driver.options[:browser].should == :remote
|
|
175
|
+
Capybara.current_session.driver.options[:url].should == 'http://example.com'
|
|
176
|
+
Capybara.current_session.driver.options[:http_client].should be_a_kind_of Selenium::WebDriver::Remote::Http::Default
|
|
177
|
+
Capybara.current_session.driver.options[:http_client].instance_variable_get(:@proxy).should be_a_kind_of Selenium::WebDriver::Proxy
|
|
178
|
+
Capybara.current_session.driver.options[:http_client].instance_variable_get(:@proxy).instance_variable_get(:@http).should == 'http://example.cache.co.uk:80'
|
|
179
|
+
end
|
|
180
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
context "with Remote Selenium driver, programtically cretated Firefox profile using proxy but client not using proxy" do
|
|
184
|
+
before do
|
|
185
|
+
ENV['BROWSER'] = 'remote'
|
|
186
|
+
ENV['REMOTE_BROWSER'] = 'firefox'
|
|
187
|
+
ENV['FIREFOX_PROFILE'] = 'BBC_INTERNAL'
|
|
188
|
+
ENV['REMOTE_URL'] = 'http://example.cache.co.uk:80'
|
|
189
|
+
ENV['PROXY_URL'] = 'http://example.cache.co.uk:80'
|
|
190
|
+
ENV['PROXY_ON'] = 'false'
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "should be initialized correctly" do
|
|
194
|
+
Capybara.delete_session
|
|
195
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
196
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
197
|
+
Capybara.current_session.driver.options[:browser].should == :remote
|
|
198
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].should be_a_kind_of Selenium::WebDriver::Firefox::Profile
|
|
199
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@additional_prefs)['network.proxy.type'].should == '1'
|
|
200
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@additional_prefs)['network.proxy.no_proxies_on'].should == '"*.sandbox.dev.bbc.co.uk"'
|
|
201
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@additional_prefs)['network.proxy.http'].should == '"example.cache.co.uk"'
|
|
202
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@additional_prefs)['network.proxy.http_port'].should == '80'
|
|
203
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@additional_prefs)['network.proxy.ssl'].should == '"example.cache.co.uk"'
|
|
204
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@additional_prefs)['network.proxy.ssl_port'].should == '80'
|
|
205
|
+
Capybara.current_session.driver.options[:http_client].should be_a_kind_of Selenium::WebDriver::Remote::Http::Default
|
|
206
|
+
Capybara.current_session.driver.options[:http_client].instance_variable_get(:@proxy).should == nil
|
|
207
|
+
end
|
|
208
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
context "with Remote Selenium driver (specifying platform and browser version) and default Custom Capabilites (e.g. for Sauce Labs)" do
|
|
212
|
+
before do
|
|
213
|
+
ENV['BROWSER'] = 'remote'
|
|
214
|
+
ENV['REMOTE_BROWSER'] = 'firefox'
|
|
215
|
+
ENV['PLATFORM'] = 'windows'
|
|
216
|
+
ENV['REMOTE_BROWSER_VERSION'] = '4'
|
|
217
|
+
ENV['FIREFOX_PROFILE'] = 'default'
|
|
218
|
+
ENV['REMOTE_URL'] = 'http://saucelabs.com'
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
it "should be initialized correctly" do
|
|
222
|
+
Capybara.delete_session
|
|
223
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
224
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
225
|
+
Capybara.current_session.driver.options[:browser].should == :remote
|
|
226
|
+
Capybara.current_session.driver.options[:url].should == 'http://saucelabs.com'
|
|
227
|
+
Capybara.current_session.driver.options[:http_client].should be_a_kind_of Selenium::WebDriver::Remote::Http::Default
|
|
228
|
+
Capybara.current_session.driver.options[:http_client].instance_variable_get(:@proxy).should == nil
|
|
229
|
+
Capybara.current_session.driver.options[:desired_capabilities].should be_a_kind_of Selenium::WebDriver::Remote::Capabilities
|
|
230
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@custom_capabilities)[:'job-name'].should == 'frameworks-unamed-job'
|
|
231
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@custom_capabilities)[:'max-duration'].should == 1800
|
|
232
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:browser_name].should == :firefox
|
|
233
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:version].should == '4'
|
|
234
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:platform].should == 'windows'
|
|
235
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].should be_a_kind_of Selenium::WebDriver::Firefox::Profile
|
|
236
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@model).should include 'default'
|
|
237
|
+
end
|
|
238
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
context "with Remote Selenium driver and specified Custom Capabilites (e.g. for Sauce Labs)" do
|
|
242
|
+
before do
|
|
243
|
+
ENV['BROWSER'] = 'remote'
|
|
244
|
+
ENV['REMOTE_BROWSER'] = 'firefox'
|
|
245
|
+
ENV['SAUCE_JOB_NAME'] = 'myjobname'
|
|
246
|
+
ENV['SAUCE_MAX_DURATION'] = '2000'
|
|
247
|
+
ENV['REMOTE_BROWSER_VERSION'] = '4'
|
|
248
|
+
ENV['FIREFOX_PROFILE'] = 'default'
|
|
249
|
+
ENV['REMOTE_URL'] = 'http://saucelabs.com'
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it "should be initialized correctly" do
|
|
253
|
+
Capybara.delete_session
|
|
254
|
+
CapybaraSetup.new.driver.should == :selenium
|
|
255
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Selenium
|
|
256
|
+
Capybara.current_session.driver.options[:browser].should == :remote
|
|
257
|
+
Capybara.current_session.driver.options[:url].should == 'http://saucelabs.com'
|
|
258
|
+
Capybara.current_session.driver.options[:http_client].should be_a_kind_of Selenium::WebDriver::Remote::Http::Default
|
|
259
|
+
Capybara.current_session.driver.options[:http_client].instance_variable_get(:@proxy).should == nil
|
|
260
|
+
Capybara.current_session.driver.options[:desired_capabilities].should be_a_kind_of Selenium::WebDriver::Remote::Capabilities
|
|
261
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@custom_capabilities)[:'job-name'].should == 'myjobname'
|
|
262
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@custom_capabilities)[:'max-duration'].should == 2000
|
|
263
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:browser_name].should == :firefox
|
|
264
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].should be_a_kind_of Selenium::WebDriver::Firefox::Profile
|
|
265
|
+
Capybara.current_session.driver.options[:desired_capabilities].instance_variable_get(:@capabilities)[:firefox_profile].instance_variable_get(:@model).should include 'default'
|
|
266
|
+
end
|
|
267
|
+
it_behaves_like "Selenium Driver Options Array"
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
describe "should allow Mechanize driver to be created" do
|
|
272
|
+
context "with minimal Mechanize driver" do
|
|
273
|
+
before do
|
|
274
|
+
ENV['BROWSER'] = 'mechanize'
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
it "should be initialized correctly" do
|
|
278
|
+
Capybara.delete_session
|
|
279
|
+
CapybaraSetup.new.driver.should == :mechanize
|
|
280
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Mechanize
|
|
281
|
+
end
|
|
282
|
+
context "with maximal Mechanize driver" do
|
|
283
|
+
before do
|
|
284
|
+
ENV['BROWSER'] = 'mechanize'
|
|
285
|
+
ENV['ENVIRONMENT'] = 'test'
|
|
286
|
+
ENV['PROXY_URL'] = 'http://example.cache.co.uk:80'
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
it "should be initialized correctly" do
|
|
290
|
+
Capybara.delete_session
|
|
291
|
+
CapybaraSetup.new.driver.should == :mechanize
|
|
292
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Mechanize
|
|
293
|
+
Capybara.current_session.driver.agent.proxy_addr.should == 'example.cache.co.uk'
|
|
294
|
+
Capybara.current_session.driver.agent.proxy_port.should == 80
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
describe "should allow Celerity driver to be created" do
|
|
300
|
+
|
|
301
|
+
context "with minimal Celerity driver" do
|
|
302
|
+
before do
|
|
303
|
+
ENV['BROWSER'] = 'headless'
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
it "should be initialized correctly" do
|
|
307
|
+
Capybara.delete_session
|
|
308
|
+
CapybaraSetup.new.driver.should == :celerity
|
|
309
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Celerity
|
|
310
|
+
Capybara.current_session.driver.options[:javascript_enabled].should == false
|
|
311
|
+
Capybara.current_session.driver.options[:environment].should == nil
|
|
312
|
+
Capybara.current_session.driver.options[:browser].should == nil
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
context "with maximal Celerity driver" do
|
|
317
|
+
before do
|
|
318
|
+
ENV['BROWSER'] = 'headless'
|
|
319
|
+
ENV['CELERITY_JS_ENABLED'] = 'true'
|
|
320
|
+
ENV['PROXY_URL'] = 'http://example.cache.co.uk:80'
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
it "should be initialized correctly" do
|
|
324
|
+
Capybara.delete_session
|
|
325
|
+
CapybaraSetup.new.driver.should == :celerity
|
|
326
|
+
Capybara.current_session.driver.should be_a_kind_of Capybara::Driver::Celerity
|
|
327
|
+
Capybara.current_session.driver.options[:javascript_enabled].should == true
|
|
328
|
+
Capybara.current_session.driver.options[:proxy].should == 'example.cache.co.uk:80'
|
|
329
|
+
Capybara.current_session.driver.options[:environment].should == nil
|
|
330
|
+
Capybara.current_session.driver.options[:browser].should == nil
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Frameworks::EnvHelper do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
ENV['BROWSER'] = 'test' #mandatory data to prevent validation exception
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "set base url correctly" do
|
|
10
|
+
include Frameworks::EnvHelper
|
|
11
|
+
|
|
12
|
+
it "should be able to set a local url" do
|
|
13
|
+
ENV['ENVIRONMENT'] = 'sandbox'
|
|
14
|
+
generate_base_urls
|
|
15
|
+
@base_url.should == 'http://pal.sandbox.dev.bbc.co.uk'
|
|
16
|
+
@static_base_url.should == 'http://static.sandbox.dev.bbc.co.uk'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should be able to set a base url" do
|
|
20
|
+
ENV['ENVIRONMENT'] = 'foo'
|
|
21
|
+
generate_base_urls
|
|
22
|
+
@base_url.should == 'http://www.foo.bbc.co.uk'
|
|
23
|
+
@static_base_url.should == 'http://static.foo.bbc.co.uk'
|
|
24
|
+
@open_base_url.should == 'http://open.foo.bbc.co.uk'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should be able to set a 'classic' live url" do
|
|
28
|
+
ENV['ENVIRONMENT'] = 'live'
|
|
29
|
+
ENV['WWW_LIVE'] = 'false'
|
|
30
|
+
generate_base_urls
|
|
31
|
+
@base_url.should == 'http://www.bbc.co.uk'
|
|
32
|
+
@static_base_url.should == 'http://static.bbc.co.uk'
|
|
33
|
+
@open_base_url.should == 'http://open.bbc.co.uk'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should be able to set scheme to ssl" do
|
|
37
|
+
ENV['SCHEME'] = 'https'
|
|
38
|
+
ENV['ENVIRONMENT'] = 'foo'
|
|
39
|
+
generate_base_urls
|
|
40
|
+
@base_url.should == 'https://www.foo.bbc.co.uk'
|
|
41
|
+
@static_base_url.should == 'https://static.foo.bbc.co.uk'
|
|
42
|
+
@open_base_url.should == 'https://open.foo.bbc.co.uk'
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
require 'gherkin'
|
|
4
|
+
require 'cucumber/language_support/language_methods'
|
|
5
|
+
require 'cucumber/rb_support/rb_language'
|
|
6
|
+
require 'cucumber/runtime'
|
|
7
|
+
require 'rspec'
|
|
8
|
+
require 'capybara'
|
|
9
|
+
|
|
10
|
+
dir = File.dirname(__FILE__)
|
|
11
|
+
$LOAD_PATH.unshift "#{dir}/../lib"
|
|
12
|
+
Cucumber::RbSupport::RbLanguage.new(Cucumber::Runtime.new) #Need to load Cucumber runtime, so World is available
|
|
13
|
+
|
|
14
|
+
require 'frameworks/capybara'
|
|
15
|
+
require 'frameworks/cucumber'
|
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: 25
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
version: 0.
|
|
8
|
+
- 1
|
|
9
|
+
- 1
|
|
10
|
+
version: 0.1.1
|
|
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-10-10 00:00:00 +01:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
@@ -79,7 +79,7 @@ dependencies:
|
|
|
79
79
|
name: rcov
|
|
80
80
|
prerelease: false
|
|
81
81
|
- !ruby/object:Gem::Dependency
|
|
82
|
-
type: :
|
|
82
|
+
type: :development
|
|
83
83
|
requirement: &id005 !ruby/object:Gem::Requirement
|
|
84
84
|
none: false
|
|
85
85
|
requirements:
|
|
@@ -90,11 +90,83 @@ dependencies:
|
|
|
90
90
|
- 0
|
|
91
91
|
version: "0"
|
|
92
92
|
version_requirements: *id005
|
|
93
|
+
name: rspec
|
|
94
|
+
prerelease: false
|
|
95
|
+
- !ruby/object:Gem::Dependency
|
|
96
|
+
type: :development
|
|
97
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
98
|
+
none: false
|
|
99
|
+
requirements:
|
|
100
|
+
- - <
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
hash: 23
|
|
103
|
+
segments:
|
|
104
|
+
- 1
|
|
105
|
+
- 0
|
|
106
|
+
- 0
|
|
107
|
+
version: 1.0.0
|
|
108
|
+
version_requirements: *id006
|
|
109
|
+
name: capybara
|
|
110
|
+
prerelease: false
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
type: :development
|
|
113
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
114
|
+
none: false
|
|
115
|
+
requirements:
|
|
116
|
+
- - ">="
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
hash: 3
|
|
119
|
+
segments:
|
|
120
|
+
- 0
|
|
121
|
+
version: "0"
|
|
122
|
+
version_requirements: *id007
|
|
123
|
+
name: capybara-mechanize
|
|
124
|
+
prerelease: false
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
type: :development
|
|
127
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
128
|
+
none: false
|
|
129
|
+
requirements:
|
|
130
|
+
- - ">="
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
hash: 3
|
|
133
|
+
segments:
|
|
134
|
+
- 0
|
|
135
|
+
version: "0"
|
|
136
|
+
version_requirements: *id008
|
|
137
|
+
name: cucumber
|
|
138
|
+
prerelease: false
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
type: :development
|
|
141
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
|
142
|
+
none: false
|
|
143
|
+
requirements:
|
|
144
|
+
- - ">="
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
hash: 3
|
|
147
|
+
segments:
|
|
148
|
+
- 0
|
|
149
|
+
version: "0"
|
|
150
|
+
version_requirements: *id009
|
|
151
|
+
name: selenium-webdriver
|
|
152
|
+
prerelease: false
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
type: :runtime
|
|
155
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
|
156
|
+
none: false
|
|
157
|
+
requirements:
|
|
158
|
+
- - ">="
|
|
159
|
+
- !ruby/object:Gem::Version
|
|
160
|
+
hash: 3
|
|
161
|
+
segments:
|
|
162
|
+
- 0
|
|
163
|
+
version: "0"
|
|
164
|
+
version_requirements: *id010
|
|
93
165
|
name: capybara
|
|
94
166
|
prerelease: false
|
|
95
167
|
- !ruby/object:Gem::Dependency
|
|
96
168
|
type: :runtime
|
|
97
|
-
requirement: &
|
|
169
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
|
98
170
|
none: false
|
|
99
171
|
requirements:
|
|
100
172
|
- - ">="
|
|
@@ -103,12 +175,12 @@ dependencies:
|
|
|
103
175
|
segments:
|
|
104
176
|
- 0
|
|
105
177
|
version: "0"
|
|
106
|
-
version_requirements: *
|
|
178
|
+
version_requirements: *id011
|
|
107
179
|
name: capybara-mechanize
|
|
108
180
|
prerelease: false
|
|
109
181
|
- !ruby/object:Gem::Dependency
|
|
110
182
|
type: :runtime
|
|
111
|
-
requirement: &
|
|
183
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
|
112
184
|
none: false
|
|
113
185
|
requirements:
|
|
114
186
|
- - ">="
|
|
@@ -117,9 +189,25 @@ dependencies:
|
|
|
117
189
|
segments:
|
|
118
190
|
- 0
|
|
119
191
|
version: "0"
|
|
120
|
-
version_requirements: *
|
|
192
|
+
version_requirements: *id012
|
|
121
193
|
name: headless
|
|
122
194
|
prerelease: false
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
type: :development
|
|
197
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
|
198
|
+
none: false
|
|
199
|
+
requirements:
|
|
200
|
+
- - ">="
|
|
201
|
+
- !ruby/object:Gem::Version
|
|
202
|
+
hash: 23
|
|
203
|
+
segments:
|
|
204
|
+
- 2
|
|
205
|
+
- 6
|
|
206
|
+
- 0
|
|
207
|
+
version: 2.6.0
|
|
208
|
+
version_requirements: *id013
|
|
209
|
+
name: rspec
|
|
210
|
+
prerelease: false
|
|
123
211
|
description: gem to aid setup of Capybara for testing bbc sites
|
|
124
212
|
email: mcrobbins@gmail.com
|
|
125
213
|
executables: []
|
|
@@ -131,6 +219,7 @@ extra_rdoc_files:
|
|
|
131
219
|
- README.rdoc
|
|
132
220
|
files:
|
|
133
221
|
- .document
|
|
222
|
+
- .rspec
|
|
134
223
|
- Gemfile
|
|
135
224
|
- Gemfile.lock
|
|
136
225
|
- LICENSE.txt
|
|
@@ -153,8 +242,9 @@ files:
|
|
|
153
242
|
- schemas/xhtml-symbol.ent
|
|
154
243
|
- schemas/xhtml1-strict.dtd
|
|
155
244
|
- schemas/xhtml1-transitional.dtd
|
|
156
|
-
-
|
|
157
|
-
-
|
|
245
|
+
- spec/frameworks_capybara_spec.rb
|
|
246
|
+
- spec/frameworks_cucumber_spec.rb
|
|
247
|
+
- spec/spec_helper.rb
|
|
158
248
|
has_rdoc: true
|
|
159
249
|
homepage: http://github.com/mcrmfc/frameworks-capybara
|
|
160
250
|
licenses:
|
|
@@ -190,5 +280,6 @@ signing_key:
|
|
|
190
280
|
specification_version: 3
|
|
191
281
|
summary: gem to aid setup of Capybara for testing bbc sites
|
|
192
282
|
test_files:
|
|
193
|
-
-
|
|
194
|
-
-
|
|
283
|
+
- spec/frameworks_capybara_spec.rb
|
|
284
|
+
- spec/frameworks_cucumber_spec.rb
|
|
285
|
+
- spec/spec_helper.rb
|
data/test/helper.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
require 'bundler'
|
|
3
|
-
begin
|
|
4
|
-
Bundler.setup(:default, :development)
|
|
5
|
-
rescue Bundler::BundlerError => e
|
|
6
|
-
$stderr.puts e.message
|
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
|
8
|
-
exit e.status_code
|
|
9
|
-
end
|
|
10
|
-
require 'test/unit'
|
|
11
|
-
require 'shoulda'
|
|
12
|
-
|
|
13
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
14
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
15
|
-
require 'frameworks-capybara'
|
|
16
|
-
|
|
17
|
-
class Test::Unit::TestCase
|
|
18
|
-
end
|