frameworks-capybara 0.3.0.rc5 → 1.0.0
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 +15 -0
- data/.travis.yml +2 -6
- data/CHANGES +52 -0
- data/Gemfile +3 -1
- data/Gemfile.lock +59 -52
- data/README.rdoc +19 -4
- data/frameworks-capybara.gemspec +7 -3
- data/lib/frameworks/capybara.rb +39 -16
- data/lib/frameworks/cucumber.rb +58 -33
- data/lib/monkey-patches/capybara-mechanize-patches.rb +30 -9
- data/lib/monkey-patches/cucumber-patches.rb +5 -1
- data/lib/monkey-patches/mechanize-patches.rb +17 -4
- data/lib/tasks/frameworks-tasks.rb +1 -1
- data/lib/version.rb +1 -1
- data/spec/capybara_mechanize_patches_spec.rb +124 -0
- data/spec/frameworks_capybara_spec.rb +127 -12
- data/spec/frameworks_cucumber_spec.rb +114 -3
- data/spec/spec_helper.rb +1 -0
- metadata +209 -179
- data/lib/monkey-patches/capybara-webkit-patches.rb +0 -26
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NGQ0MTAwMGMxNjgxNjc0MWZkYjdmNTBiYWJkOWM0N2MwMjRlNWY0Yw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODdmYmQyZWE1NGUxODJmN2ZmZTI3YTNhNjI0NGExYzE0NGY3NWI3ZA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OTQxYjczYTljMThkMWVlZGRjNTMyNTJmZjQ2ZmY2NDQwMzhmM2NkNDMyNzg3
|
10
|
+
YWI2NjAyZmZmMmFjYzU2ZjIwYjk4YjNhNWZhYTBiNWJlNWNmZGU0ZWZlMDlh
|
11
|
+
MDkzZWRiOGU4NjBmMDQ3ODZkZmQxMTVkNTY5YTQ0ODcwZDUyMTk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Mjc1NWU3MzIxY2MzNzI0NzFjMzc5MTkzZmMyNDU4MTg1ZTk1YWRlOTA5ZWFk
|
14
|
+
Y2NlMThhMmZhMTg0ODE2YWMzYzQ4NWQyNmViYTdmMzkyZmQ2N2U1NDJjMDI2
|
15
|
+
OWUyYjU0ZDMyOGYyNDEyNmJiMmZkYjJkNjBjZjAxN2FmZmI2NTk=
|
data/.travis.yml
CHANGED
@@ -3,10 +3,6 @@ before_install:
|
|
3
3
|
- sudo apt-get install xvfb
|
4
4
|
language: ruby
|
5
5
|
rvm:
|
6
|
-
- 1.8.7
|
7
|
-
- 1.9.2
|
8
6
|
- 1.9.3
|
9
|
-
-
|
10
|
-
-
|
11
|
-
# uncomment this line if your project needs to run something other than `rake`:
|
12
|
-
# # script: bundle exec rspec spec
|
7
|
+
- 2.0.0
|
8
|
+
- 2.1.0
|
data/CHANGES
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
1.0.0
|
2
|
+
Base required Ruby version now 1.9.3 or later
|
3
|
+
Bumped gem dependency versions
|
4
|
+
Updated Travis build lists to include Ruby 2.0, 2.1
|
5
|
+
|
6
|
+
0.2.34
|
7
|
+
Improved validate_online method to disregard system/OS errors.
|
8
|
+
|
9
|
+
0.2.33
|
10
|
+
Specify different runtime dependencies depending on the ruby version.
|
11
|
+
|
12
|
+
0.2.32
|
13
|
+
Fix Ruby 1.9 RSpec test failures introduced in release 0.2.31
|
14
|
+
|
15
|
+
0.2.31
|
16
|
+
Added Firefox profile certificate handling via the FIREFOX_CERT_PATH and FIREFOX_CERT_PREFIX variables.
|
17
|
+
|
18
|
+
0.2.30
|
19
|
+
Fixed rake profiles listings to work with Ruby 1.9+
|
20
|
+
|
21
|
+
0.2.29
|
22
|
+
Updated add_cookie patch to use new http_cookie API, following Mechanize changes (see http://bit.ly/12Do1l7)
|
23
|
+
|
24
|
+
0.2.28
|
25
|
+
Updated Mechanize::CookieJar add patch to work with latest capybara-mechanize.
|
26
|
+
Added support for httpOnly cookie flag to capybara mechanize patch
|
27
|
+
|
28
|
+
0.2.27
|
29
|
+
Can now specify arguments passed to the browser via the BROWSER_CLI_ARGS environment variable.
|
30
|
+
|
31
|
+
0.2.25
|
32
|
+
Modified cucumber html report monkey patch to work with cucumber >= 1.3.0
|
33
|
+
|
34
|
+
0.2.24
|
35
|
+
Added FW_BBC_DOMAIN param in order to set the top level domain used for requests.
|
36
|
+
|
37
|
+
0.2.23
|
38
|
+
Updated capybara-mechanize patch to send referer header.
|
39
|
+
|
40
|
+
0.2.22
|
41
|
+
Update Centos6 sandbox DNS to sandbox.bbc.co.uk.
|
42
|
+
|
43
|
+
0.2.21
|
44
|
+
Add support for Centos6 sandbox.
|
45
|
+
Update Gemfile.lock to latest gem versions.
|
46
|
+
|
47
|
+
0.2.20
|
48
|
+
validate_online() now takes optional hash of parameters to pass to MarkupValidator.
|
49
|
+
Updated proxy handling to pick up port and to work without protocol or port.
|
50
|
+
|
51
|
+
0.2.19
|
52
|
+
Present production release.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,22 +1,25 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
frameworks-capybara (0.
|
5
|
-
capybara (
|
4
|
+
frameworks-capybara (1.0.0)
|
5
|
+
capybara (~> 1.1.2)
|
6
6
|
capybara-celerity
|
7
|
-
capybara-mechanize (>= 0.3.0)
|
8
|
-
capybara-webkit
|
7
|
+
capybara-mechanize (>= 0.3.0, < 1.0.0)
|
9
8
|
cucumber (>= 0.10.5)
|
10
9
|
headless
|
11
10
|
json
|
11
|
+
mechanize (= 2.7.2)
|
12
|
+
mime-types
|
13
|
+
nokogiri
|
14
|
+
rubyzip
|
15
|
+
selenium-webdriver
|
12
16
|
w3c_validators
|
13
17
|
|
14
18
|
GEM
|
15
|
-
remote:
|
19
|
+
remote: https://rubygems.org/
|
16
20
|
specs:
|
17
|
-
|
18
|
-
|
19
|
-
capybara (1.1.2)
|
21
|
+
builder (3.2.2)
|
22
|
+
capybara (1.1.4)
|
20
23
|
mime-types (>= 1.16)
|
21
24
|
nokogiri (>= 1.3.3)
|
22
25
|
rack (>= 1.0.0)
|
@@ -29,66 +32,69 @@ GEM
|
|
29
32
|
capybara-mechanize (0.3.0)
|
30
33
|
capybara (~> 1.1)
|
31
34
|
mechanize (~> 2.3)
|
32
|
-
capybara-webkit (0.12.1)
|
33
|
-
capybara (>= 1.0.0, < 1.2)
|
34
|
-
json
|
35
35
|
celerity (0.9.2)
|
36
|
-
childprocess (0.
|
37
|
-
ffi (~> 1.0.
|
38
|
-
cucumber (1.
|
36
|
+
childprocess (0.5.1)
|
37
|
+
ffi (~> 1.0, >= 1.0.11)
|
38
|
+
cucumber (1.3.10)
|
39
39
|
builder (>= 2.1.2)
|
40
40
|
diff-lcs (>= 1.1.3)
|
41
|
-
gherkin (~> 2.
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
41
|
+
gherkin (~> 2.12)
|
42
|
+
multi_json (>= 1.7.5, < 2.0)
|
43
|
+
multi_test (>= 0.0.2)
|
44
|
+
diff-lcs (1.2.5)
|
45
|
+
domain_name (0.5.16)
|
46
|
+
unf (>= 0.0.5, < 1.0.0)
|
47
|
+
ffi (1.9.3)
|
48
|
+
gherkin (2.12.2)
|
49
|
+
multi_json (~> 1.3)
|
50
|
+
headless (1.0.1)
|
51
|
+
http-cookie (1.0.2)
|
52
|
+
domain_name (~> 0.5)
|
53
|
+
json (1.8.1)
|
54
|
+
mechanize (2.7.2)
|
54
55
|
domain_name (~> 0.5, >= 0.5.1)
|
56
|
+
http-cookie (~> 1.0.0)
|
55
57
|
mime-types (~> 1.17, >= 1.17.2)
|
56
58
|
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
57
59
|
net-http-persistent (~> 2.5, >= 2.5.2)
|
58
60
|
nokogiri (~> 1.4)
|
59
61
|
ntlm-http (~> 0.1, >= 0.1.1)
|
60
|
-
webrobots (
|
61
|
-
mime-types (1.
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
webrobots (>= 0.0.9, < 0.2)
|
63
|
+
mime-types (1.25.1)
|
64
|
+
mini_portile (0.5.2)
|
65
|
+
multi_json (1.8.4)
|
66
|
+
multi_test (0.0.3)
|
67
|
+
net-http-digest_auth (1.4)
|
68
|
+
net-http-persistent (2.9.4)
|
69
|
+
nokogiri (1.6.1)
|
70
|
+
mini_portile (~> 0.5.0)
|
66
71
|
ntlm-http (0.1.1)
|
67
|
-
rack (1.
|
68
|
-
rack-test (0.6.
|
72
|
+
rack (1.5.2)
|
73
|
+
rack-test (0.6.2)
|
69
74
|
rack (>= 1.0)
|
70
|
-
rake (
|
71
|
-
rspec (2.
|
72
|
-
rspec-core (~> 2.
|
73
|
-
rspec-expectations (~> 2.
|
74
|
-
rspec-mocks (~> 2.
|
75
|
-
rspec-core (2.
|
76
|
-
rspec-expectations (2.
|
77
|
-
diff-lcs (
|
78
|
-
rspec-mocks (2.
|
79
|
-
rubyzip (
|
80
|
-
selenium-webdriver (2.
|
81
|
-
childprocess (>= 0.
|
82
|
-
libwebsocket (~> 0.1.3)
|
75
|
+
rake (10.1.1)
|
76
|
+
rspec (2.13.0)
|
77
|
+
rspec-core (~> 2.13.0)
|
78
|
+
rspec-expectations (~> 2.13.0)
|
79
|
+
rspec-mocks (~> 2.13.0)
|
80
|
+
rspec-core (2.13.1)
|
81
|
+
rspec-expectations (2.13.0)
|
82
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
83
|
+
rspec-mocks (2.13.1)
|
84
|
+
rubyzip (1.1.0)
|
85
|
+
selenium-webdriver (2.40.0)
|
86
|
+
childprocess (>= 0.5.0)
|
83
87
|
multi_json (~> 1.0)
|
84
|
-
rubyzip
|
85
|
-
|
88
|
+
rubyzip (~> 1.0)
|
89
|
+
websocket (~> 1.0.4)
|
90
|
+
unf (0.1.3)
|
86
91
|
unf_ext
|
87
|
-
unf_ext (0.0.
|
92
|
+
unf_ext (0.0.6)
|
88
93
|
w3c_validators (1.2)
|
89
94
|
json
|
90
95
|
nokogiri
|
91
|
-
webrobots (0.
|
96
|
+
webrobots (0.1.1)
|
97
|
+
websocket (1.0.7)
|
92
98
|
xpath (0.1.4)
|
93
99
|
nokogiri (~> 1.3)
|
94
100
|
|
@@ -100,3 +106,4 @@ DEPENDENCIES
|
|
100
106
|
jruby-openssl
|
101
107
|
rake
|
102
108
|
rspec (>= 1.0.0)
|
109
|
+
rspec-mocks (< 2.14.0)
|
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Build Status {<img src="https://secure.travis-ci.org/
|
1
|
+
= Build Status {<img src="https://secure.travis-ci.org/bbc-frameworks/frameworks-capybara.png"/>}[https://secure.travis-ci.org/bbc-frameworks/frameworks-capybara]
|
2
2
|
|
3
3
|
= frameworks-capybara
|
4
4
|
|
@@ -27,7 +27,7 @@ In your env.rb simply add:
|
|
27
27
|
|
28
28
|
The following environment variables can be set to configure your tests:
|
29
29
|
|
30
|
-
ENVIRONMENT - this must be one of either 'sandbox', 'int', 'test', 'stage', 'live'
|
30
|
+
ENVIRONMENT - this must be one of either 'sandbox', 'sandbox6', 'int', 'test', 'stage', 'live'
|
31
31
|
BROWSER - this must be one of either 'ie', 'firefox', 'chrome', 'headless', 'remote'
|
32
32
|
HTTP_PROXY - url of proxy if required e.g. 'http://proxyhost:80', when running a headless browser this sets the proxy for the browser itself, when running a remote browser this sets the proxy for the client which will connect to the remote selenium server
|
33
33
|
PLATFORM - used when specifying remote test on a grid that provides a choice of platforms, this must be one of either 'WINDOWS' or 'LINUX'
|
@@ -37,11 +37,16 @@ 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)
|
43
45
|
FW_CERT_LOCATION - path to client certificate (combined pem)
|
44
46
|
CHROME_SWITCHES - pass in any allowed switches for the Selenium chrome driver (http://peter.sh/experiments/chromium-command-line-switches/) e.g. CHROME_SWITCHES="--user-agent=Mozilla/5.0 (PLAYSTATION 3; 3.55)"
|
47
|
+
PROJECT_NAME - optional project name description which gets displayed in Cucumber html reports
|
48
|
+
TEAM_NAME - optional team name description which gets displayed in Cucumber html reports
|
49
|
+
BROWSER_CLI_ARGS - optional additional arguments to pass to local browser processes
|
45
50
|
|
46
51
|
Here is a sample cucumber.yml:
|
47
52
|
|
@@ -74,15 +79,25 @@ This gem also sets up a number of 'base urls' for you to use in your tests, thes
|
|
74
79
|
@base_static_url
|
75
80
|
@base_open_url
|
76
81
|
|
77
|
-
Finally this gem contains some useful monkey-patches to core libraries e.g. Capybara, Selenium-Webdriver and Cucumber.
|
82
|
+
Finally this gem contains some useful monkey-patches to core libraries e.g. Capybara-Mechanize, Selenium-Webdriver and Cucumber.
|
78
83
|
|
79
84
|
== Release instructions
|
80
85
|
|
81
86
|
* Run tests - 'rake'
|
87
|
+
* If you have not published with 'gem' before, run 'gem push' to enter your credentials (ignore failed publish error at the end)
|
82
88
|
* Bump version - manually update file in lib/version.rb
|
83
|
-
*
|
89
|
+
* Update the CHANGES[https://github.com/bbc-frameworks/frameworks-capybara/blob/master/CHANGES] log (see file for convention).
|
90
|
+
* Run 'bundle install --binstubs --path vendor' to pick up new version in Gemfile
|
91
|
+
* Commit 'Gemfile.lock' changes
|
84
92
|
* Release - 'rake release'
|
85
93
|
|
94
|
+
You should see something like:
|
95
|
+
|
96
|
+
frameworks-capybara 0.2.23 built to pkg/frameworks-capybara-0.2.23.gem
|
97
|
+
Tagged v0.2.23
|
98
|
+
Pushed git commits and tags
|
99
|
+
Pushed frameworks-capybara 0.2.23 to rubygems.org
|
100
|
+
|
86
101
|
== Contributing to frameworks-capybara
|
87
102
|
|
88
103
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/frameworks-capybara.gemspec
CHANGED
@@ -20,9 +20,13 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.files = `git ls-files`.split("\n")
|
22
22
|
|
23
|
-
s.add_runtime_dependency("
|
24
|
-
s.add_runtime_dependency("
|
25
|
-
s.add_runtime_dependency("
|
23
|
+
s.add_runtime_dependency("mime-types")
|
24
|
+
s.add_runtime_dependency("nokogiri")
|
25
|
+
s.add_runtime_dependency("rubyzip")
|
26
|
+
s.add_runtime_dependency("selenium-webdriver")
|
27
|
+
s.add_runtime_dependency("capybara", ["~>1.1.2"])
|
28
|
+
s.add_runtime_dependency("mechanize", ["2.7.2"])
|
29
|
+
s.add_runtime_dependency("capybara-mechanize", [">=0.3.0"], ["<1.0.0"])
|
26
30
|
s.add_runtime_dependency("json")
|
27
31
|
s.add_runtime_dependency("headless")
|
28
32
|
s.add_runtime_dependency("capybara-celerity")
|
data/lib/frameworks/capybara.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'capybara/cucumber'
|
2
2
|
require 'monkey-patches/webdriver-patches'
|
3
3
|
require 'monkey-patches/capybara-patches'
|
4
|
-
require 'monkey-patches/capybara-webkit-patches'
|
5
4
|
require 'monkey-patches/capybara-mechanize-patches'
|
6
5
|
require 'monkey-patches/mechanize-patches'
|
7
6
|
require 'monkey-patches/send-keys'
|
@@ -9,7 +8,6 @@ require 'monkey-patches/net-http-persistent-patches'
|
|
9
8
|
require 'selenium-webdriver'
|
10
9
|
require 'capybara/mechanize/cucumber'
|
11
10
|
require 'capybara/celerity'
|
12
|
-
require 'capybara-webkit'
|
13
11
|
|
14
12
|
class CapybaraSetup
|
15
13
|
|
@@ -27,19 +25,25 @@ class CapybaraSetup
|
|
27
25
|
:proxy_on => ENV['PROXY_ON'],
|
28
26
|
:url => ENV['REMOTE_URL'],
|
29
27
|
:chrome_switches => ENV['CHROME_SWITCHES'],
|
30
|
-
:firefox_prefs => ENV['FIREFOX_PREFS']
|
28
|
+
:firefox_prefs => ENV['FIREFOX_PREFS'],
|
29
|
+
:args => ENV['BROWSER_CLI_ARGS']
|
30
|
+
}
|
31
31
|
|
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
|
|
42
|
-
@proxy_host = capybara_opts[:proxy].gsub(/http:\/\//,'').gsub(/:80
|
46
|
+
@proxy_host = capybara_opts[:proxy].gsub(/http:\/\//,'').gsub(/:80.*/,'') unless capybara_opts[:proxy].nil?
|
43
47
|
capybara_opts[:browser] = capybara_opts[:browser].intern #update :browser value to be a symbol, required for Selenium
|
44
48
|
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
|
45
49
|
|
@@ -55,8 +59,6 @@ class CapybaraSetup
|
|
55
59
|
@driver = register_celerity_driver(capybara_opts)
|
56
60
|
when :mechanize then
|
57
61
|
@driver = register_mechanize_driver(capybara_opts)
|
58
|
-
when :webkit then
|
59
|
-
@driver = register_webkit_driver(capybara_opts)
|
60
62
|
else
|
61
63
|
@driver = register_selenium_driver(capybara_opts, selenium_remote_opts, custom_opts)
|
62
64
|
end
|
@@ -82,11 +84,39 @@ class CapybaraSetup
|
|
82
84
|
end
|
83
85
|
end
|
84
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
|
+
|
85
111
|
def register_selenium_driver(opts,remote_opts,custom_opts)
|
86
112
|
Capybara.register_driver :selenium do |app|
|
87
113
|
|
88
114
|
if opts[:firefox_prefs] || opts[:profile]
|
89
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
|
90
120
|
end
|
91
121
|
|
92
122
|
opts[:switches] = [opts.delete(:chrome_switches)] if(opts[:chrome_switches])
|
@@ -128,7 +158,7 @@ class CapybaraSetup
|
|
128
158
|
elsif(profile_name == 'BBC_INTERNAL')
|
129
159
|
profile = Selenium::WebDriver::Firefox::Profile.new
|
130
160
|
profile["network.proxy.type"] = 1
|
131
|
-
profile["network.proxy.no_proxies_on"] = "*.sandbox.dev.bbc.co.uk"
|
161
|
+
profile["network.proxy.no_proxies_on"] = "*.sandbox.dev.bbc.co.uk,*.sandbox.bbc.co.uk"
|
132
162
|
profile["network.proxy.http"] = @proxy_host
|
133
163
|
profile["network.proxy.ssl"] = @proxy_host
|
134
164
|
profile["network.proxy.http_port"] = 80
|
@@ -166,13 +196,6 @@ class CapybaraSetup
|
|
166
196
|
:mechanize
|
167
197
|
end
|
168
198
|
|
169
|
-
def register_webkit_driver(opts)
|
170
|
-
Capybara.register_driver :webkit do |app|
|
171
|
-
Capybara::Driver::Webkit.new(app)
|
172
|
-
end
|
173
|
-
Capybara.javascript_driver = :webkit
|
174
|
-
:webkit
|
175
|
-
end
|
176
199
|
|
177
200
|
def clean_opts(opts, *args)
|
178
201
|
args.each do |arg|
|
data/lib/frameworks/cucumber.rb
CHANGED
@@ -3,7 +3,7 @@ require 'w3c_validators'
|
|
3
3
|
require 'monkey-patches/cucumber-patches'
|
4
4
|
|
5
5
|
#This is hackish but means we only run once in cucumber and not every scenario
|
6
|
-
if(ENV['XVFB']=='true'
|
6
|
+
if(ENV['XVFB']=='true')
|
7
7
|
puts "You have chosen to use XVFB - ensure you have yum installed Xvfb Xorg and firefox"
|
8
8
|
require 'headless'
|
9
9
|
headless = Headless.new
|
@@ -27,8 +27,15 @@ module Frameworks
|
|
27
27
|
@pal_base_url = @sandbox + @bbc_domain
|
28
28
|
@ssl_base_url = @sslsandbox + @bbc_domain
|
29
29
|
@static_base_url = @static_sandbox + @bbc_domain
|
30
|
-
@mobile_base_url = @mobiledot_prefix + "sandbox.dev
|
31
|
-
@m_base_url = @mdot_prefix + "sandbox.dev
|
30
|
+
@mobile_base_url = @mobiledot_prefix + "sandbox.dev" + @bbc_domain
|
31
|
+
@m_base_url = @mdot_prefix + "sandbox.dev" + @bbc_domain
|
32
|
+
elsif(environment =='sandbox6')
|
33
|
+
@base_url = @sandbox6 + @bbc_domain
|
34
|
+
@pal_base_url = @sandbox6 + @bbc_domain
|
35
|
+
@ssl_base_url = @sslsandbox6 + @bbc_domain
|
36
|
+
@static_base_url = @static_sandbox6 + @bbc_domain
|
37
|
+
@mobile_base_url = @mobiledot_prefix + "sandbox" + @bbc_domain
|
38
|
+
@m_base_url = @mdot_prefix + "sandbox" + @bbc_domain
|
32
39
|
elsif (environment =='live' && ENV['WWW_LIVE']=='false')
|
33
40
|
@base_url = @www_prefix.chop + @bbc_domain
|
34
41
|
@pal_base_url = @pal_prefix + environment + @bbc_domain
|
@@ -49,12 +56,24 @@ module Frameworks
|
|
49
56
|
end
|
50
57
|
|
51
58
|
proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
|
52
|
-
|
59
|
+
proxy_parts = proxy.scan(/(?:http:\/\/)?([^\:]+)(?::(\d+))?/) if proxy && !proxy.empty?
|
60
|
+
if proxy_parts && !proxy_parts.empty?
|
61
|
+
@proxy_host = proxy_parts[0][0]
|
62
|
+
if proxy_parts[0][1]
|
63
|
+
@proxy_port = proxy_parts[0][1]
|
64
|
+
else
|
65
|
+
@proxy_port = "80"
|
66
|
+
end
|
67
|
+
end
|
53
68
|
end
|
54
69
|
|
55
|
-
def validate_online(src)
|
70
|
+
def validate_online(src, validator_args = nil)
|
56
71
|
|
57
|
-
|
72
|
+
args = {:proxy_host => @proxy_host,:proxy_port => @proxy_port}
|
73
|
+
if(validator_args != nil)
|
74
|
+
args = args.merge(validator_args)
|
75
|
+
end
|
76
|
+
@validator = MarkupValidator.new(args)
|
58
77
|
|
59
78
|
@validator.set_doctype!(:xhtml)
|
60
79
|
begin
|
@@ -65,11 +84,11 @@ module Frameworks
|
|
65
84
|
results.errors.each do |err|
|
66
85
|
puts err.to_s
|
67
86
|
end
|
68
|
-
raise "W3C Validation
|
87
|
+
raise "W3C Validation failed."
|
69
88
|
end
|
70
89
|
|
71
|
-
rescue
|
72
|
-
puts "
|
90
|
+
rescue SystemCallError => e
|
91
|
+
puts "System error whilst performing request to W3C: #{e}"
|
73
92
|
end
|
74
93
|
end
|
75
94
|
|
@@ -80,13 +99,41 @@ module Frameworks
|
|
80
99
|
@ssl_prefix = "https://ssl."
|
81
100
|
@static_prefix = "#{scheme}://static."
|
82
101
|
@open_prefix = "#{scheme}://open."
|
83
|
-
@bbc_domain = '.bbc.co.uk'
|
102
|
+
@bbc_domain = '.' + (ENV['FW_BBC_DOMAIN'] || 'bbc.co.uk')
|
84
103
|
@bbci_domain = '.bbci.co.uk'
|
85
104
|
@sandbox = "#{scheme}://pal.sandbox.dev"
|
105
|
+
@sandbox6 = "#{scheme}://sandbox"
|
86
106
|
@mobiledot_prefix = "#{scheme}://mobile."
|
87
107
|
@mdot_prefix = "#{scheme}://m."
|
88
108
|
@sslsandbox = "https://ssl.sandbox.dev"
|
109
|
+
@sslsandbox6 = "https://ssl.sandbox"
|
89
110
|
@static_sandbox = "#{scheme}://static.sandbox.dev"
|
111
|
+
@static_sandbox6 = "#{scheme}://static.sandbox"
|
112
|
+
end
|
113
|
+
|
114
|
+
def setup_mechanize(agent, http_proxy=nil)
|
115
|
+
http_proxy = http_proxy || ENV['HTTP_PROXY'] || ENV['http_proxy']
|
116
|
+
|
117
|
+
if ENV['FW_CERT_LOCATION']
|
118
|
+
agent.cert, agent.key = ENV['FW_CERT_LOCATION'], ENV['FW_CERT_LOCATION']
|
119
|
+
end
|
120
|
+
|
121
|
+
agent.ca_file = ENV['CA_CERT_LOCATION'] if ENV['CA_CERT_LOCATION']
|
122
|
+
agent.set_proxy(http_proxy.scan(/http:\/\/(.*):80/)[0][0].to_s,80) if http_proxy && !http_proxy.empty?
|
123
|
+
|
124
|
+
#This is necessary because Mech2 does not ship with root certs like Mech1 did and boxes may not have the OpenSSL set installed
|
125
|
+
agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
126
|
+
|
127
|
+
# This prevents Mechanize from raising a Mechanize::ResponseCodeError
|
128
|
+
# when the HTTP Response Code is 404 or 503. This lets capybara continue the journey.
|
129
|
+
agent.agent.allowed_error_codes = ['404', '503']
|
130
|
+
end
|
131
|
+
|
132
|
+
def new_mechanize(http_proxy=nil)
|
133
|
+
require 'mechanize'
|
134
|
+
agent = Mechanize.new
|
135
|
+
setup_mechanize(agent, http_proxy)
|
136
|
+
agent
|
90
137
|
end
|
91
138
|
|
92
139
|
end #EnvHelper
|
@@ -100,29 +147,7 @@ World(Frameworks::EnvHelper)
|
|
100
147
|
Before do
|
101
148
|
#This is ugly but unavoidable since Capybara::RackTest::Driver.reset_host! does @browser = nil and wipes all brower level settings
|
102
149
|
#it was either this or a monkey patch - need to think about pushing a softer reset change to capybara-mechanize to override this
|
103
|
-
|
104
|
-
if page.driver.class == Capybara::Mechanize::Driver
|
105
|
-
|
106
|
-
if ENV['FW_CERT_LOCATION']
|
107
|
-
page.driver.browser.agent.cert, page.driver.browser.agent.key =
|
108
|
-
ENV['FW_CERT_LOCATION'],
|
109
|
-
ENV['FW_CERT_LOCATION']
|
110
|
-
end
|
111
|
-
|
112
|
-
page.driver.browser.agent.ca_file = ENV['CA_CERT_LOCATION'] if ENV['CA_CERT_LOCATION']
|
113
|
-
|
114
|
-
page.driver.browser.agent.set_proxy(http_proxy.scan(/http:\/\/(.*):80/).to_s,80) if http_proxy
|
115
|
-
|
116
|
-
#This is necessary because Mech2 does not ship with root certs like Mech1 did and boxes may not have the OpenSSL set installed
|
117
|
-
page.driver.browser.agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
118
|
-
end
|
119
|
-
|
120
|
-
#TODO: See if this can be set at the driver level rather than in before do - and only want to start headless once
|
121
|
-
if page.driver.class == Capybara::Driver::Webkit
|
122
|
-
page.driver.browser.ignore_ssl_errors #shouldn't have to do this on test but for some reason do
|
123
|
-
page.driver.browser.set_proxy(:host => http_proxy.scan(/http:\/\/(.*):80/).to_s,:port => '80') if http_proxy
|
124
|
-
end
|
125
|
-
|
150
|
+
setup_mechanize(page.driver.browser.agent) if page.driver.class == Capybara::Mechanize::Driver
|
126
151
|
|
127
152
|
generate_base_urls
|
128
153
|
end
|
@@ -2,6 +2,7 @@ require 'capybara/mechanize/cucumber'
|
|
2
2
|
require 'uri'
|
3
3
|
class Capybara::Mechanize::Browser
|
4
4
|
#patch to remove catching all Mechanize exceptions (which are nice and specific) and throwing a useless RuntimeError
|
5
|
+
#patch to add Referer (Mechanize@0.3.0 won't add Referer for urls starting with http(s)://.)
|
5
6
|
def process_remote_request(method, url, attributes, headers)
|
6
7
|
if remote?(url)
|
7
8
|
uri = URI.parse(url)
|
@@ -9,11 +10,23 @@ class Capybara::Mechanize::Browser
|
|
9
10
|
@last_remote_uri = uri
|
10
11
|
url = uri.to_s
|
11
12
|
|
13
|
+
referer = nil
|
14
|
+
referer_candidate = current_url
|
15
|
+
unless referer_candidate.empty? or (referer_candidate.start_with?('https://') and url.start_with?('http://'))
|
16
|
+
referer = referer_candidate
|
17
|
+
end
|
18
|
+
|
12
19
|
reset_cache!
|
13
20
|
args = []
|
14
21
|
args << attributes unless attributes.empty?
|
15
22
|
args << headers unless headers.empty?
|
16
|
-
|
23
|
+
|
24
|
+
if method == :get
|
25
|
+
agent.send(method, url, attributes, referer, headers)
|
26
|
+
else
|
27
|
+
agent.send(method, url, *args)
|
28
|
+
end
|
29
|
+
|
17
30
|
@last_request_remote = true
|
18
31
|
end
|
19
32
|
end
|
@@ -27,12 +40,14 @@ class Capybara::Mechanize::Driver
|
|
27
40
|
browser.agent.cookie_jar.jar.each do |domain|
|
28
41
|
domain[1].each do |path|
|
29
42
|
path[1].each do |cookie|
|
43
|
+
|
30
44
|
cookies.push({
|
31
45
|
:name => cookie[1].name,
|
32
46
|
:value => cookie[1].value,
|
33
47
|
:domain => cookie[1].domain,
|
34
48
|
:secure => cookie[1].secure,
|
35
49
|
:expires => cookie[1].expires,
|
50
|
+
:httponly => cookie[1].httponly,
|
36
51
|
:path => cookie[1].path
|
37
52
|
})
|
38
53
|
end
|
@@ -67,14 +82,20 @@ class Capybara::Mechanize::Driver
|
|
67
82
|
end
|
68
83
|
end
|
69
84
|
|
70
|
-
FakeURI = Struct.new(:host)
|
71
85
|
def add_cookie(attribs)
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
86
|
+
|
87
|
+
cookie = HTTP::Cookie.new(
|
88
|
+
attribs[:name],
|
89
|
+
attribs[:value],
|
90
|
+
:domain => attribs[:domain],
|
91
|
+
:for_domain => true,
|
92
|
+
:path => '/',
|
93
|
+
:expires => attribs[:expires],
|
94
|
+
:secure => attribs[:secure],
|
95
|
+
:httponly => attribs[:httponly]
|
96
|
+
)
|
97
|
+
|
98
|
+
browser.agent.cookie_jar.add(cookie)
|
99
|
+
|
79
100
|
end
|
80
101
|
end
|