sauce_bindings 1.1.0 → 1.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.
@@ -4,11 +4,9 @@ require 'sauce_bindings'
4
4
  require 'rspec'
5
5
 
6
6
  describe 'Basic Options' do
7
- before { WebMock.allow_net_connect! }
8
-
9
7
  it 'creates session' do
10
8
  # 1. Create a SauceOptions instance with the 3 primary parameters
11
- sauce_options = SauceBindings::Options.firefox(browser_version: '73.0',
9
+ sauce_options = SauceBindings::Options.firefox(browser_version: '88.0',
12
10
  platform_name: 'Windows 8')
13
11
 
14
12
  # 2. Create Session object with SauceOptions object instance
@@ -4,8 +4,6 @@ require 'sauce_bindings'
4
4
  require 'rspec'
5
5
 
6
6
  describe 'Browser Options' do
7
- before { WebMock.allow_net_connect! }
8
-
9
7
  it 'creates session' do
10
8
  # 1. Create Selenium Browser Options instance
11
9
  browser_options = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
@@ -4,8 +4,6 @@ require 'sauce_bindings'
4
4
  require 'rspec'
5
5
 
6
6
  describe 'Create Session' do
7
- before { WebMock.allow_net_connect! }
8
-
9
7
  it 'starts session' do
10
8
  # 1. Create Session object with the defaults
11
9
  session = SauceBindings::Session.new
@@ -4,8 +4,6 @@ require 'sauce_bindings'
4
4
  require 'rspec'
5
5
 
6
6
  describe 'Create Session' do
7
- before { WebMock.allow_net_connect! }
8
-
9
7
  it 'starts session' do
10
8
  # 1. Create Session object with the desired Data Center
11
9
  session = SauceBindings::Session.new(data_center: :EU_CENTRAL)
@@ -4,8 +4,6 @@ require 'sauce_bindings'
4
4
  require 'rspec'
5
5
 
6
6
  describe 'Sauce Options' do
7
- before { WebMock.allow_net_connect! }
8
-
9
7
  it 'creates session' do
10
8
  # 1. Create a SauceOptions instance with Sauce Labs Specific Options
11
9
  sauce_options = SauceBindings::Options.firefox(extended_debugging: true,
@@ -8,33 +8,28 @@ module SauceBindings
8
8
  before { WebMock.allow_net_connect! }
9
9
 
10
10
  it 'defaults to US West' do
11
- session = Session.new
12
- driver = session.start
11
+ @session = Session.new
12
+ driver = @session.start
13
13
 
14
14
  expect(driver).not_to be_nil
15
- expect(session.url).to include('us-west-1')
16
- session.stop(true)
15
+ expect(@session.url).to include('us-west-1')
17
16
  end
18
17
 
19
18
  it 'executes on US East' do
20
- options = Options.new(platform_name: 'Linux')
21
- session = Session.new(options, data_center: :US_EAST)
22
- driver = session.start
19
+ options = Options.chrome(platform_name: 'Linux')
20
+ @session = Session.new(options, data_center: :US_EAST)
21
+ driver = @session.start
23
22
 
24
23
  expect(driver).not_to be_nil
25
- expect(session.url).to include('us-east-1')
26
-
27
- session.stop(true)
24
+ expect(@session.url).to include('us-east-1')
28
25
  end
29
26
 
30
27
  it 'executes on EU Central' do
31
- session = Session.new(data_center: :EU_CENTRAL)
32
- driver = session.start
28
+ @session = Session.new(data_center: :EU_CENTRAL)
29
+ driver = @session.start
33
30
 
34
31
  expect(driver).not_to be_nil
35
- expect(session.url).to include('eu-central-1')
36
-
37
- session.stop(true)
32
+ expect(@session.url).to include('eu-central-1')
38
33
  end
39
34
  end
40
35
  end
data/spec/options.yml CHANGED
@@ -7,21 +7,17 @@ example_values:
7
7
  set_window_rect: true
8
8
  unhandled_prompt_behavior: "accept"
9
9
  strict_file_interactability: true
10
- timeouts:
11
- implicit: 1
12
- page_load: 59
13
- script: 29
14
- avoid_proxy: true
10
+ implicit_wait_timeout: 1
11
+ page_load_timeout: 59
12
+ script_timeout: 29
15
13
  build: 'Sample Build Name'
16
- capture_performance: true
17
- chromedriver_version: '71'
18
14
  command_timeout: 2
19
15
  custom_data:
20
16
  foo: 'foo'
21
17
  bar: 'bar'
22
18
  extended_debugging: true
19
+ geckodriver_version: '0.23'
23
20
  idle_timeout: 3
24
- iedriver_version: '3.141.0'
25
21
  max_duration: 300
26
22
  name: 'Sample Test Name'
27
23
  parent_tunnel: 'Mommy'
data/spec/spec_helper.rb CHANGED
@@ -8,4 +8,8 @@ RSpec.configure do |config|
8
8
  config.expect_with :rspec do |c|
9
9
  c.syntax = :expect
10
10
  end
11
+
12
+ config.after do |example|
13
+ @session&.stop(!example.exception)
14
+ end
11
15
  end
@@ -17,10 +17,14 @@ module SauceBindings
17
17
  'sauce:options': {build: 'TEMP BUILD: 11'}}
18
18
  end
19
19
 
20
- def expect_request(body: nil, endpoint: nil)
21
- body = (body || {desiredCapabilities: default_capabilities,
22
- capabilities: {firstMatch: [default_capabilities]}}).to_json
23
- endpoint ||= 'https://ondemand.us-west-1.saucelabs.com/wd/hub/session'
20
+ def expect_request
21
+ se3 = {desiredCapabilities: default_capabilities,
22
+ capabilities: {firstMatch: [default_capabilities]}}.to_json
23
+ se4 = {capabilities: {alwaysMatch: default_capabilities}}.to_json
24
+
25
+ body = Selenium::WebDriver::VERSION[0] == '3' ? se3 : se4
26
+
27
+ endpoint = 'https://ondemand.us-west-1.saucelabs.com/wd/hub/session'
24
28
  stub_request(:post, endpoint).with(body: body).to_return(valid_response)
25
29
  end
26
30
 
@@ -0,0 +1,472 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module SauceBindings
6
+ describe Options do
7
+ before do
8
+ allow(ENV).to receive(:[]).with('BUILD_TAG').and_return('')
9
+ allow(ENV).to receive(:[]).with('BUILD_NAME').and_return('TEMP BUILD')
10
+ allow(ENV).to receive(:[]).with('BUILD_NUMBER').and_return('11')
11
+ end
12
+
13
+ describe '#new' do
14
+ let(:default_options) do
15
+ {'browserName' => 'chrome',
16
+ 'browserVersion' => 'latest',
17
+ 'platformName' => 'Windows 10',
18
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'}}
19
+ end
20
+
21
+ it 'uses latest Chrome version on Windows 10 by default' do
22
+ options = Options.new
23
+
24
+ expect(options.browser_name).to eq 'chrome'
25
+ expect(options.browser_version).to eq 'latest'
26
+ expect(options.platform_name).to eq 'Windows 10'
27
+ end
28
+
29
+ it 'accepts provided values for browser, browser version and platform name' do
30
+ options = Options.new(browser_name: 'firefox',
31
+ browser_version: '123',
32
+ platform_name: 'Mac')
33
+
34
+ expect(options.browser_name).to eq 'firefox'
35
+ expect(options.browser_version).to eq '123'
36
+ expect(options.platform_name).to eq 'Mac'
37
+ end
38
+
39
+ it 'accepts other w3c values' do
40
+ proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
41
+ timeouts = {implicit: 1,
42
+ page_load: 59,
43
+ script: 29}
44
+ options = Options.new(accept_insecure_certs: true,
45
+ page_load_strategy: 'eager',
46
+ proxy: proxy,
47
+ set_window_rect: true,
48
+ unhandled_prompt_behavior: 'accept',
49
+ strict_file_interactability: true,
50
+ timeouts: timeouts)
51
+
52
+ expect(options.accept_insecure_certs).to eq true
53
+ expect(options.page_load_strategy).to eq 'eager'
54
+ expect(options.proxy).to eq proxy
55
+ expect(options.set_window_rect).to eq true
56
+ expect(options.unhandled_prompt_behavior).to eq 'accept'
57
+ expect(options.strict_file_interactability).to eq true
58
+ expect(options.timeouts).to eq timeouts
59
+ end
60
+
61
+ it 'accepts Sauce Labs specific settings' do
62
+ custom_data = {foo: 'foo',
63
+ bar: 'bar'}
64
+ prerun = {executable: 'http://url.to/your/executable.exe',
65
+ args: ['--silent', '-a', '-q'],
66
+ background: false,
67
+ timeout: 120}
68
+ tags = %w[foo bar foobar]
69
+ sauce_options = {
70
+ avoid_proxy: true,
71
+ build: 'Sample Build Name',
72
+ capture_performance: true,
73
+ chromedriver_version: '71',
74
+ command_timeout: 2,
75
+ custom_data: custom_data,
76
+ extended_debugging: true,
77
+ idle_timeout: 3,
78
+ iedriver_version: '3.141.0',
79
+ max_duration: 300,
80
+ name: 'Sample Test Name',
81
+ parent_tunnel: 'Mommy',
82
+ prerun: prerun,
83
+ priority: 0,
84
+ public: 'team',
85
+ record_logs: false,
86
+ record_screenshots: false,
87
+ record_video: false,
88
+ screen_resolution: '10x10',
89
+ selenium_version: '3.141.59',
90
+ tags: tags,
91
+ time_zone: 'San Francisco',
92
+ tunnel_identifier: 'tunnelname',
93
+ video_upload_on_pass: false
94
+ }
95
+
96
+ options = Options.new(**sauce_options)
97
+
98
+ expect(options.avoid_proxy).to eq true
99
+ expect(options.build).to eq 'Sample Build Name'
100
+ expect(options.capture_performance).to eq true
101
+ expect(options.chromedriver_version).to eq '71'
102
+ expect(options.command_timeout).to eq 2
103
+ expect(options.custom_data).to eq custom_data
104
+ expect(options.extended_debugging).to eq true
105
+ expect(options.idle_timeout).to eq 3
106
+ expect(options.iedriver_version).to eq '3.141.0'
107
+ expect(options.max_duration).to eq 300
108
+ expect(options.name).to eq 'Sample Test Name'
109
+ expect(options.parent_tunnel).to eq 'Mommy'
110
+ expect(options.prerun).to eq prerun
111
+ expect(options.priority).to eq 0
112
+ expect(options.public).to eq 'team'
113
+ expect(options.record_logs).to eq false
114
+ expect(options.record_screenshots).to eq false
115
+ expect(options.record_video).to eq false
116
+ expect(options.screen_resolution).to eq '10x10'
117
+ expect(options.selenium_version).to eq '3.141.59'
118
+ expect(options.tags).to eq tags
119
+ expect(options.time_zone).to eq 'San Francisco'
120
+ expect(options.tunnel_identifier).to eq 'tunnelname'
121
+ expect(options.video_upload_on_pass).to eq false
122
+ end
123
+
124
+ it 'accepts Selenium Capabilities and overrides default browser' do
125
+ caps = Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true,
126
+ page_load_strategy: 'eager')
127
+ options = Options.new(selenium_options: caps)
128
+
129
+ expect(options.browser_name).to eq 'firefox'
130
+ expect(options.accept_insecure_certs).to eq true
131
+ expect(options.page_load_strategy).to eq 'eager'
132
+ end
133
+
134
+ it 'accepts Selenium Options and overrides default browser' do
135
+ browser_opts = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
136
+ options = Options.new(selenium_options: browser_opts)
137
+
138
+ expect(options.browser_name).to eq 'firefox'
139
+ expect(options.selenium_options['moz:firefoxOptions']).to eq('args' => ['--foo'])
140
+ end
141
+
142
+ it 'accepts Selenium Capabilities and Options class instances' do
143
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(accept_insecure_certs: true,
144
+ page_load_strategy: 'eager')
145
+ browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['--foo'])
146
+ options = Options.new(selenium_options: [caps, browser_opts])
147
+
148
+ expect(options.page_load_strategy).to eq 'eager'
149
+ expect(options.accept_insecure_certs).to eq true
150
+ expect(options.selenium_options['goog:chromeOptions']).to eq('args' => ['--foo'])
151
+ end
152
+
153
+ it 'accepts W3C, Sauce, Browser Options and Capabilities at the same time' do
154
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(page_load_strategy: 'eager')
155
+ browser_opts = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
156
+
157
+ options = Options.new(browser_version: '77',
158
+ accept_insecure_certs: true,
159
+ command_timeout: 2,
160
+ time_zone: 'Alaska',
161
+ selenium_options: [caps, browser_opts])
162
+
163
+ expect(options.browser_name).to eq 'firefox'
164
+ expect(options.browser_version).to eq '77'
165
+ expect(options.platform_name).to eq 'Windows 10'
166
+ expect(options.accept_insecure_certs).to eq true
167
+ expect(options.command_timeout).to eq 2
168
+ expect(options.time_zone).to eq 'Alaska'
169
+ expect(options.page_load_strategy).to eq 'eager'
170
+
171
+ expect(options.selenium_options['moz:firefoxOptions']).to eq('args' => ['--foo'])
172
+ end
173
+
174
+ it 'creates a default build value' do
175
+ options = Options.new
176
+ expect(options.build).to eq 'TEMP BUILD: 11'
177
+ end
178
+
179
+ it 'raises ArgumentError if parameter is not recognized as valid' do
180
+ expect { Options.new(foo: 'bar') }.to raise_exception(ArgumentError)
181
+ end
182
+ end
183
+
184
+ describe '#accessors' do
185
+ it 'parses w3c values' do
186
+ proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
187
+ timeouts = {implicit: 1,
188
+ page_load: 59,
189
+ script: 29}
190
+
191
+ options = Options.new
192
+
193
+ options.browser_name = 'firefox'
194
+ options.browser_version = '7'
195
+ options.platform_name = 'macOS 10.14'
196
+ options.accept_insecure_certs = true
197
+ options.page_load_strategy = 'eager'
198
+ options.proxy = proxy
199
+ options.set_window_rect = true
200
+ options.unhandled_prompt_behavior = 'accept'
201
+ options.strict_file_interactability = true
202
+ options.timeouts = timeouts
203
+
204
+ expect(options.browser_name).to eq 'firefox'
205
+ expect(options.browser_version).to eq '7'
206
+ expect(options.platform_name).to eq 'macOS 10.14'
207
+ expect(options.accept_insecure_certs).to eq true
208
+ expect(options.page_load_strategy).to eq 'eager'
209
+ expect(options.proxy).to eq proxy
210
+ expect(options.set_window_rect).to eq true
211
+ expect(options.unhandled_prompt_behavior).to eq 'accept'
212
+ expect(options.strict_file_interactability).to eq true
213
+ expect(options.timeouts).to eq timeouts
214
+ end
215
+
216
+ it 'parses Sauce values' do
217
+ custom_data = {foo: 'foo',
218
+ bar: 'bar'}
219
+ prerun = {executable: 'http://url.to/your/executable.exe',
220
+ args: ['--silent', '-a', '-q'],
221
+ background: false,
222
+ timeout: 120}
223
+ tags = %w[foo bar foobar]
224
+
225
+ options = Options.new
226
+
227
+ options.avoid_proxy = true
228
+ options.build = 'Sample Build Name'
229
+ options.capture_performance = true
230
+ options.chromedriver_version = '71'
231
+ options.command_timeout = 2
232
+ options.custom_data = custom_data
233
+ options.extended_debugging = true
234
+ options.idle_timeout = 3
235
+ options.iedriver_version = '3.141.0'
236
+ options.max_duration = 300
237
+ options.name = 'Sample Test Name'
238
+ options.parent_tunnel = 'Mommy'
239
+ options.prerun = prerun
240
+ options.priority = 0
241
+ options.public = 'team'
242
+ options.record_logs = false
243
+ options.record_screenshots = false
244
+ options.record_video = false
245
+ options.screen_resolution = '10x10'
246
+ options.selenium_version = '3.141.59'
247
+ options.tags = tags
248
+ options.time_zone = 'San Francisco'
249
+ options.tunnel_identifier = 'tunnelname'
250
+ options.video_upload_on_pass = false
251
+
252
+ expect(options.avoid_proxy).to eq true
253
+ expect(options.build).to eq 'Sample Build Name'
254
+ expect(options.capture_performance).to eq true
255
+ expect(options.chromedriver_version).to eq '71'
256
+ expect(options.command_timeout).to eq 2
257
+ expect(options.custom_data).to eq custom_data
258
+ expect(options.extended_debugging).to eq true
259
+ expect(options.idle_timeout).to eq 3
260
+ expect(options.iedriver_version).to eq '3.141.0'
261
+ expect(options.max_duration).to eq 300
262
+ expect(options.name).to eq 'Sample Test Name'
263
+ expect(options.parent_tunnel).to eq 'Mommy'
264
+ expect(options.prerun).to eq prerun
265
+ expect(options.priority).to eq 0
266
+ expect(options.public).to eq 'team'
267
+ expect(options.record_logs).to eq false
268
+ expect(options.record_screenshots).to eq false
269
+ expect(options.record_video).to eq false
270
+ expect(options.screen_resolution).to eq '10x10'
271
+ expect(options.selenium_version).to eq '3.141.59'
272
+ expect(options.tags).to eq tags
273
+ expect(options.time_zone).to eq 'San Francisco'
274
+ expect(options.tunnel_identifier).to eq 'tunnelname'
275
+ expect(options.video_upload_on_pass).to eq false
276
+ end
277
+ end
278
+
279
+ describe '#merge_capabilities' do
280
+ it 'loads options from configuration' do
281
+ timeouts = {implicit: 1,
282
+ page_load: 59,
283
+ script: 29}
284
+ custom_data = {foo: 'foo',
285
+ bar: 'bar'}
286
+ prerun = {executable: 'http://url.to/your/executable.exe',
287
+ args: ['--silent', '-a', '-q'],
288
+ background: false,
289
+ timeout: 120}
290
+ tags = %w[foo bar foobar]
291
+
292
+ options = Options.new
293
+ yaml = YAML.load_file('spec/deprecated_options.yml')
294
+ options.merge_capabilities(yaml['example_values'])
295
+
296
+ expect(options.browser_name).to eq 'firefox'
297
+ expect(options.browser_version).to eq '123'
298
+ expect(options.platform_name).to eq 'Mac'
299
+ expect(options.accept_insecure_certs).to eq true
300
+ expect(options.page_load_strategy).to eq 'eager'
301
+ expect(options.set_window_rect).to eq true
302
+ expect(options.unhandled_prompt_behavior).to eq 'accept'
303
+ expect(options.strict_file_interactability).to eq true
304
+ expect(options.timeouts).to eq timeouts
305
+ expect(options.avoid_proxy).to eq true
306
+ expect(options.build).to eq 'Sample Build Name'
307
+ expect(options.capture_performance).to eq true
308
+ expect(options.chromedriver_version).to eq '71'
309
+ expect(options.command_timeout).to eq 2
310
+ expect(options.custom_data).to eq custom_data
311
+ expect(options.extended_debugging).to eq true
312
+ expect(options.idle_timeout).to eq 3
313
+ expect(options.iedriver_version).to eq '3.141.0'
314
+ expect(options.max_duration).to eq 300
315
+ expect(options.name).to eq 'Sample Test Name'
316
+ expect(options.parent_tunnel).to eq 'Mommy'
317
+ expect(options.prerun).to eq prerun
318
+ expect(options.priority).to eq 0
319
+ expect(options.public).to eq 'team'
320
+ expect(options.record_logs).to eq false
321
+ expect(options.record_screenshots).to eq false
322
+ expect(options.record_video).to eq false
323
+ expect(options.screen_resolution).to eq '10x10'
324
+ expect(options.selenium_version).to eq '3.141.59'
325
+ expect(options.tags).to eq tags
326
+ expect(options.time_zone).to eq 'San Francisco'
327
+ expect(options.tunnel_identifier).to eq 'tunnelname'
328
+ expect(options.video_upload_on_pass).to eq false
329
+ end
330
+
331
+ it 'raises exception if value not recognized' do
332
+ options = Options.new
333
+ yaml = YAML.load_file('spec/deprecated_options.yml')
334
+
335
+ msg = 'foo is not a valid parameter for Options class'
336
+ expect { options.merge_capabilities(yaml['invalid_option']) }.to raise_exception(ArgumentError, msg)
337
+ end
338
+ end
339
+
340
+ describe '#capabilities' do
341
+ it 'correctly generates capabilities for w3c values' do
342
+ proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
343
+ timeouts = {implicit: 1,
344
+ page_load: 59,
345
+ script: 29}
346
+
347
+ options = Options.new(browser_name: 'firefox',
348
+ platform_name: 'Mac',
349
+ accept_insecure_certs: true,
350
+ page_load_strategy: 'eager',
351
+ proxy: proxy,
352
+ set_window_rect: true,
353
+ unhandled_prompt_behavior: 'accept',
354
+ strict_file_interactability: true,
355
+ timeouts: timeouts)
356
+
357
+ proxy_type = Selenium::WebDriver::VERSION[0] == '3' ? 'MANUAL' : 'manual'
358
+
359
+ expect(options.capabilities).to eq('browserName' => 'firefox',
360
+ 'browserVersion' => 'latest',
361
+ 'platformName' => 'Mac',
362
+ 'acceptInsecureCerts' => true,
363
+ 'pageLoadStrategy' => 'eager',
364
+ 'proxy' => {'proxyType' => proxy_type, 'sslProxy' => 'foo'},
365
+ 'setWindowRect' => true,
366
+ 'unhandledPromptBehavior' => 'accept',
367
+ 'strictFileInteractability' => true,
368
+ 'timeouts' => {'implicit' => 1,
369
+ 'pageLoad' => 59,
370
+ 'script' => 29},
371
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'})
372
+ end
373
+
374
+ it 'correctly generates capabilities for sauce values' do
375
+ custom_data = {foo: 'foo',
376
+ bar: 'bar'}
377
+ prerun = {executable: 'http://url.to/your/executable.exe',
378
+ args: ['--silent', '-a', '-q'],
379
+ background: false,
380
+ timeout: 120}
381
+ tags = %w[foo bar foobar]
382
+ sauce_options = {avoid_proxy: true,
383
+ build: 'Sample Build Name',
384
+ capture_performance: true,
385
+ chromedriver_version: '71',
386
+ command_timeout: 2,
387
+ custom_data: custom_data,
388
+ extended_debugging: true,
389
+ idle_timeout: 3,
390
+ iedriver_version: '3.141.0',
391
+ max_duration: 300,
392
+ name: 'Sample Test Name',
393
+ parent_tunnel: 'Mommy',
394
+ prerun: prerun,
395
+ priority: 0,
396
+ public: 'team',
397
+ record_logs: false,
398
+ record_screenshots: false,
399
+ record_video: false,
400
+ screen_resolution: '10x10',
401
+ selenium_version: '3.141.59',
402
+ tags: tags,
403
+ time_zone: 'San Francisco',
404
+ tunnel_identifier: 'tunnelname',
405
+ video_upload_on_pass: false}
406
+
407
+ options = Options.new(**sauce_options)
408
+
409
+ prerun_caps = {'executable' => 'http://url.to/your/executable.exe',
410
+ 'args' => ['--silent', '-a', '-q'],
411
+ 'background' => false,
412
+ 'timeout' => 120}
413
+
414
+ expect(options.capabilities).to eq('browserName' => 'chrome',
415
+ 'browserVersion' => 'latest',
416
+ 'platformName' => 'Windows 10',
417
+ 'sauce:options' => {'build' => 'Sample Build Name',
418
+ 'avoidProxy' => true,
419
+ 'capturePerformance' => true,
420
+ 'chromedriverVersion' => '71',
421
+ 'commandTimeout' => 2,
422
+ 'customData' => {'foo' => 'foo',
423
+ 'bar' => 'bar'},
424
+ 'extendedDebugging' => true,
425
+ 'idleTimeout' => 3,
426
+ 'iedriverVersion' => '3.141.0',
427
+ 'maxDuration' => 300,
428
+ 'name' => 'Sample Test Name',
429
+ 'parentTunnel' => 'Mommy',
430
+ 'prerun' => prerun_caps,
431
+ 'priority' => 0,
432
+ 'public' => 'team',
433
+ 'recordLogs' => false,
434
+ 'recordScreenshots' => false,
435
+ 'recordVideo' => false,
436
+ 'screenResolution' => '10x10',
437
+ 'seleniumVersion' => '3.141.59',
438
+ 'tags' => %w[foo bar foobar],
439
+ 'timeZone' => 'San Francisco',
440
+ 'tunnelIdentifier' => 'tunnelname',
441
+ 'videoUploadOnPass' => false})
442
+ end
443
+
444
+ it 'correctly generates capabilities for selenium object values' do
445
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(accept_insecure_certs: true,
446
+ page_load_strategy: 'eager')
447
+ browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['--foo'])
448
+ options = Options.new(selenium_options: [caps, browser_opts])
449
+
450
+ jwp_defaults = {'cssSelectorsEnabled' => true,
451
+ 'javascriptEnabled' => true,
452
+ 'nativeEvents' => false,
453
+ 'platform' => 'ANY',
454
+ 'rotatable' => false,
455
+ 'takesScreenshot' => false,
456
+ 'version' => ''}
457
+
458
+ expected_caps = {'browserName' => 'chrome',
459
+ 'browserVersion' => 'latest',
460
+ 'platformName' => 'Windows 10',
461
+ 'acceptInsecureCerts' => true,
462
+ 'pageLoadStrategy' => 'eager',
463
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'},
464
+ 'goog:chromeOptions' => {'args' => ['--foo']}}
465
+
466
+ expected = Selenium::WebDriver::VERSION[0] == '3' ? jwp_defaults.merge(expected_caps) : expected_caps
467
+
468
+ expect(options.capabilities).to eq expected
469
+ end
470
+ end
471
+ end
472
+ end