sauce_bindings 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,237 +10,349 @@ module SauceBindings
10
10
  allow(ENV).to receive(:[]).with('BUILD_NUMBER').and_return('11')
11
11
  end
12
12
 
13
- describe 'self#chrome' do
14
- it 'creates Options for Chrome' do
13
+ describe '::chrome' do
14
+ it 'uses latest Chrome version on Windows 10 by default' do
15
15
  options = Options.chrome
16
16
 
17
17
  expect(options.browser_name).to eq 'chrome'
18
18
  expect(options.browser_version).to eq 'latest'
19
19
  expect(options.platform_name).to eq 'Windows 10'
20
20
  end
21
+
22
+ it 'accepts correct Selenium Options class' do
23
+ browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['-foo'])
24
+ options = Options.chrome(selenium_options: browser_opts)
25
+
26
+ expect(options.selenium_options.dig('goog:chromeOptions', 'args')).to eq ['-foo']
27
+ end
28
+
29
+ it 'does not accept incorrect Selenium Options class' do
30
+ browser_opts = Selenium::WebDriver::Firefox::Options.new
31
+
32
+ expect { Options.chrome(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
33
+ end
34
+
35
+ it 'accepts correct Selenium Capabilities class' do
36
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.chrome(browser_version: '99')
37
+ options = Options.chrome(selenium_options: browser_opts)
38
+
39
+ expect(options.browser_version).to eq '99'
40
+ end
41
+
42
+ it 'does not accept incorrect Selenium Capabilities class' do
43
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.firefox(browser_version: '99')
44
+
45
+ expect { Options.chrome(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
46
+ end
47
+
48
+ it 'accepts base configurations' do
49
+ options = Options.chrome(custom_data: {foo: 'bar'})
50
+ options.tags = %w[foo bar]
51
+
52
+ expect(options.custom_data).to eq(foo: 'bar')
53
+ expect(options.tags).to eq %w[foo bar]
54
+ end
55
+
56
+ it 'accepts vdc configurations' do
57
+ options = Options.chrome(browser_version: '42.0')
58
+ options.page_load_strategy = 'eager'
59
+
60
+ expect(options.browser_version).to eq '42.0'
61
+ expect(options.page_load_strategy).to eq 'eager'
62
+ end
63
+
64
+ it 'accepts valid configurations' do
65
+ options = Options.chrome(extended_debugging: true)
66
+ options.capture_performance = true
67
+
68
+ expect(options.extended_debugging).to eq true
69
+ expect(options.capture_performance).to eq true
70
+ end
71
+
72
+ it 'does not accept invalid configurations' do
73
+ expect { Options.chrome(geckodriver_version: 'anything') }.to raise_exception(ArgumentError)
74
+ end
21
75
  end
22
76
 
23
- describe 'self#edge' do
24
- it 'creates Options for Edge' do
25
- options = Options.edge
77
+ describe '::edge' do
78
+ context 'with Selenium 3' do
79
+ before do
80
+ skip('test only applies with Selenium 3') unless Selenium::WebDriver::VERSION[0] == '3'
81
+ end
26
82
 
27
- expect(options.browser_name).to eq 'MicrosoftEdge'
28
- expect(options.browser_version).to eq 'latest'
29
- expect(options.platform_name).to eq 'Windows 10'
83
+ it 'raises exception' do
84
+ msg = /Selenium 3 is not compatible with the Chromium based Microsoft Edge/
85
+ expect { Options.edge }.to raise_error(ArgumentError, msg)
86
+ end
87
+ end
88
+
89
+ context 'with Selenium 4' do
90
+ before do
91
+ skip('test only applies with Selenium 4') unless Selenium::WebDriver::VERSION[0] == '4'
92
+ end
93
+
94
+ it 'uses latest Edge version on Windows 10 by default' do
95
+ options = Options.edge
96
+
97
+ expect(options.browser_name).to eq 'MicrosoftEdge'
98
+ expect(options.browser_version).to eq 'latest'
99
+ expect(options.platform_name).to eq 'Windows 10'
100
+ end
101
+
102
+ it 'accepts correct Selenium Options class' do
103
+ browser_opts = Selenium::WebDriver::Edge::Options.new(args: ['-foo'])
104
+ options = Options.edge(selenium_options: browser_opts)
105
+
106
+ expect(options.selenium_options.dig('ms:edgeOptions', 'args')).to eq ['-foo']
107
+ end
108
+
109
+ it 'does not accept incorrect Selenium Options class' do
110
+ browser_opts = Selenium::WebDriver::Chrome::Options.new
111
+
112
+ expect { Options.edge(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
113
+ end
114
+
115
+ it 'accepts correct Selenium Capabilities class' do
116
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.edge(browser_version: '99')
117
+ options = Options.edge(selenium_options: browser_opts)
118
+
119
+ expect(options.browser_version).to eq '99'
120
+ end
121
+
122
+ it 'does not accept incorrect Selenium Capabilities class' do
123
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.chrome(browser_version: '99')
124
+
125
+ expect { Options.edge(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
126
+ end
127
+
128
+ it 'accepts base configurations' do
129
+ options = Options.edge(custom_data: {foo: 'bar'})
130
+ options.tags = %w[foo bar]
131
+
132
+ expect(options.custom_data).to eq(foo: 'bar')
133
+ expect(options.tags).to eq %w[foo bar]
134
+ end
135
+
136
+ it 'accepts vdc configurations' do
137
+ options = Options.edge(browser_version: '42.0')
138
+ options.page_load_strategy = 'eager'
139
+
140
+ expect(options.browser_version).to eq '42.0'
141
+ expect(options.page_load_strategy).to eq 'eager'
142
+ end
143
+
144
+ it 'accepts valid configurations' do
145
+ options = Options.edge(edgedriver_version: '99')
146
+ options.selenium_version = '3.14'
147
+
148
+ expect(options.selenium_version).to eq '3.14'
149
+ expect(options.edgedriver_version).to eq '99'
150
+ end
151
+
152
+ it 'does not accept invalid configurations' do
153
+ expect { Options.edge(chromedriver_version: 'anything') }.to raise_exception(ArgumentError)
154
+ end
30
155
  end
31
156
  end
32
157
 
33
- describe 'self#firefox' do
34
- it 'creates Options for Firefox' do
158
+ describe '::firefox' do
159
+ it 'uses latest Firefox version on Windows 10 by default' do
35
160
  options = Options.firefox
36
161
 
37
162
  expect(options.browser_name).to eq 'firefox'
38
163
  expect(options.browser_version).to eq 'latest'
39
164
  expect(options.platform_name).to eq 'Windows 10'
40
165
  end
166
+
167
+ it 'accepts correct Selenium Options class' do
168
+ browser_opts = Selenium::WebDriver::Firefox::Options.new(args: ['-foo'])
169
+ options = Options.firefox(selenium_options: browser_opts)
170
+
171
+ expect(options.selenium_options.dig('moz:firefoxOptions', 'args')).to eq ['-foo']
172
+ end
173
+
174
+ it 'does not accept incorrect Selenium Options class' do
175
+ browser_opts = Selenium::WebDriver::Chrome::Options.new
176
+
177
+ expect { Options.firefox(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
178
+ end
179
+
180
+ it 'accepts correct Selenium Capabilities class' do
181
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.firefox(browser_version: '99')
182
+ options = Options.firefox(selenium_options: browser_opts)
183
+
184
+ expect(options.browser_version).to eq '99'
185
+ end
186
+
187
+ it 'does not accept incorrect Selenium Capabilities class' do
188
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.chrome(browser_version: '99')
189
+
190
+ expect { Options.firefox(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
191
+ end
192
+
193
+ it 'accepts base configurations' do
194
+ options = Options.firefox(custom_data: {foo: 'bar'})
195
+ options.tags = %w[foo bar]
196
+
197
+ expect(options.custom_data).to eq(foo: 'bar')
198
+ expect(options.tags).to eq %w[foo bar]
199
+ end
200
+
201
+ it 'accepts vdc configurations' do
202
+ options = Options.firefox(browser_version: '42.0')
203
+ options.page_load_strategy = 'eager'
204
+
205
+ expect(options.browser_version).to eq '42.0'
206
+ expect(options.page_load_strategy).to eq 'eager'
207
+ end
208
+
209
+ it 'accepts valid configurations' do
210
+ options = Options.firefox(extended_debugging: true)
211
+ options.selenium_version = '3.14'
212
+
213
+ expect(options.selenium_version).to eq '3.14'
214
+ expect(options.extended_debugging).to eq true
215
+ end
216
+
217
+ it 'does not accept invalid configurations' do
218
+ expect { Options.firefox(chromedriver_version: 'anything') }.to raise_exception(ArgumentError)
219
+ end
41
220
  end
42
221
 
43
- describe 'self#ie' do
44
- it 'creates Options for Chrome' do
222
+ describe '::ie' do
223
+ it 'uses latest IE version on Windows 10 by default' do
45
224
  options = Options.ie
46
225
 
47
226
  expect(options.browser_name).to eq 'internet explorer'
48
227
  expect(options.browser_version).to eq 'latest'
49
228
  expect(options.platform_name).to eq 'Windows 10'
50
229
  end
51
- end
52
230
 
53
- describe 'self#safari' do
54
- it 'creates Options for Safari' do
55
- options = Options.safari
231
+ it 'accepts correct Selenium Options class' do
232
+ browser_opts = Selenium::WebDriver::IE::Options.new(args: ['-foo'])
233
+ options = Options.ie(selenium_options: browser_opts)
56
234
 
57
- expect(options.browser_name).to eq 'safari'
58
- expect(options.browser_version).to eq 'latest'
59
- expect(options.platform_name).to eq 'Windows 10'
235
+ expect(options.selenium_options.dig('se:ieOptions', 'ie.browserCommandLineSwitches')).to eq '-foo'
60
236
  end
61
- end
62
237
 
63
- describe '#new' do
64
- let(:default_options) do
65
- {'browserName' => 'chrome',
66
- 'browserVersion' => 'latest',
67
- 'platformName' => 'Windows 10',
68
- 'sauce:options' => {'build' => 'TEMP BUILD: 11'}}
238
+ it 'does not accept incorrect Selenium Options class' do
239
+ browser_opts = Selenium::WebDriver::Chrome::Options.new
240
+
241
+ expect { Options.ie(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
69
242
  end
70
243
 
71
- it 'uses latest Chrome version on Windows 10 by default' do
72
- options = Options.new
244
+ it 'accepts correct Selenium Capabilities class' do
245
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.ie(browser_version: '99')
246
+ options = Options.ie(selenium_options: browser_opts)
73
247
 
74
- expect(options.browser_name).to eq 'chrome'
75
- expect(options.browser_version).to eq 'latest'
76
- expect(options.platform_name).to eq 'Windows 10'
248
+ expect(options.browser_version).to eq '99'
77
249
  end
78
250
 
79
- it 'accepts provided values for browser, browser version and platform name' do
80
- options = Options.new(browser_name: 'firefox',
81
- browser_version: '123',
82
- platform_name: 'Mac')
251
+ it 'does not accept incorrect Selenium Capabilities class' do
252
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.chrome(browser_version: '99')
83
253
 
84
- expect(options.browser_name).to eq 'firefox'
85
- expect(options.browser_version).to eq '123'
86
- expect(options.platform_name).to eq 'Mac'
254
+ expect { Options.ie(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
87
255
  end
88
256
 
89
- it 'accepts other w3c values' do
90
- proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
91
- timeouts = {implicit: 1,
92
- page_load: 59,
93
- script: 29}
94
- options = Options.new(accept_insecure_certs: true,
95
- page_load_strategy: 'eager',
96
- proxy: proxy,
97
- set_window_rect: true,
98
- unhandled_prompt_behavior: 'accept',
99
- strict_file_interactability: true,
100
- timeouts: timeouts)
257
+ it 'accepts base configurations' do
258
+ options = Options.ie(custom_data: {foo: 'bar'})
259
+ options.tags = %w[foo bar]
101
260
 
102
- expect(options.accept_insecure_certs).to eq true
261
+ expect(options.custom_data).to eq(foo: 'bar')
262
+ expect(options.tags).to eq %w[foo bar]
263
+ end
264
+
265
+ it 'accepts vdc configurations' do
266
+ options = Options.ie(browser_version: '42.0')
267
+ options.page_load_strategy = 'eager'
268
+
269
+ expect(options.browser_version).to eq '42.0'
103
270
  expect(options.page_load_strategy).to eq 'eager'
104
- expect(options.proxy).to eq proxy
105
- expect(options.set_window_rect).to eq true
106
- expect(options.unhandled_prompt_behavior).to eq 'accept'
107
- expect(options.strict_file_interactability).to eq true
108
- expect(options.timeouts).to eq timeouts
109
271
  end
110
272
 
111
- it 'accepts Sauce Labs specific settings' do
112
- custom_data = {foo: 'foo',
113
- bar: 'bar'}
114
- prerun = {executable: 'http://url.to/your/executable.exe',
115
- args: ['--silent', '-a', '-q'],
116
- background: false,
117
- timeout: 120}
118
- tags = %w[foo bar foobar]
119
- sauce_options = {
120
- avoid_proxy: true,
121
- build: 'Sample Build Name',
122
- capture_performance: true,
123
- chromedriver_version: '71',
124
- command_timeout: 2,
125
- custom_data: custom_data,
126
- extended_debugging: true,
127
- idle_timeout: 3,
128
- iedriver_version: '3.141.0',
129
- max_duration: 300,
130
- name: 'Sample Test Name',
131
- parent_tunnel: 'Mommy',
132
- prerun: prerun,
133
- priority: 0,
134
- public: 'team',
135
- record_logs: false,
136
- record_screenshots: false,
137
- record_video: false,
138
- screen_resolution: '10x10',
139
- selenium_version: '3.141.59',
140
- tags: tags,
141
- time_zone: 'San Francisco',
142
- tunnel_identifier: 'tunnelname',
143
- video_upload_on_pass: false
144
- }
145
-
146
- options = Options.new(**sauce_options)
273
+ it 'accepts valid configurations' do
274
+ options = Options.ie(avoid_proxy: true)
275
+ options.selenium_version = '3.14'
147
276
 
277
+ expect(options.selenium_version).to eq '3.14'
148
278
  expect(options.avoid_proxy).to eq true
149
- expect(options.build).to eq 'Sample Build Name'
150
- expect(options.capture_performance).to eq true
151
- expect(options.chromedriver_version).to eq '71'
152
- expect(options.command_timeout).to eq 2
153
- expect(options.custom_data).to eq custom_data
154
- expect(options.extended_debugging).to eq true
155
- expect(options.idle_timeout).to eq 3
156
- expect(options.iedriver_version).to eq '3.141.0'
157
- expect(options.max_duration).to eq 300
158
- expect(options.name).to eq 'Sample Test Name'
159
- expect(options.parent_tunnel).to eq 'Mommy'
160
- expect(options.prerun).to eq prerun
161
- expect(options.priority).to eq 0
162
- expect(options.public).to eq 'team'
163
- expect(options.record_logs).to eq false
164
- expect(options.record_screenshots).to eq false
165
- expect(options.record_video).to eq false
166
- expect(options.screen_resolution).to eq '10x10'
167
- expect(options.selenium_version).to eq '3.141.59'
168
- expect(options.tags).to eq tags
169
- expect(options.time_zone).to eq 'San Francisco'
170
- expect(options.tunnel_identifier).to eq 'tunnelname'
171
- expect(options.video_upload_on_pass).to eq false
172
279
  end
173
280
 
174
- it 'accepts Selenium Capabilities and overrides default browser' do
175
- caps = Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true,
176
- page_load_strategy: 'eager')
177
- options = Options.new(selenium_options: caps)
281
+ it 'does not accept invalid configurations' do
282
+ expect { Options.ie(chromedriver_version: 'anything') }.to raise_exception(ArgumentError)
283
+ end
284
+ end
178
285
 
179
- expect(options.browser_name).to eq 'firefox'
180
- expect(options.accept_insecure_certs).to eq true
181
- expect(options.page_load_strategy).to eq 'eager'
286
+ describe '::safari' do
287
+ it 'uses latest Safari version on latest macOS by default' do
288
+ options = Options.safari
289
+
290
+ expect(options.browser_name).to eq 'safari'
291
+ expect(options.browser_version).to eq 'latest'
292
+ expect(options.platform_name).to eq 'macOS 11.00'
182
293
  end
183
294
 
184
- it 'accepts Selenium Options and overrides default browser' do
185
- browser_opts = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
186
- options = Options.new(selenium_options: browser_opts)
295
+ it 'accepts correct Selenium Options class' do
296
+ browser_opts = Selenium::WebDriver::Safari::Options.new(automatic_inspection: true)
297
+ options = Options.safari(selenium_options: browser_opts)
187
298
 
188
- expect(options.browser_name).to eq 'firefox'
189
- expect(options.selenium_options['moz:firefoxOptions']).to eq('args' => ['--foo'])
299
+ expect(options.selenium_options['safari:automaticInspection']).to eq true
190
300
  end
191
301
 
192
- it 'accepts Selenium Capabilities and Options class instances' do
193
- caps = Selenium::WebDriver::Remote::Capabilities.chrome(accept_insecure_certs: true,
194
- page_load_strategy: 'eager')
195
- browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['--foo'])
196
- options = Options.new(selenium_options: [caps, browser_opts])
302
+ it 'does not accept incorrect Selenium Options class' do
303
+ browser_opts = Selenium::WebDriver::Chrome::Options.new
197
304
 
198
- expect(options.page_load_strategy).to eq 'eager'
199
- expect(options.accept_insecure_certs).to eq true
200
- expect(options.selenium_options['goog:chromeOptions']).to eq('args' => ['--foo'])
305
+ expect { Options.safari(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
201
306
  end
202
307
 
203
- it 'accepts W3C, Sauce, Browser Options and Capabilities at the same time' do
204
- caps = Selenium::WebDriver::Remote::Capabilities.chrome(page_load_strategy: 'eager')
205
- browser_opts = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
308
+ it 'accepts correct Selenium Capabilities class' do
309
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.safari(browser_version: '99')
310
+ options = Options.safari(selenium_options: browser_opts)
206
311
 
207
- options = Options.new(browser_version: '77',
208
- accept_insecure_certs: true,
209
- command_timeout: 2,
210
- time_zone: 'Alaska',
211
- selenium_options: [caps, browser_opts])
312
+ expect(options.browser_version).to eq '99'
313
+ end
212
314
 
213
- expect(options.browser_name).to eq 'firefox'
214
- expect(options.browser_version).to eq '77'
215
- expect(options.platform_name).to eq 'Windows 10'
216
- expect(options.accept_insecure_certs).to eq true
217
- expect(options.command_timeout).to eq 2
218
- expect(options.time_zone).to eq 'Alaska'
219
- expect(options.page_load_strategy).to eq 'eager'
315
+ it 'does not accept incorrect Selenium Capabilities class' do
316
+ browser_opts = Selenium::WebDriver::Remote::Capabilities.chrome(browser_version: '99')
220
317
 
221
- expect(options.selenium_options['moz:firefoxOptions']).to eq('args' => ['--foo'])
318
+ expect { Options.safari(selenium_options: browser_opts) }.to raise_exception(ArgumentError)
222
319
  end
223
320
 
224
- it 'creates a default build value' do
225
- options = Options.new
226
- expect(options.build).to eq 'TEMP BUILD: 11'
321
+ it 'accepts base configurations' do
322
+ options = Options.safari(custom_data: {foo: 'bar'})
323
+ options.tags = %w[foo bar]
324
+
325
+ expect(options.custom_data).to eq(foo: 'bar')
326
+ expect(options.tags).to eq %w[foo bar]
227
327
  end
228
328
 
229
- it 'raises ArgumentError if parameter is not recognized as valid' do
230
- expect { Options.new(foo: 'bar') }.to raise_exception(ArgumentError)
329
+ it 'accepts vdc configurations' do
330
+ options = Options.safari(browser_version: '42.0')
331
+ options.page_load_strategy = 'eager'
332
+
333
+ expect(options.browser_version).to eq '42.0'
334
+ expect(options.page_load_strategy).to eq 'eager'
335
+ end
336
+
337
+ it 'accepts valid configurations' do
338
+ options = Options.safari(avoid_proxy: true)
339
+ options.selenium_version = '3.14'
340
+
341
+ expect(options.selenium_version).to eq '3.14'
342
+ expect(options.avoid_proxy).to eq true
343
+ end
344
+
345
+ it 'does not accept invalid configurations' do
346
+ expect { Options.safari(chromedriver_version: 'anything') }.to raise_exception(ArgumentError)
231
347
  end
232
348
  end
233
349
 
234
350
  describe '#accessors' do
235
351
  it 'parses w3c values' do
236
352
  proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
237
- timeouts = {implicit: 1,
238
- page_load: 59,
239
- script: 29}
240
353
 
241
- options = Options.new
354
+ options = Options.firefox
242
355
 
243
- options.browser_name = 'firefox'
244
356
  options.browser_version = '7'
245
357
  options.platform_name = 'macOS 10.14'
246
358
  options.accept_insecure_certs = true
@@ -249,7 +361,9 @@ module SauceBindings
249
361
  options.set_window_rect = true
250
362
  options.unhandled_prompt_behavior = 'accept'
251
363
  options.strict_file_interactability = true
252
- options.timeouts = timeouts
364
+ options.implicit_wait_timeout = 1
365
+ options.page_load_timeout = 59
366
+ options.script_timeout = 29
253
367
 
254
368
  expect(options.browser_name).to eq 'firefox'
255
369
  expect(options.browser_version).to eq '7'
@@ -260,7 +374,9 @@ module SauceBindings
260
374
  expect(options.set_window_rect).to eq true
261
375
  expect(options.unhandled_prompt_behavior).to eq 'accept'
262
376
  expect(options.strict_file_interactability).to eq true
263
- expect(options.timeouts).to eq timeouts
377
+ expect(options.implicit_wait_timeout).to eq 1
378
+ expect(options.page_load_timeout).to eq 59
379
+ expect(options.script_timeout).to eq 29
264
380
  end
265
381
 
266
382
  it 'parses Sauce values' do
@@ -272,17 +388,13 @@ module SauceBindings
272
388
  timeout: 120}
273
389
  tags = %w[foo bar foobar]
274
390
 
275
- options = Options.new
391
+ options = Options.firefox
276
392
 
277
- options.avoid_proxy = true
278
393
  options.build = 'Sample Build Name'
279
- options.capture_performance = true
280
- options.chromedriver_version = '71'
281
394
  options.command_timeout = 2
282
395
  options.custom_data = custom_data
283
396
  options.extended_debugging = true
284
397
  options.idle_timeout = 3
285
- options.iedriver_version = '3.141.0'
286
398
  options.max_duration = 300
287
399
  options.name = 'Sample Test Name'
288
400
  options.parent_tunnel = 'Mommy'
@@ -299,15 +411,11 @@ module SauceBindings
299
411
  options.tunnel_identifier = 'tunnelname'
300
412
  options.video_upload_on_pass = false
301
413
 
302
- expect(options.avoid_proxy).to eq true
303
414
  expect(options.build).to eq 'Sample Build Name'
304
- expect(options.capture_performance).to eq true
305
- expect(options.chromedriver_version).to eq '71'
306
415
  expect(options.command_timeout).to eq 2
307
416
  expect(options.custom_data).to eq custom_data
308
417
  expect(options.extended_debugging).to eq true
309
418
  expect(options.idle_timeout).to eq 3
310
- expect(options.iedriver_version).to eq '3.141.0'
311
419
  expect(options.max_duration).to eq 300
312
420
  expect(options.name).to eq 'Sample Test Name'
313
421
  expect(options.parent_tunnel).to eq 'Mommy'
@@ -328,9 +436,6 @@ module SauceBindings
328
436
 
329
437
  describe '#merge_capabilities' do
330
438
  it 'loads options from configuration' do
331
- timeouts = {implicit: 1,
332
- page_load: 59,
333
- script: 29}
334
439
  custom_data = {foo: 'foo',
335
440
  bar: 'bar'}
336
441
  prerun = {executable: 'http://url.to/your/executable.exe',
@@ -339,9 +444,10 @@ module SauceBindings
339
444
  timeout: 120}
340
445
  tags = %w[foo bar foobar]
341
446
 
342
- options = Options.new
343
447
  yaml = YAML.load_file('spec/options.yml')
344
- options.merge_capabilities(yaml['example_values'])
448
+ example_values = yaml['example_values']
449
+ options = Options.send(example_values.delete('browser_name'))
450
+ options.merge_capabilities(example_values)
345
451
 
346
452
  expect(options.browser_name).to eq 'firefox'
347
453
  expect(options.browser_version).to eq '123'
@@ -351,16 +457,15 @@ module SauceBindings
351
457
  expect(options.set_window_rect).to eq true
352
458
  expect(options.unhandled_prompt_behavior).to eq 'accept'
353
459
  expect(options.strict_file_interactability).to eq true
354
- expect(options.timeouts).to eq timeouts
355
- expect(options.avoid_proxy).to eq true
460
+ expect(options.implicit_wait_timeout).to eq 1
461
+ expect(options.page_load_timeout).to eq 59
462
+ expect(options.script_timeout).to eq 29
356
463
  expect(options.build).to eq 'Sample Build Name'
357
- expect(options.capture_performance).to eq true
358
- expect(options.chromedriver_version).to eq '71'
359
464
  expect(options.command_timeout).to eq 2
360
465
  expect(options.custom_data).to eq custom_data
361
466
  expect(options.extended_debugging).to eq true
362
467
  expect(options.idle_timeout).to eq 3
363
- expect(options.iedriver_version).to eq '3.141.0'
468
+ expect(options.geckodriver_version).to eq '0.23'
364
469
  expect(options.max_duration).to eq 300
365
470
  expect(options.name).to eq 'Sample Test Name'
366
471
  expect(options.parent_tunnel).to eq 'Mommy'
@@ -379,7 +484,7 @@ module SauceBindings
379
484
  end
380
485
 
381
486
  it 'raises exception if value not recognized' do
382
- options = Options.new
487
+ options = Options.chrome
383
488
  yaml = YAML.load_file('spec/options.yml')
384
489
 
385
490
  msg = 'foo is not a valid parameter for Options class'
@@ -388,34 +493,39 @@ module SauceBindings
388
493
  end
389
494
 
390
495
  describe '#capabilities' do
496
+ it 'errors when timeouts are milliseconds' do
497
+ expect { Options.chrome(implicit_wait_timeout: 601).capabilities }.to raise_error(ArgumentError)
498
+ expect { Options.chrome(page_load_timeout: 601).capabilities }.to raise_error(ArgumentError)
499
+ expect { Options.chrome(script_timeout: 601).capabilities }.to raise_error(ArgumentError)
500
+ end
501
+
391
502
  it 'correctly generates capabilities for w3c values' do
392
503
  proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
393
- timeouts = {implicit: 1,
394
- page_load: 59,
395
- script: 29}
396
-
397
- options = Options.new(browser_name: 'firefox',
398
- platform_name: 'Mac',
399
- accept_insecure_certs: true,
400
- page_load_strategy: 'eager',
401
- proxy: proxy,
402
- set_window_rect: true,
403
- unhandled_prompt_behavior: 'accept',
404
- strict_file_interactability: true,
405
- timeouts: timeouts)
504
+
505
+ options = Options.firefox(platform_name: 'Mac',
506
+ accept_insecure_certs: true,
507
+ page_load_strategy: 'eager',
508
+ proxy: proxy,
509
+ set_window_rect: true,
510
+ unhandled_prompt_behavior: 'accept',
511
+ strict_file_interactability: true,
512
+ implicit_wait_timeout: 1,
513
+ page_load_timeout: 59,
514
+ script_timeout: 29)
515
+ proxy_type = Selenium::WebDriver::VERSION[0] == '3' ? 'MANUAL' : 'manual'
406
516
 
407
517
  expect(options.capabilities).to eq('browserName' => 'firefox',
408
518
  'browserVersion' => 'latest',
409
519
  'platformName' => 'Mac',
410
520
  'acceptInsecureCerts' => true,
411
521
  'pageLoadStrategy' => 'eager',
412
- 'proxy' => {'proxyType' => 'MANUAL', 'sslProxy' => 'foo'},
522
+ 'proxy' => {'proxyType' => proxy_type, 'sslProxy' => 'foo'},
413
523
  'setWindowRect' => true,
414
524
  'unhandledPromptBehavior' => 'accept',
415
525
  'strictFileInteractability' => true,
416
- 'timeouts' => {'implicit' => 1,
417
- 'pageLoad' => 59,
418
- 'script' => 29},
526
+ 'timeouts' => {'implicit' => 1000,
527
+ 'pageLoad' => 59_000,
528
+ 'script' => 29_000},
419
529
  'sauce:options' => {'build' => 'TEMP BUILD: 11'})
420
530
  end
421
531
 
@@ -427,15 +537,13 @@ module SauceBindings
427
537
  background: false,
428
538
  timeout: 120}
429
539
  tags = %w[foo bar foobar]
430
- sauce_options = {avoid_proxy: true,
431
- build: 'Sample Build Name',
540
+ sauce_options = {build: 'Sample Build Name',
432
541
  capture_performance: true,
433
542
  chromedriver_version: '71',
434
543
  command_timeout: 2,
435
544
  custom_data: custom_data,
436
545
  extended_debugging: true,
437
546
  idle_timeout: 3,
438
- iedriver_version: '3.141.0',
439
547
  max_duration: 300,
440
548
  name: 'Sample Test Name',
441
549
  parent_tunnel: 'Mommy',
@@ -446,13 +554,12 @@ module SauceBindings
446
554
  record_screenshots: false,
447
555
  record_video: false,
448
556
  screen_resolution: '10x10',
449
- selenium_version: '3.141.59',
450
557
  tags: tags,
451
558
  time_zone: 'San Francisco',
452
559
  tunnel_identifier: 'tunnelname',
453
560
  video_upload_on_pass: false}
454
561
 
455
- options = Options.new(**sauce_options)
562
+ options = Options.chrome(**sauce_options)
456
563
 
457
564
  prerun_caps = {'executable' => 'http://url.to/your/executable.exe',
458
565
  'args' => ['--silent', '-a', '-q'],
@@ -463,7 +570,6 @@ module SauceBindings
463
570
  'browserVersion' => 'latest',
464
571
  'platformName' => 'Windows 10',
465
572
  'sauce:options' => {'build' => 'Sample Build Name',
466
- 'avoidProxy' => true,
467
573
  'capturePerformance' => true,
468
574
  'chromedriverVersion' => '71',
469
575
  'commandTimeout' => 2,
@@ -471,7 +577,6 @@ module SauceBindings
471
577
  'bar' => 'bar'},
472
578
  'extendedDebugging' => true,
473
579
  'idleTimeout' => 3,
474
- 'iedriverVersion' => '3.141.0',
475
580
  'maxDuration' => 300,
476
581
  'name' => 'Sample Test Name',
477
582
  'parentTunnel' => 'Mommy',
@@ -482,18 +587,19 @@ module SauceBindings
482
587
  'recordScreenshots' => false,
483
588
  'recordVideo' => false,
484
589
  'screenResolution' => '10x10',
485
- 'seleniumVersion' => '3.141.59',
486
590
  'tags' => %w[foo bar foobar],
487
591
  'timeZone' => 'San Francisco',
488
592
  'tunnelIdentifier' => 'tunnelname',
489
593
  'videoUploadOnPass' => false})
490
594
  end
491
595
 
492
- it 'correctly generates capabilities for selenium object values' do
596
+ it 'correctly generates capabilities for selenium object values Selenium 3' do
597
+ skip unless Selenium::WebDriver::VERSION[0] == '3'
598
+
493
599
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(accept_insecure_certs: true,
494
600
  page_load_strategy: 'eager')
495
601
  browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['--foo'])
496
- options = Options.new(selenium_options: [caps, browser_opts])
602
+ options = Options.chrome(selenium_options: [caps, browser_opts])
497
603
 
498
604
  jwp_defaults = {'cssSelectorsEnabled' => true,
499
605
  'javascriptEnabled' => true,
@@ -513,6 +619,29 @@ module SauceBindings
513
619
 
514
620
  expect(options.capabilities).to eq(jwp_defaults.merge(expected_caps))
515
621
  end
622
+
623
+ it 'correctly generates capabilities for selenium object values Selenium 4' do
624
+ skip if Selenium::WebDriver::VERSION[0] == '3'
625
+
626
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(accept_insecure_certs: true)
627
+ browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['--foo'],
628
+ page_load_strategy: 'eager')
629
+ options = Options.chrome(selenium_options: [caps, browser_opts])
630
+
631
+ expect(options.accept_insecure_certs).to eq true
632
+ expect(options.page_load_strategy).to eq 'eager'
633
+ expect(options.selenium_options.dig('goog:chromeOptions', 'args')).to eq ['--foo']
634
+
635
+ expected_caps = {'browserName' => 'chrome',
636
+ 'browserVersion' => 'latest',
637
+ 'platformName' => 'Windows 10',
638
+ 'acceptInsecureCerts' => true,
639
+ 'pageLoadStrategy' => 'eager',
640
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'},
641
+ 'goog:chromeOptions' => {'args' => ['--foo']}}
642
+
643
+ expect(options.capabilities).to eq expected_caps
644
+ end
516
645
  end
517
646
  end
518
647
  end