frameworks-capybara 0.2.30 → 0.2.31
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/CHANGES +3 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +8 -7
- data/README.rdoc +2 -0
- data/frameworks-capybara.gemspec +1 -0
- data/lib/frameworks/capybara.rb +34 -2
- data/lib/version.rb +1 -1
- data/spec/frameworks_capybara_spec.rb +133 -0
- metadata +40 -25
data/CHANGES
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
frameworks-capybara (0.2.
|
4
|
+
frameworks-capybara (0.2.31)
|
5
5
|
capybara (~> 1.1.2)
|
6
6
|
capybara-celerity
|
7
7
|
capybara-mechanize (>= 0.3.0)
|
8
8
|
cucumber (>= 0.10.5)
|
9
9
|
headless
|
10
10
|
json
|
11
|
+
mime-types (~> 1.25)
|
11
12
|
nokogiri (~> 1.5.10)
|
12
13
|
rubyzip (~> 0.9.9)
|
13
14
|
w3c_validators
|
@@ -32,16 +33,16 @@ GEM
|
|
32
33
|
celerity (0.9.2)
|
33
34
|
childprocess (0.3.9)
|
34
35
|
ffi (~> 1.0, >= 1.0.11)
|
35
|
-
cucumber (1.3.
|
36
|
+
cucumber (1.3.10)
|
36
37
|
builder (>= 2.1.2)
|
37
38
|
diff-lcs (>= 1.1.3)
|
38
|
-
gherkin (~> 2.12
|
39
|
+
gherkin (~> 2.12)
|
39
40
|
multi_json (>= 1.7.5, < 2.0)
|
40
41
|
multi_test (>= 0.0.2)
|
41
42
|
diff-lcs (1.1.3)
|
42
|
-
domain_name (0.5.
|
43
|
+
domain_name (0.5.15)
|
43
44
|
unf (>= 0.0.5, < 1.0.0)
|
44
|
-
ffi (1.9.
|
45
|
+
ffi (1.9.3)
|
45
46
|
gherkin (2.12.2)
|
46
47
|
multi_json (~> 1.3)
|
47
48
|
headless (1.0.1)
|
@@ -82,7 +83,7 @@ GEM
|
|
82
83
|
multi_json (~> 1.0)
|
83
84
|
rubyzip (< 1.0.0)
|
84
85
|
websocket (~> 1.0.4)
|
85
|
-
unf (0.1.
|
86
|
+
unf (0.1.3)
|
86
87
|
unf_ext
|
87
88
|
unf_ext (0.0.6)
|
88
89
|
w3c_validators (1.2)
|
@@ -101,4 +102,4 @@ DEPENDENCIES
|
|
101
102
|
jruby-openssl
|
102
103
|
rake
|
103
104
|
rspec (>= 1.0.0)
|
104
|
-
rspec-mocks
|
105
|
+
rspec-mocks (< 2.14.0)
|
data/README.rdoc
CHANGED
@@ -37,6 +37,8 @@ The following environment variables can be set to configure your tests:
|
|
37
37
|
REMOTE_URL - URL of remote Selenium-Webdriver server e.g. http://yourremotehost:4444/wd/hub
|
38
38
|
FIREFOX_PROFILE - specify a firefox profile to use when running in-browser tests (local or remote)
|
39
39
|
FIREFOX_PREFS - specify a json string of additional preferences e.g. FIREFOX_PREFS='{"javascript.enabled": false}'
|
40
|
+
FIREFOX_CERT_PATH - specify optional directory containing Firefox profile certificate (.db) files
|
41
|
+
FIREFOX_CERT_PREFIX - specify optional prefix for locating Firefox profile certificate files (e.g. <prefix>-<file>.db)
|
40
42
|
CREATE_NEW_FF_PROFILE - create a new Firefox profile with name provided by FIREFOX_PROFILE
|
41
43
|
CELERITY_JS_ENABLED (string - 'true', 'false') - determines whether Celerity (HTMLUnit) attempts to execute javascript
|
42
44
|
XVFB - (string - 'true', 'false') - determines whether XVFB is used to run browser (i.e. headless Firefox on *nix platform)
|
data/frameworks-capybara.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.files = `git ls-files`.split("\n")
|
22
22
|
|
23
|
+
s.add_runtime_dependency("mime-types", ["~>1.25"])
|
23
24
|
s.add_runtime_dependency("nokogiri", ["~>1.5.10"])
|
24
25
|
s.add_runtime_dependency("rubyzip", ["~>0.9.9"])
|
25
26
|
s.add_runtime_dependency("capybara", ["~>1.1.2"])
|
data/lib/frameworks/capybara.rb
CHANGED
@@ -32,10 +32,14 @@ class CapybaraSetup
|
|
32
32
|
selenium_remote_opts = {:platform => ENV['PLATFORM'],
|
33
33
|
:browser_name => ENV['REMOTE_BROWSER'],
|
34
34
|
:version => ENV['REMOTE_BROWSER_VERSION'],
|
35
|
-
:url => ENV['REMOTE_URL']
|
35
|
+
:url => ENV['REMOTE_URL']
|
36
|
+
}
|
36
37
|
|
37
38
|
custom_opts = {:job_name => ENV['SAUCE_JOB_NAME'],
|
38
|
-
:max_duration => ENV['SAUCE_MAX_DURATION']
|
39
|
+
:max_duration => ENV['SAUCE_MAX_DURATION'],
|
40
|
+
:firefox_cert_path => ENV['FIREFOX_CERT_PATH'],
|
41
|
+
:firefox_cert_prefix => ENV['FIREFOX_CERT_PREFIX']
|
42
|
+
}
|
39
43
|
|
40
44
|
validate_env_vars(capybara_opts.merge(selenium_remote_opts)) #validate environment variables set using cucumber.yml or passed via command line
|
41
45
|
|
@@ -80,11 +84,39 @@ class CapybaraSetup
|
|
80
84
|
end
|
81
85
|
end
|
82
86
|
|
87
|
+
# WARNING: This modifies the Firefox profile passed in the parameters
|
88
|
+
def update_firefox_profile_with_certificates(profile, certificate_path, certificate_prefix = '')
|
89
|
+
profile_path = profile.layout_on_disk
|
90
|
+
|
91
|
+
# Create links to the certificate files in the profile directory
|
92
|
+
['cert8.db', 'key3.db', 'secmod.db'].each do |cert_file|
|
93
|
+
source_file = "#{certificate_prefix}#{cert_file}"
|
94
|
+
source_path = "#{certificate_path}" + File::SEPARATOR + source_file
|
95
|
+
dest_path = profile_path + File::SEPARATOR + cert_file
|
96
|
+
if(! File.exist?(source_path))
|
97
|
+
raise "Firefox cert db file #{source_path} does not exist."
|
98
|
+
end
|
99
|
+
FileUtils.cp(source_path, dest_path)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Force the certificates to get pulled into the profile
|
103
|
+
profile = Selenium::WebDriver::Firefox::Profile.new(profile_path)
|
104
|
+
|
105
|
+
# Avoid Firefox certificate alerts
|
106
|
+
profile["security.default_personal_cert"] = 'Select Automatically'
|
107
|
+
|
108
|
+
return profile
|
109
|
+
end
|
110
|
+
|
83
111
|
def register_selenium_driver(opts,remote_opts,custom_opts)
|
84
112
|
Capybara.register_driver :selenium do |app|
|
85
113
|
|
86
114
|
if opts[:firefox_prefs] || opts[:profile]
|
87
115
|
opts[:profile] = create_profile(opts[:profile], opts[:firefox_prefs])
|
116
|
+
|
117
|
+
if custom_opts[:firefox_cert_path]
|
118
|
+
opts[:profile] = update_firefox_profile_with_certificates(opts[:profile], custom_opts[:firefox_cert_path], custom_opts[:firefox_cert_prefix])
|
119
|
+
end
|
88
120
|
end
|
89
121
|
|
90
122
|
opts[:switches] = [opts.delete(:chrome_switches)] if(opts[:chrome_switches])
|
data/lib/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'securerandom'
|
2
3
|
##
|
3
4
|
#Monkey Patch
|
4
5
|
#This is required because Capybara has module methods (singletons) which create
|
@@ -448,6 +449,138 @@ describe CapybaraSetup do
|
|
448
449
|
end
|
449
450
|
end
|
450
451
|
|
452
|
+
context "integration tests for update_firefox_profile_with_certificates() method" do
|
453
|
+
before do
|
454
|
+
def write_random_data(file_path)
|
455
|
+
file_data = SecureRandom.hex
|
456
|
+
File.open(file_path, "w") { |a_file|
|
457
|
+
a_file.write(file_data)
|
458
|
+
}
|
459
|
+
file_data
|
460
|
+
end
|
461
|
+
|
462
|
+
def compare_file_data(profile_path, file_name, expected_data)
|
463
|
+
profile_file = profile_path + File::SEPARATOR + file_name
|
464
|
+
actual_data = nil
|
465
|
+
File.open(profile_file, "r") { |a_file|
|
466
|
+
actual_data = a_file.read
|
467
|
+
}
|
468
|
+
expected_data.should == actual_data
|
469
|
+
end
|
470
|
+
|
471
|
+
ENV['BROWSER'] = 'firefox'
|
472
|
+
ENV['ENVIRONMENT'] = 'test'
|
473
|
+
ENV['HTTP_PROXY'] = 'http://example.cache.co.uk:80'
|
474
|
+
@cert_dir = Dir.mktmpdir
|
475
|
+
@cert8_db = @cert_dir + File::SEPARATOR + 'cert8.db'
|
476
|
+
@key3_db = @cert_dir + File::SEPARATOR + 'key3.db'
|
477
|
+
@secmod_db = @cert_dir + File::SEPARATOR + 'secmod.db'
|
478
|
+
end
|
479
|
+
|
480
|
+
after do
|
481
|
+
FileUtils.remove_entry @cert_dir
|
482
|
+
end
|
483
|
+
|
484
|
+
it "should raise an exception if the cert8.db file is missing in the source directory" do
|
485
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
486
|
+
|
487
|
+
key3_data = write_random_data(@key3_db)
|
488
|
+
secmod_data = write_random_data(@secmod_db)
|
489
|
+
|
490
|
+
an_exception = nil
|
491
|
+
begin
|
492
|
+
CapybaraSetup.new.instance_exec(profile, @cert_dir) { |profile, certificate_path|
|
493
|
+
update_firefox_profile_with_certificates(profile, certificate_path)
|
494
|
+
}
|
495
|
+
rescue RuntimeError => e
|
496
|
+
an_exception = e
|
497
|
+
end
|
498
|
+
|
499
|
+
an_exception.should_not be_nil
|
500
|
+
end
|
501
|
+
|
502
|
+
it "should raise an exception if the key3.db file is missing in the source directory" do
|
503
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
504
|
+
|
505
|
+
cert8_data = write_random_data(@cert8_db)
|
506
|
+
secmod_data = write_random_data(@secmod_db)
|
507
|
+
|
508
|
+
an_exception = nil
|
509
|
+
begin
|
510
|
+
CapybaraSetup.new.instance_exec(profile, @cert_dir) { |profile, certificate_path|
|
511
|
+
update_firefox_profile_with_certificates(profile, certificate_path)
|
512
|
+
}
|
513
|
+
rescue RuntimeError => e
|
514
|
+
an_exception = e
|
515
|
+
end
|
516
|
+
|
517
|
+
an_exception.should_not be_nil
|
518
|
+
end
|
519
|
+
|
520
|
+
it "should raise an exception if the secmod.db file is missing in the source directory" do
|
521
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
522
|
+
|
523
|
+
cert8_data = write_random_data(@cert8_db)
|
524
|
+
key3_data = write_random_data(@key3_db)
|
525
|
+
|
526
|
+
an_exception = nil
|
527
|
+
begin
|
528
|
+
CapybaraSetup.new.instance_exec(profile, @cert_dir) { |profile, certificate_path|
|
529
|
+
update_firefox_profile_with_certificates(profile, certificate_path)
|
530
|
+
}
|
531
|
+
rescue RuntimeError => e
|
532
|
+
an_exception = e
|
533
|
+
end
|
534
|
+
|
535
|
+
an_exception.should_not be_nil
|
536
|
+
end
|
537
|
+
|
538
|
+
it "should update a firefox profile with valid references to certificate db files" do
|
539
|
+
|
540
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
541
|
+
|
542
|
+
cert8_data = write_random_data(@cert8_db)
|
543
|
+
key3_data = write_random_data(@key3_db)
|
544
|
+
secmod_data = write_random_data(@secmod_db)
|
545
|
+
|
546
|
+
setup = CapybaraSetup.new
|
547
|
+
result = nil
|
548
|
+
setup.instance_exec(profile, @cert_dir, result) { |profile, certificate_path, result|
|
549
|
+
result = update_firefox_profile_with_certificates(profile, certificate_path)
|
550
|
+
}
|
551
|
+
|
552
|
+
profile_path = result.layout_on_disk
|
553
|
+
compare_file_data(profile_path, 'cert8.db', cert8_data)
|
554
|
+
compare_file_data(profile_path, 'key3.db', key3_data)
|
555
|
+
compare_file_data(profile_path, 'secmod.db', secmod_data)
|
556
|
+
end
|
557
|
+
|
558
|
+
it "should update a firefox profile with references to certificate db files with prefixes" do
|
559
|
+
|
560
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
561
|
+
cert_prefix = 'a'
|
562
|
+
@cert8_db = @cert_dir + File::SEPARATOR + cert_prefix + 'cert8.db'
|
563
|
+
@key3_db = @cert_dir + File::SEPARATOR + cert_prefix + 'key3.db'
|
564
|
+
@secmod_db = @cert_dir + File::SEPARATOR + cert_prefix + 'secmod.db'
|
565
|
+
|
566
|
+
cert8_data = write_random_data(@cert8_db)
|
567
|
+
key3_data = write_random_data(@key3_db)
|
568
|
+
secmod_data = write_random_data(@secmod_db)
|
569
|
+
|
570
|
+
setup = CapybaraSetup.new
|
571
|
+
result = nil
|
572
|
+
setup.instance_exec(profile, @cert_dir, cert_prefix, result) { |profile, certificate_path, certificate_prefix, result|
|
573
|
+
result = update_firefox_profile_with_certificates(profile, certificate_path, certificate_prefix)
|
574
|
+
}
|
575
|
+
|
576
|
+
profile_path = result.layout_on_disk
|
577
|
+
compare_file_data(profile_path, 'cert8.db', cert8_data)
|
578
|
+
compare_file_data(profile_path, 'key3.db', key3_data)
|
579
|
+
compare_file_data(profile_path, 'secmod.db', secmod_data)
|
580
|
+
end
|
581
|
+
|
582
|
+
end
|
583
|
+
|
451
584
|
end
|
452
585
|
|
453
586
|
|
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: 41
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 31
|
10
|
+
version: 0.2.31
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- matt robbins
|
@@ -15,13 +15,28 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-
|
18
|
+
date: 2013-11-19 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 61
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 25
|
33
|
+
version: "1.25"
|
34
|
+
name: mime-types
|
35
|
+
requirement: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
25
40
|
none: false
|
26
41
|
requirements:
|
27
42
|
- - ~>
|
@@ -33,11 +48,11 @@ dependencies:
|
|
33
48
|
- 10
|
34
49
|
version: 1.5.10
|
35
50
|
name: nokogiri
|
36
|
-
requirement: *
|
51
|
+
requirement: *id002
|
37
52
|
- !ruby/object:Gem::Dependency
|
38
53
|
type: :runtime
|
39
54
|
prerelease: false
|
40
|
-
version_requirements: &
|
55
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
41
56
|
none: false
|
42
57
|
requirements:
|
43
58
|
- - ~>
|
@@ -49,11 +64,11 @@ dependencies:
|
|
49
64
|
- 9
|
50
65
|
version: 0.9.9
|
51
66
|
name: rubyzip
|
52
|
-
requirement: *
|
67
|
+
requirement: *id003
|
53
68
|
- !ruby/object:Gem::Dependency
|
54
69
|
type: :runtime
|
55
70
|
prerelease: false
|
56
|
-
version_requirements: &
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
57
72
|
none: false
|
58
73
|
requirements:
|
59
74
|
- - ~>
|
@@ -65,11 +80,11 @@ dependencies:
|
|
65
80
|
- 2
|
66
81
|
version: 1.1.2
|
67
82
|
name: capybara
|
68
|
-
requirement: *
|
83
|
+
requirement: *id004
|
69
84
|
- !ruby/object:Gem::Dependency
|
70
85
|
type: :runtime
|
71
86
|
prerelease: false
|
72
|
-
version_requirements: &
|
87
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
73
88
|
none: false
|
74
89
|
requirements:
|
75
90
|
- - ">="
|
@@ -81,11 +96,11 @@ dependencies:
|
|
81
96
|
- 0
|
82
97
|
version: 0.3.0
|
83
98
|
name: capybara-mechanize
|
84
|
-
requirement: *
|
99
|
+
requirement: *id005
|
85
100
|
- !ruby/object:Gem::Dependency
|
86
101
|
type: :runtime
|
87
102
|
prerelease: false
|
88
|
-
version_requirements: &
|
103
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
89
104
|
none: false
|
90
105
|
requirements:
|
91
106
|
- - ">="
|
@@ -95,11 +110,11 @@ dependencies:
|
|
95
110
|
- 0
|
96
111
|
version: "0"
|
97
112
|
name: json
|
98
|
-
requirement: *
|
113
|
+
requirement: *id006
|
99
114
|
- !ruby/object:Gem::Dependency
|
100
115
|
type: :runtime
|
101
116
|
prerelease: false
|
102
|
-
version_requirements: &
|
117
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
103
118
|
none: false
|
104
119
|
requirements:
|
105
120
|
- - ">="
|
@@ -109,11 +124,11 @@ dependencies:
|
|
109
124
|
- 0
|
110
125
|
version: "0"
|
111
126
|
name: headless
|
112
|
-
requirement: *
|
127
|
+
requirement: *id007
|
113
128
|
- !ruby/object:Gem::Dependency
|
114
129
|
type: :runtime
|
115
130
|
prerelease: false
|
116
|
-
version_requirements: &
|
131
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
117
132
|
none: false
|
118
133
|
requirements:
|
119
134
|
- - ">="
|
@@ -123,11 +138,11 @@ dependencies:
|
|
123
138
|
- 0
|
124
139
|
version: "0"
|
125
140
|
name: capybara-celerity
|
126
|
-
requirement: *
|
141
|
+
requirement: *id008
|
127
142
|
- !ruby/object:Gem::Dependency
|
128
143
|
type: :runtime
|
129
144
|
prerelease: false
|
130
|
-
version_requirements: &
|
145
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
131
146
|
none: false
|
132
147
|
requirements:
|
133
148
|
- - ">="
|
@@ -137,11 +152,11 @@ dependencies:
|
|
137
152
|
- 0
|
138
153
|
version: "0"
|
139
154
|
name: w3c_validators
|
140
|
-
requirement: *
|
155
|
+
requirement: *id009
|
141
156
|
- !ruby/object:Gem::Dependency
|
142
157
|
type: :runtime
|
143
158
|
prerelease: false
|
144
|
-
version_requirements: &
|
159
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
145
160
|
none: false
|
146
161
|
requirements:
|
147
162
|
- - ">="
|
@@ -153,11 +168,11 @@ dependencies:
|
|
153
168
|
- 5
|
154
169
|
version: 0.10.5
|
155
170
|
name: cucumber
|
156
|
-
requirement: *
|
171
|
+
requirement: *id010
|
157
172
|
- !ruby/object:Gem::Dependency
|
158
173
|
type: :development
|
159
174
|
prerelease: false
|
160
|
-
version_requirements: &
|
175
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
161
176
|
none: false
|
162
177
|
requirements:
|
163
178
|
- - ">="
|
@@ -167,11 +182,11 @@ dependencies:
|
|
167
182
|
- 0
|
168
183
|
version: "0"
|
169
184
|
name: rake
|
170
|
-
requirement: *
|
185
|
+
requirement: *id011
|
171
186
|
- !ruby/object:Gem::Dependency
|
172
187
|
type: :development
|
173
188
|
prerelease: false
|
174
|
-
version_requirements: &
|
189
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
175
190
|
none: false
|
176
191
|
requirements:
|
177
192
|
- - ">="
|
@@ -183,7 +198,7 @@ dependencies:
|
|
183
198
|
- 0
|
184
199
|
version: 1.0.0
|
185
200
|
name: rspec
|
186
|
-
requirement: *
|
201
|
+
requirement: *id012
|
187
202
|
description: Gem to ease the pain of managing capybara driver config and provide a home for common utils and patches
|
188
203
|
email:
|
189
204
|
- mcrobbins@gmail.com
|