quke 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71be633be262bebd02d1edb32d74fe4d8ec1266c
4
- data.tar.gz: ddc6be5e4475ccd512f6bf18903e946f6346225e
3
+ metadata.gz: d94d8f089c2a7e1386bf52be42889b4a18bf8bca
4
+ data.tar.gz: 4546c88f278d7f1e19bf4f10cfb3de2cd294f430
5
5
  SHA512:
6
- metadata.gz: 3b43a47f55de71aebfd0e96b8e0163821aa49b5850ca7c83cfb6d4c8c7a7e0abf4a2d885ac924d404a058ecfc93d410ecd02d4f979cdd93d5f878dfecd07fbd0
7
- data.tar.gz: cacd16594d9f0526acd823e704361f73ef96fdea4abcdcb85c83a714744ae2a84d49d3b75ac0c9181878ae68207aa45f22e103d38732cde68a63aedf26f27c77
6
+ metadata.gz: c221a3c871dd0bc9ac04468e4b68f9e13d0d708e08d637746b85118c26f74366cd022ab6a3a586f1fd33283d2911cd00158368a00d5780307f37029f7b89186d
7
+ data.tar.gz: 1723da3d054399594ffb377387ac17b0b0ae9fee84f701446d9219d1b1c26ecff446e10a2f26ea7279e171ab23fd343f03eebbb0777f9fdd4ee0c8c0a8f34ee1
data/.config.example.yml CHANGED
@@ -25,6 +25,15 @@ pause: 1
25
25
  # a detailed response.
26
26
  stop_on_error: 1
27
27
 
28
+ # If you are running Quke behind a proxy you can configure the proxy details
29
+ # here. You'll need either the hostname or IP of the proxy server (don't include
30
+ # the http:// bit) and the port number (typically 8080). Currently proxy
31
+ # settings will only be applied if you are using the PhantomJS, Chrome or
32
+ # Firefox drivers.
33
+ proxy:
34
+ host: '10.10.2.70'
35
+ port: 8080
36
+
28
37
  # If you select the browserstack driver, there are a number of options you
29
38
  # can pass through to setup your browserstack tests, username and auth_key
30
39
  # being the critical ones.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Change Log
2
2
 
3
+ ## [Unreleased](https://github.com/EnvironmentAgency/quke/tree/HEAD)
4
+
5
+ [Full Changelog](https://github.com/EnvironmentAgency/quke/compare/v0.2.5...HEAD)
6
+
7
+ **Closed issues:**
8
+
9
+ - focus label left against rspec tests stops all tests running [\#43](https://github.com/EnvironmentAgency/quke/issues/43)
10
+
11
+ ## [v0.2.5](https://github.com/EnvironmentAgency/quke/tree/v0.2.5) (2016-11-28)
12
+ [Full Changelog](https://github.com/EnvironmentAgency/quke/compare/v0.2.4...v0.2.5)
13
+
14
+ **Closed issues:**
15
+
16
+ - Don't use driver as an assumption of running on CI [\#41](https://github.com/EnvironmentAgency/quke/issues/41)
17
+
18
+ **Merged pull requests:**
19
+
20
+ - Fix rspec focus label left in tests [\#44](https://github.com/EnvironmentAgency/quke/pull/44) ([Cruikshanks](https://github.com/Cruikshanks))
21
+
22
+ ## [v0.2.4](https://github.com/EnvironmentAgency/quke/tree/v0.2.4) (2016-11-28)
23
+ [Full Changelog](https://github.com/EnvironmentAgency/quke/compare/v0.2.3...v0.2.4)
24
+
25
+ **Closed issues:**
26
+
27
+ - Launchy showing blank pages on error [\#39](https://github.com/EnvironmentAgency/quke/issues/39)
28
+
29
+ **Merged pull requests:**
30
+
31
+ - Change after\_hook error to use config not assume [\#42](https://github.com/EnvironmentAgency/quke/pull/42) ([Cruikshanks](https://github.com/Cruikshanks))
32
+
33
+ ## [v0.2.3](https://github.com/EnvironmentAgency/quke/tree/v0.2.3) (2016-10-05)
34
+ [Full Changelog](https://github.com/EnvironmentAgency/quke/compare/v0.2.2...v0.2.3)
35
+
36
+ **Merged pull requests:**
37
+
38
+ - Fix Quke not loading .config.yml correctly [\#37](https://github.com/EnvironmentAgency/quke/pull/37) ([Cruikshanks](https://github.com/Cruikshanks))
39
+ - Update CHANGELOG.md [\#36](https://github.com/EnvironmentAgency/quke/pull/36) ([Cruikshanks](https://github.com/Cruikshanks))
40
+
3
41
  ## [v0.2.2](https://github.com/EnvironmentAgency/quke/tree/v0.2.2) (2016-10-05)
4
42
  [Full Changelog](https://github.com/EnvironmentAgency/quke/compare/v0.2.1...v0.2.2)
5
43
 
data/bin/console CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  require 'bundler/setup'
4
4
  require 'quke'
5
+ require 'quke/version'
6
+ require 'quke/configuration'
7
+ require 'quke/cuke_runner'
8
+ require 'quke/driver_registration'
9
+ require 'quke/driver_configuration'
5
10
 
6
11
  # You can add fixtures and/or initialization code here to make experimenting
7
12
  # with your gem easier. You can also use a different console, if you like.
data/bin/setup CHANGED
File without changes
@@ -1,13 +1,17 @@
1
1
  require 'rspec/expectations'
2
2
  require 'capybara/cucumber'
3
3
  require 'site_prism'
4
- require 'quke/driver_registration'
5
4
  require 'quke/configuration'
5
+ require 'quke/driver_configuration'
6
+ require 'quke/driver_registration'
6
7
 
7
- Capybara.app_host =
8
- Quke::Quke.config.app_host unless Quke::Quke.config.app_host.empty?
8
+ unless Quke::Quke.config.app_host.empty?
9
+ Capybara.app_host = Quke::Quke.config.app_host
10
+ end
9
11
 
10
- driver = Quke::DriverRegistration.new(Quke::Quke.config).register
12
+ driver_config = Quke::DriverConfiguration.new(Quke::Quke.config)
13
+ driver_reg = Quke::DriverRegistration.new(driver_config)
14
+ driver = driver_reg.register(Quke::Quke.config.driver)
11
15
 
12
16
  Capybara.default_driver = driver
13
17
  Capybara.javascript_driver = driver
data/lib/quke.rb CHANGED
@@ -2,6 +2,7 @@ require 'quke/version'
2
2
  require 'quke/configuration'
3
3
  require 'quke/cuke_runner'
4
4
  require 'quke/driver_registration'
5
+ require 'quke/driver_configuration'
5
6
 
6
7
  module Quke #:nodoc:
7
8
 
@@ -104,25 +104,22 @@ module Quke #:nodoc:
104
104
  @data['browserstack']
105
105
  end
106
106
 
107
- # The hash returned from this method is intended to used in a call to
108
- # Capybara::Poltergeist::Driver.new(app, options).
107
+ # Return the hash of +proxy+ server settings
109
108
  #
110
- # There are a number of options for how to configure poltergeist which
111
- # drives PhantomJS, and it includes options passed to phantomjs to
112
- # configure how it runs.
113
- def poltergeist_options
114
- {
115
- # Javascript errors will get re-raised in our tests causing them to fail
116
- js_errors: true,
117
- # How long in seconds we'll wait for response when communicating with
118
- # Phantomjs
119
- timeout: 30,
120
- # When true debug output will be logged to STDERR (a terminal thing!)
121
- debug: false,
122
- # Poltergeist can pass on options for configuring phantomjs
123
- phantomjs_options: phantomjs_options,
124
- inspector: true
125
- }
109
+ # If your environment requires you to go via a proxy server you can
110
+ # configure Quke to use it by setting the +host+ and +port+ in your config
111
+ # file.
112
+ def proxy
113
+ @data['proxy']
114
+ end
115
+
116
+ # Return true if the +proxy: host+ value has been set in the +.config.yml+
117
+ # file, else false.
118
+ #
119
+ # It is mainly used when determining whether to apply proxy server settings
120
+ # to the different drivers when registering them with Capybara.
121
+ def use_proxy?
122
+ proxy['host'] == '' ? false : true
126
123
  end
127
124
 
128
125
  # Override to_s to output the contents of Config as a readable string rather
@@ -133,18 +130,10 @@ module Quke #:nodoc:
133
130
 
134
131
  private
135
132
 
136
- def phantomjs_options
137
- # Don't load images to help speed up the tests,
138
- [
139
- '--load-images=no',
140
- '--disk-cache=false',
141
- '--ignore-ssl-errors=yes'
142
- ]
143
- end
144
-
145
133
  def load_data
146
134
  data = default_data!(load_yml_data)
147
135
  data['browserstack'] = browserstack_data(data['browserstack'])
136
+ data['proxy'] = proxy_data(data['proxy'])
148
137
  data
149
138
  end
150
139
 
@@ -176,6 +165,14 @@ module Quke #:nodoc:
176
165
  end
177
166
  # rubocop:enable Metrics/MethodLength
178
167
 
168
+ def proxy_data(data)
169
+ data = {} if data.nil?
170
+ data.merge(
171
+ 'host' => (data['host'] || '').downcase.strip,
172
+ 'port' => (data['port'] || '0').to_s.downcase.strip.to_i
173
+ )
174
+ end
175
+
179
176
  def load_yml_data
180
177
  if File.exist? self.class.file_location
181
178
  # YAML.load_file returns false if the file exists but is empty. So
@@ -0,0 +1,292 @@
1
+ require 'quke/configuration'
2
+
3
+ module Quke #:nodoc:
4
+
5
+ # Helper class that manages the options, switches and capabilities for each of
6
+ # the different drivers.
7
+ class DriverConfiguration
8
+
9
+ # Access the instance of Quke::Configuration passed to this instance of
10
+ # Quke::DriverOptions when it was initialized.
11
+ attr_reader :config
12
+
13
+ # Instantiate an instance of Quke::DriverConfiguration.
14
+ #
15
+ # It expects an instance of Quke::Configuration which will be used
16
+ # internally to determine how to set the options it passes back to each of
17
+ # the drivers.
18
+ # to be used and any related options
19
+ def initialize(config)
20
+ @config = config
21
+ end
22
+
23
+ # The hash returned from this method is intended to used when initialising
24
+ # an instance of Capybara::Poltergeist::Driver.
25
+ #
26
+ # For example when initialising the driver like this
27
+ #
28
+ # Capybara::Poltergeist::Driver.new(app,
29
+ # {
30
+ # js_errors: true,
31
+ # timeout: 30,
32
+ # debug: false,
33
+ # phantomjs_options: [
34
+ # '--load-images=no',
35
+ # '--disk-cache=false',
36
+ # '--ignore-ssl-errors=yes',
37
+ # '--proxy=10.10.2.70:8080'
38
+ # ],
39
+ # inspector: true
40
+ # }
41
+ # )
42
+ #
43
+ # Rather than setting the options manually
44
+ # Quke::DriverConfiguration.poltergeist is intended to manage what they
45
+ # should be based on the properties of the Quke::Configuration instance its
46
+ # initialised with
47
+ #
48
+ # Capybara::Poltergeist::Driver.new(app, my_driver_config.poltergeist)
49
+ #
50
+ def poltergeist
51
+ {
52
+ # Javascript errors will get re-raised in our tests causing them to fail
53
+ js_errors: true,
54
+ # How long in seconds we'll wait for response when communicating with
55
+ # Phantomjs
56
+ timeout: 30,
57
+ # When true debug output will be logged to STDERR (a terminal thing!)
58
+ debug: false,
59
+ # Poltergeist can pass on options for configuring phantomjs
60
+ phantomjs_options: phantomjs,
61
+ # The internet told me to put this here (???)
62
+ inspector: true
63
+ }
64
+ end
65
+
66
+ # Returns an array used as part of the poltergeist settings, which are
67
+ # passed in when initialising a Capybara::Poltergeist::Driver.
68
+ #
69
+ # For example when initialising the driver like this
70
+ #
71
+ # Capybara::Poltergeist::Driver.new(app,
72
+ # {
73
+ # js_errors: true,
74
+ # timeout: 30,
75
+ # debug: false,
76
+ # phantomjs_options: [
77
+ # '--load-images=no',
78
+ # '--disk-cache=false',
79
+ # '--ignore-ssl-errors=yes',
80
+ # '--proxy=10.10.2.70:8080'
81
+ # ],
82
+ # inspector: true
83
+ # }
84
+ # )
85
+ #
86
+ # Rather than setting the +phantomjs_options:+ manually
87
+ # Quke::DriverConfiguration.phantomjs
88
+ # is intended to manage what they should be based on the properties of the
89
+ # Quke::Configuration instance its initialised with
90
+ #
91
+ # Capybara::Poltergeist::Driver.new(app,
92
+ # {
93
+ # js_errors: true,
94
+ # timeout: 30,
95
+ # debug: false,
96
+ # phantomjs_options: my_driver_config.phantomjs,
97
+ # inspector: true
98
+ # }
99
+ # )
100
+ #
101
+ def phantomjs
102
+ options = [
103
+ '--load-images=no',
104
+ '--disk-cache=false',
105
+ '--ignore-ssl-errors=yes'
106
+ ]
107
+ if config.use_proxy?
108
+ options.push("--proxy=#{config.proxy['host']}:#{config.proxy['port']}")
109
+ end
110
+ options
111
+ end
112
+
113
+ # Returns an array to be used in conjunction with the +:switches+ argument
114
+ # when initialising a Capybara::Selenium::Driver set for Chrome.
115
+ #
116
+ # For example when initialising the driver like this
117
+ #
118
+ # Capybara::Selenium::Driver.new(
119
+ # app,
120
+ # browser: :chrome,
121
+ # switches: ["--proxy-server=localhost:8080"]
122
+ # )
123
+ #
124
+ # Rather than setting the switches manually Quke::DriverConfiguration.chrome
125
+ # is intended to manage what they should be based on the properties of the
126
+ # Quke::Configuration instance its initialised with
127
+ #
128
+ # Capybara::Selenium::Driver.new(
129
+ # app,
130
+ # browser: :chrome,
131
+ # switches: my_driver_config.chrome
132
+ # )
133
+ #
134
+ def chrome
135
+ if config.use_proxy?
136
+ ["--proxy-server=#{config.proxy['host']}:#{config.proxy['port']}"]
137
+ else
138
+ []
139
+ end
140
+ end
141
+
142
+ # Returns an instance of Selenium::WebDriver::Remote::Capabilities to be
143
+ # used when registering an instance of Capybara::Selenium::Driver,
144
+ # configured to run using Firefox (the default).
145
+ #
146
+ # For example when initialising the driver like this
147
+ #
148
+ # my_profile = Selenium::WebDriver::Firefox::Profile.new
149
+ # my_profile.proxy = Selenium::WebDriver::Proxy.new(
150
+ # http: "10.10.2.70:8080",
151
+ # ssl: "10.10.2.70:8080"
152
+ # )
153
+ # Capybara::Selenium::Driver.new(
154
+ # app,
155
+ # profile: my_profile
156
+ # )
157
+ #
158
+ # You can instead call Quke::DriverConfiguration.firefox which will
159
+ # manage instantiating and setting up the
160
+ # Selenium::WebDriver::Firefox::Profile instance based on the
161
+ # properties of the Quke::Configuration instance its initialised with
162
+ #
163
+ # Capybara::Selenium::Driver.new(
164
+ # app,
165
+ # profile: my_driver_config.firefox
166
+ # )
167
+ #
168
+ # rubocop:disable Metrics/AbcSize
169
+ def firefox
170
+ profile = Selenium::WebDriver::Firefox::Profile.new
171
+
172
+ if config.use_proxy?
173
+ profile.proxy = Selenium::WebDriver::Proxy.new(
174
+ http: "#{config.proxy['host']}:#{config.proxy['port']}",
175
+ ssl: "#{config.proxy['host']}:#{config.proxy['port']}"
176
+ )
177
+ end
178
+
179
+ profile
180
+ end
181
+ # rubocop:enable Metrics/AbcSize
182
+
183
+ # Returns a string representing the url used when running tests via
184
+ # Browserstack[https://www.browserstack.com/] or nil.
185
+ #
186
+ # It will contain the username and auth_key set in the +.config.yml+, else
187
+ # if +username+ is blank it will return nil.
188
+ #
189
+ # An example return value
190
+ #
191
+ # "http://jdoe:123456789ABCDE@hub.browserstack.com/wd/hub"
192
+ #
193
+ # It is used when registering the driver with Capybara. So instead of this
194
+ #
195
+ # Capybara::Selenium::Driver.new(
196
+ # app,
197
+ # browser: :remote,
198
+ # url: 'http://jdoe:123456789ABCDE@hub.browserstack.com/wd/hub',
199
+ # desired_capabilities: my_capabilites
200
+ # )
201
+ #
202
+ # You can call +browserstack_url+ to get the url to use
203
+ #
204
+ # Capybara::Selenium::Driver.new(
205
+ # app,
206
+ # browser: :remote,
207
+ # url: my_driver_config.browserstack_url,
208
+ # desired_capabilities: my_capabilites
209
+ # )
210
+ #
211
+ def browserstack_url
212
+ username = config.browserstack['username']
213
+ key = config.browserstack['auth_key']
214
+ return "http://#{username}:#{key}@hub.browserstack.com/wd/hub" unless username == ''
215
+ end
216
+
217
+ # Returns an instance of Selenium::WebDriver::Remote::Capabilities to be
218
+ # used when registering an instance of Capybara::Selenium::Driver,
219
+ # configured to run using the Browserstack[https://www.browserstack.com/]
220
+ # service.
221
+ #
222
+ # For example when initialising the driver like this
223
+ #
224
+ # my_capabilites = Selenium::WebDriver::Remote::Capabilities.new
225
+ # my_capabilites['build'] = my_config.browserstack['build']
226
+ # # ... set rest of capabilities
227
+ # Capybara::Selenium::Driver.new(
228
+ # app,
229
+ # browser: :remote,
230
+ # url: 'http://jdoe:123456789ABCDE@hub.browserstack.com/wd/hub',
231
+ # desired_capabilities: my_capabilites
232
+ # )
233
+ #
234
+ # You can instead call Quke::DriverConfiguration.browserstack which will
235
+ # manage instantiating and setting up the
236
+ # Selenium::WebDriver::Remote::Capabilities instance based on the
237
+ # properties of the Quke::Configuration instance its initialised with
238
+ #
239
+ # Capybara::Selenium::Driver.new(
240
+ # app,
241
+ # browser: :remote,
242
+ # url: my_driver_config.browserstack_url,
243
+ # desired_capabilities: my_driver_config.browserstack
244
+ # )
245
+ #
246
+ # For further reference on browserstack capabilities
247
+ # https://www.browserstack.com/automate/capabilities
248
+ # https://www.browserstack.com/automate/ruby#configure-capabilities
249
+ # rubocop:disable Metrics/MethodLength
250
+ # rubocop:disable Metrics/AbcSize
251
+ def browserstack
252
+ capabilities = Selenium::WebDriver::Remote::Capabilities.new
253
+
254
+ capabilities['build'] = config.browserstack['build']
255
+ capabilities['project'] = config.browserstack['project']
256
+ capabilities['name'] = config.browserstack['name']
257
+
258
+ # This and the following section are essentially diametric; you set one
259
+ # or the other but not both. Some examples seem to put logic in place to
260
+ # test the options passed in and then set the capabilities accordingly,
261
+ # however Browserstack handles this and has what will happen documented
262
+ # https://www.browserstack.com/automate/capabilities#capabilities-parameter-override
263
+ capabilities['platform'] = config.browserstack['platform']
264
+ capabilities['browserName'] = config.browserstack['browserName']
265
+ capabilities['version'] = config.browserstack['version']
266
+ capabilities['device'] = config.browserstack['device']
267
+
268
+ capabilities['os'] = config.browserstack['os']
269
+ capabilities['os_version'] = config.browserstack['os_version']
270
+ capabilities['browser'] = config.browserstack['browser']
271
+ capabilities['browser_version'] = config.browserstack['browser_version']
272
+ capabilities['resolution'] = config.browserstack['resolution']
273
+ # -----
274
+
275
+ # This is not listed on the general capabilities page but is here
276
+ # https://www.browserstack.com/automate/ruby#self-signed-certificates
277
+ capabilities['acceptSslCerts'] = config.browserstack['acceptSslCerts']
278
+
279
+ capabilities['browserstack.debug'] = config.browserstack['debug']
280
+ capabilities['browserstack.video'] = config.browserstack['video']
281
+
282
+ # At this point Quke does not support local testing so we specifically
283
+ # tell Browserstack we're not doing this
284
+ capabilities['browserstack.local'] = 'false'
285
+ capabilities
286
+ end
287
+ # rubocop:enable Metrics/AbcSize
288
+ # rubocop:enable Metrics/MethodLength
289
+
290
+ end
291
+
292
+ end
@@ -8,30 +8,29 @@ module Quke #:nodoc:
8
8
  # Capybara.
9
9
  class DriverRegistration
10
10
 
11
- # Access the instance of Quke::Configuration passed to this instance of
12
- # Quke::DriverRegistration when it was initialized.
11
+ # Access the instance of Quke::DriverConfiguration passed to this instance
12
+ # of Quke::DriverRegistration when it was initialized.
13
13
  attr_reader :config
14
14
 
15
15
  # Instantiate an instance of Quke::DriverRegistration.
16
16
  #
17
- # It expects an instance of Quke::Configuration which will detail the driver
18
- # to be used and any related options
17
+ # It expects an instance of Quke::DriverConfiguration which will detail the
18
+ # driver to be used and any related options
19
19
  def initialize(config)
20
20
  @config = config
21
21
  end
22
22
 
23
- # When called registers the driver specified in the instance of
24
- # Quke::Configuration currently being used by Quke.
25
- def register
26
- case @config.driver
23
+ # When called registers with Capybara the driver specified.
24
+ def register(driver)
25
+ case driver
27
26
  when 'firefox'
28
27
  firefox
29
28
  when 'chrome'
30
29
  chrome
31
30
  when 'browserstack'
32
- browserstack(@config.browserstack)
31
+ browserstack
33
32
  else
34
- phantomjs(@config.poltergeist_options)
33
+ phantomjs
35
34
  end
36
35
  end
37
36
 
@@ -43,7 +42,7 @@ module Quke #:nodoc:
43
42
  # it as :phantomjs. There are a number of options for how to configure
44
43
  # poltergeist, and we can even pass on options to phantomjs to configure how
45
44
  # it runs.
46
- def phantomjs(options = {})
45
+ def phantomjs
47
46
  Capybara.register_driver :phantomjs do |app|
48
47
  # We ignore the next line (and those like it in the subsequent methods)
49
48
  # from code coverage because we never actually execute them from Quke.
@@ -52,7 +51,7 @@ module Quke #:nodoc:
52
51
  # called, all we're doing here is telling it what block (code) to
53
52
  # execute at that time.
54
53
  # :simplecov_ignore:
55
- Capybara::Poltergeist::Driver.new(app, options)
54
+ Capybara::Poltergeist::Driver.new(app, config.poltergeist)
56
55
  # :simplecov_ignore:
57
56
  end
58
57
  :phantomjs
@@ -60,12 +59,15 @@ module Quke #:nodoc:
60
59
 
61
60
  # Register the selenium driver with capybara. By default selinium is setup
62
61
  # to work with firefox hence we refer to it as :firefox
63
- #
64
- # N.B. options is not currently used but maybe in the future.
65
- def firefox(_options = {})
62
+ def firefox
63
+ # For future reference configuring Firefox via Selenium appears to be done
64
+ # via the profile argument, and a Selenium::WebDriver::Firefox::Profile
65
+ # object.
66
+ # https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings#firefox
67
+ # http://www.rubydoc.info/gems/selenium-webdriver/0.0.28/Selenium/WebDriver/Firefox/Profile
66
68
  Capybara.register_driver :firefox do |app|
67
69
  # :simplecov_ignore:
68
- Capybara::Selenium::Driver.new(app)
70
+ Capybara::Selenium::Driver.new(app, profile: config.firefox)
69
71
  # :simplecov_ignore:
70
72
  end
71
73
  :firefox
@@ -73,74 +75,42 @@ module Quke #:nodoc:
73
75
 
74
76
  # Register the selenium driver again, only this time we are configuring it
75
77
  # to work with chrome.
76
- #
77
- # N.B. options is not currently used but maybe in the future.
78
- def chrome(_options = {})
78
+ def chrome
79
+ # For future reference configuring Chrome via Selenium appears to be done
80
+ # use the switches argument, which I understand is essentially passed by
81
+ # Capybara to Selenium-webdriver, which in turn passes it to chromium
82
+ # https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings#chrome
83
+ # http://peter.sh/experiments/chromium-command-line-switches/
79
84
  Capybara.register_driver :chrome do |app|
80
85
  # :simplecov_ignore:
81
- Capybara::Selenium::Driver.new(app, browser: :chrome)
86
+ Capybara::Selenium::Driver.new(
87
+ app,
88
+ browser: :chrome,
89
+ switches: config.chrome
90
+ )
82
91
  # :simplecov_ignore:
83
92
  end
84
93
  :chrome
85
94
  end
86
95
 
87
- # Register a browserstack driver. Essentially this the selenium driver but
88
- # configured to run remotely using the Browserstack automate service.
89
- # As a minimum the options must contain a username and key in order to
90
- # authenticate with Browserstack.
91
- # rubocop:disable Metrics/MethodLength
92
- def browserstack(options = {})
96
+ # Register a browserstack driver. Essentially this is the selenium driver
97
+ # but configured to run remotely using the Browserstack automate service.
98
+ # As a minimum the +.config.yml+ must contain a username and auth_key in
99
+ # order to authenticate with Browserstack.
100
+ def browserstack
93
101
  Capybara.register_driver :browserstack do |app|
94
102
  # :simplecov_ignore:
95
- username = options['username']
96
- key = options['auth_key']
97
- url = "http://#{username}:#{key}@hub.browserstack.com/wd/hub"
98
-
99
103
  Capybara::Selenium::Driver.new(
100
104
  app,
101
105
  browser: :remote,
102
- url: url,
103
- desired_capabilities: browserstack_capabilities(options)
106
+ url: config.browserstack_url,
107
+ desired_capabilities: config.browserstack
104
108
  )
105
109
  # :simplecov_ignore:
106
110
  end
107
111
  :browserstack
108
112
  end
109
113
 
110
- # rubocop:disable Metrics/AbcSize
111
- def browserstack_capabilities(options = {})
112
- capabilities = Selenium::WebDriver::Remote::Capabilities.new
113
-
114
- capabilities['build'] = options['build']
115
- capabilities['project'] = options['project']
116
- capabilities['name'] = options['name']
117
-
118
- # This and the following section are essentially diametric; you set one
119
- # or the other but not both. Some examples seen put logic in place to
120
- # test the options passed in and then set the capabilities accordingly,
121
- # however Browserstack handles this and has what will happen documented
122
- # https://www.browserstack.com/automate/capabilities#capabilities-parameter-override
123
- capabilities['platform'] = options['platform']
124
- capabilities['browserName'] = options['browserName']
125
- capabilities['version'] = options['version']
126
-
127
- capabilities['os'] = options['os']
128
- capabilities['os_version'] = options['os_version']
129
- capabilities['browser'] = options['browser']
130
- capabilities['browser_version'] = options['browser_version']
131
- # -----
132
-
133
- capabilities['browserstack.debug'] = options['debug']
134
- capabilities['browserstack.video'] = options['video']
135
-
136
- # At this point Quke does not support local testing so we specifically
137
- # tell Browserstack we're not doing this
138
- capabilities['browserstack.local'] = 'false'
139
- capabilities
140
- end
141
- # rubocop:enable Metrics/AbcSize
142
- # rubocop:enable Metrics/MethodLength
143
-
144
114
  end
145
115
 
146
116
  end
data/lib/quke/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Quke #:nodoc:
2
- VERSION = '0.2.5'.freeze
2
+ VERSION = '0.2.6'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quke
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alan Cruikshanks
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-28 00:00:00.000000000 Z
11
+ date: 2016-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -252,6 +252,7 @@ files:
252
252
  - lib/quke.rb
253
253
  - lib/quke/configuration.rb
254
254
  - lib/quke/cuke_runner.rb
255
+ - lib/quke/driver_configuration.rb
255
256
  - lib/quke/driver_registration.rb
256
257
  - lib/quke/version.rb
257
258
  - quke.gemspec