sauce_bindings 1.1.0 → 1.2.1

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
  SHA256:
3
- metadata.gz: 911fcc77b89278c32496a2c1e29a8076494208a2133fa4fa854e949d5db8437d
4
- data.tar.gz: c8a91543d40f08b14fd3253e7ca32ecd639c9d2c24833f63c4668da51699ed27
3
+ metadata.gz: 7512f163c74551644149ae5452bf7e8f72977cef83e90134c26bd3c1a07f352c
4
+ data.tar.gz: 87248ccb9a002564dc97f05380db06e55ee4cb0fb6599d5fb9fcc0dca7ee27e4
5
5
  SHA512:
6
- metadata.gz: ce6d3809d1efd72a5b89b0130a659b4d82863b16cf14377480bdfc3989ddf6f4c4e4bf2d9105968a03ee378c295366982a00b008fe2d9a91186ca107c1ea6231
7
- data.tar.gz: 6f9a7311e6c206e3ac8689d402bed4dfb7ec8f19e2380b4543e64ddcfc5ed2dbf673da00c9788b6cea8aa3f20a432ff08cf8235d9a22c72f1d585445e3e7c82d
6
+ metadata.gz: 796b7da1beb7307122675d78f8b2fd698ab71c5b5ce20f887cb288a14d880e3abc1a0a2f9219962d6b3040b33c7ab26c97dc8977e04b6681da1159ca3f0ab85f
7
+ data.tar.gz: cafb5b1b25caf038eb537b15a552ba6242ab2493c2005c71ca8a2e15424c364ab81ca3a9a183e4606d94be7de55b06cec356e7249c78653c4f29d0a42d0f8595
data/.rubocop.yml CHANGED
@@ -16,10 +16,10 @@ Metrics/BlockLength:
16
16
  - "**/*_spec.rb"
17
17
 
18
18
  Metrics/CyclomaticComplexity:
19
- Max: 8
19
+ Max: 10
20
20
 
21
21
  Metrics/PerceivedComplexity:
22
- Max: 9
22
+ Max: 11
23
23
 
24
24
  Metrics/ClassLength:
25
25
  Exclude:
data/CHANGES.md ADDED
@@ -0,0 +1,34 @@
1
+ ### 1.2.1 - March 1, 2022
2
+
3
+ * Added latest Windows and Mac platforms
4
+
5
+ ### 1.2.0 - July 12, 2021
6
+
7
+ * Accessibility functionality via Sa11y
8
+
9
+ ### 1.1.1 - July 10, 2021
10
+
11
+ * `Options` class methods only allow setting valid options for the provided browser
12
+ * `Options` class supports Edge browser
13
+ * Support Selenium 4
14
+
15
+ ### 1.1.0 - May 30, 2021
16
+
17
+ * Build Name support for Github Actions
18
+ * APAC data center tentatively supported
19
+ * Update `Options` to be constructed with class methods for browsers
20
+
21
+ ### 1.0.0 - April 24, 2020
22
+
23
+ * Link to job on Sauce UI in STDOUT
24
+
25
+ ### 1.0.0.beta1 - March 10, 2020
26
+
27
+ * `Options` class to construct capabilities
28
+ * `Session` class to wrap driver instance
29
+ * `Session#data_center=` to choose data center
30
+ * `Options` automatically uses default value for `build` name
31
+ * `Options` class accepts Selenium `Options` classes as argument
32
+ * `Options` accepts serialized information via a `Hash`
33
+ * `CapybaraSession` class for special Capybara support
34
+ * Sauce options for `user` and `access_key` must be obtained by ENV variables
data/README.md CHANGED
@@ -62,7 +62,7 @@ browser_options = Selenium::WebDriver::Firefox::Options.new('args' => ['-foo'])
62
62
  ```
63
63
 
64
64
  ### Session class
65
- #### Intializing a Session
65
+ #### Initializing a Session
66
66
  `Session` class gets initialized with an `Options` instance. If you want the
67
67
  default settings (latest Chrome version on Windows 10), you don't even need to use an `Options` instance:
68
68
  ```ruby
data/Rakefile CHANGED
@@ -5,4 +5,16 @@ require 'rspec/core/rake_task'
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- task default: :spec
8
+ RSpec::Core::RakeTask.new(:examples) do |spec|
9
+ spec.pattern = 'spec/examples/*_spec.rb'
10
+ end
11
+
12
+ RSpec::Core::RakeTask.new(:unit) do |spec|
13
+ spec.pattern = 'spec/unit/*_spec.rb'
14
+ end
15
+
16
+ RSpec::Core::RakeTask.new(:integration) do |spec|
17
+ spec.pattern = 'spec/integration/*_spec.rb'
18
+ end
19
+
20
+ task default: %i[examples unit integration]
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SauceBindings
4
+ class BaseConfigurations
5
+ def self.valid_options
6
+ %i[platform_name name build tags custom_data public tunnel_identifier parent_tunnel]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SauceBindings
4
+ class ChromeConfigurations < VDCConfigurations
5
+ def self.valid_options
6
+ super + %i[chromedriver_version extended_debugging capture_performance set_window_rect]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SauceBindings
4
+ class EdgeConfigurations < VDCConfigurations
5
+ def self.valid_options
6
+ super + %i[edgedriver_version selenium_version set_window_rect]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SauceBindings
4
+ class FirefoxConfigurations < VDCConfigurations
5
+ def self.valid_options
6
+ super + %i[geckodriver_version extended_debugging selenium_version set_window_rect]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SauceBindings
4
+ class IEConfigurations < VDCConfigurations
5
+ def self.valid_options
6
+ super + %i[iedriver_version avoid_proxy selenium_version set_window_rect]
7
+ end
8
+ end
9
+ end
@@ -11,26 +11,36 @@ module SauceBindings
11
11
 
12
12
  def chrome(**opts)
13
13
  opts[:browser_name] = 'chrome'
14
+ opts[:valid_options] = ChromeConfigurations.valid_options
14
15
  Options.new(**opts)
15
16
  end
16
17
 
17
18
  def edge(**opts)
19
+ if Selenium::WebDriver::VERSION[0] == '3'
20
+ raise ArgumentError, 'Selenium 3 is not compatible with the Chromium based Microsoft Edge.'
21
+ end
22
+
18
23
  opts[:browser_name] = 'MicrosoftEdge'
24
+ opts[:valid_options] = EdgeConfigurations.valid_options
19
25
  Options.new(**opts)
20
26
  end
21
27
 
22
28
  def firefox(**opts)
23
29
  opts[:browser_name] = 'firefox'
30
+ opts[:valid_options] = FirefoxConfigurations.valid_options
24
31
  Options.new(**opts)
25
32
  end
26
33
 
27
34
  def ie(**opts)
28
35
  opts[:browser_name] = 'internet explorer'
36
+ opts[:valid_options] = IEConfigurations.valid_options
29
37
  Options.new(**opts)
30
38
  end
31
39
 
32
40
  def safari(**opts)
33
41
  opts[:browser_name] = 'safari'
42
+ opts[:platform_name] ||= 'macOS 11'
43
+ opts[:valid_options] = SafariConfigurations.valid_options
34
44
  Options.new(**opts)
35
45
  end
36
46
  end
@@ -49,17 +59,20 @@ module SauceBindings
49
59
  record_video screen_resolution selenium_version tags time_zone tunnel_identifier video_upload_on_pass
50
60
  capture_performance].freeze
51
61
 
52
- attr_accessor :browser_name, :browser_version, :platform_name, :accept_insecure_certs, :page_load_strategy, :proxy,
53
- :set_window_rect, :timeouts, :unhandled_prompt_behavior, :strict_file_interactability, :avoid_proxy,
54
- :build, :chromedriver_version, :command_timeout, :custom_data, :extended_debugging, :idle_timeout,
55
- :iedriver_version, :max_duration, :name, :parent_tunnel, :prerun, :priority, :public, :record_logs,
56
- :record_screenshots, :record_video, :screen_resolution, :selenium_version, :tags, :time_zone,
57
- :tunnel_identifier, :video_upload_on_pass, :capture_performance
58
- attr_reader :selenium_options
62
+ attr_reader :selenium_options, :timeouts
59
63
 
60
64
  def initialize(**opts)
61
- parse_selenium_options(opts.delete(:selenium_options))
62
- create_variables(SAUCE + W3C, opts)
65
+ se_options = Array(opts.delete(:selenium_options))
66
+ valid_options = opts.delete(:valid_options)
67
+ if valid_options.nil?
68
+ valid_options = SAUCE + W3C
69
+ warn 'Using `Options.new(opts)` directly is deprecated, use static methods for desired browser instead; ' \
70
+ 'e.g., `Options.chrome(opts)` or `Options.safari(opts)'
71
+ end
72
+
73
+ create_variables(valid_options, opts)
74
+ @selenium_options = se_options.map(&:as_json).inject(:merge) || {}
75
+ parse_selenium_options(se_options)
63
76
  @build ||= build_name
64
77
 
65
78
  @browser_name ||= selenium_options['browserName'] || 'chrome'
@@ -70,17 +83,13 @@ module SauceBindings
70
83
  def capabilities
71
84
  caps = selenium_options.dup
72
85
  W3C.each do |key|
73
- value = send(key)
74
- key = self.class.camel_case(key)
75
- value = parse_w3c_key(key, value)
76
- caps[key] = value unless value.nil?
86
+ value = parse_w3c_key(key)
87
+ caps[self.class.camel_case(key)] = value unless value.nil?
77
88
  end
78
89
  caps['sauce:options'] = {}
79
90
  SAUCE.each do |key|
80
- value = send(key)
81
- key = self.class.camel_case(key)
82
- value = parse_sauce_key(key, value)
83
- caps['sauce:options'][key] = value unless value.nil?
91
+ value = parse_sauce_key(key)
92
+ caps['sauce:options'][self.class.camel_case(key)] = value unless value.nil?
84
93
  end
85
94
  caps
86
95
  end
@@ -90,11 +99,7 @@ module SauceBindings
90
99
  opts.each do |key, value|
91
100
  raise ArgumentError, "#{key} is not a valid parameter for Options class" unless respond_to?("#{key}=")
92
101
 
93
- if value.is_a?(Hash)
94
- value = value.each_with_object({}) do |(old_key, val), updated|
95
- updated[old_key.to_sym] = val
96
- end
97
- end
102
+ value = value.transform_keys(&:to_sym) if value.is_a?(Hash)
98
103
 
99
104
  send("#{key}=", value)
100
105
  end
@@ -102,59 +107,124 @@ module SauceBindings
102
107
 
103
108
  private
104
109
 
105
- def parse_w3c_key(key, value)
106
- if key == 'proxy' && value
110
+ def key_value(key)
111
+ send(key)
112
+ rescue NoMethodError
113
+ # Ignored
114
+ end
115
+
116
+ def parse_w3c_key(key)
117
+ value = send(key)
118
+
119
+ if key == :proxy && value
107
120
  value.as_json
108
- elsif key == 'timeouts' && value
109
- value.each_with_object({}) do |(old_key, val), updated|
110
- updated[self.class.camel_case(old_key)] = val
121
+ elsif key == :timeouts
122
+ if value
123
+ warn ':timeouts is deprecated, use :implicit_wait_timeout, :page_load_timeout or :script_timeout directly; ' \
124
+ '(ensure the values are set as seconds not milliseconds)'
125
+ value.transform_keys do |old_key|
126
+ self.class.camel_case(old_key)
127
+ end
128
+ else
129
+ manage_timeouts
111
130
  end
112
131
  else
113
132
  value
114
133
  end
115
134
  end
116
135
 
117
- def parse_sauce_key(key, value)
118
- if key == 'prerun' && value.is_a?(Hash)
119
- value.each_with_object({}) do |(old_key, val), updated|
120
- updated[self.class.camel_case(old_key)] = val
121
- end
122
- elsif key == 'customData' && value.is_a?(Hash)
123
- value.each_with_object({}) do |(old_key, val), updated|
124
- updated[self.class.camel_case(old_key)] = val
125
- end
136
+ def manage_timeouts
137
+ timeouts = {}
138
+ timeouts['implicit'] = ms_multiplier(@implicit_wait_timeout) if @implicit_wait_timeout
139
+ timeouts['pageLoad'] = ms_multiplier(@page_load_timeout) if @page_load_timeout
140
+ timeouts['script'] = ms_multiplier(@script_timeout) if @script_timeout
141
+ timeouts unless timeouts.empty?
142
+ end
143
+
144
+ def ms_multiplier(int)
145
+ raise(ArgumentError, 'Timeouts need to be entered as seconds not milliseconds') if int > 600
146
+
147
+ int * 1000
148
+ end
149
+
150
+ def parse_sauce_key(key)
151
+ value = key_value(key)
152
+
153
+ case key
154
+ when :prerun
155
+ camelize_keys(value)
156
+ when :custom_data
157
+ camelize_keys(value)
158
+ when :disable_record_video
159
+ !send(:record_video)
160
+ when :disable_video_upload_on_pass
161
+ !send(:video_upload_on_pass)
162
+ when :disable_record_screenshots
163
+ !send(:record_screenshots)
164
+ when :disable_record_logs
165
+ !send(:record_logs)
126
166
  else
127
167
  value
128
168
  end
129
169
  end
130
170
 
171
+ def camelize_keys(hash)
172
+ hash&.transform_keys do |old_key|
173
+ self.class.camel_case(old_key)
174
+ end
175
+ end
176
+
131
177
  def parse_selenium_options(selenium_opts)
132
- opts = Array(selenium_opts)
178
+ selenium_opts.each do |opt|
179
+ W3C.each do |capability|
180
+ value = option_value(opt, capability)
181
+ next if capability == :timeouts && value&.empty?
133
182
 
134
- opts.each do |opt|
135
- browser = BROWSER_NAMES[opt.class]
136
- if browser
137
- @browser_name = browser
138
- else
139
- W3C.each do |capability|
140
- send("#{capability}=", opt[capability]) if opt[capability]
183
+ if capability == :browser_name
184
+ @browser_name ||= BROWSER_NAMES[opt.class]
185
+ validate_browser_name(value || BROWSER_NAMES[opt.class])
186
+ elsif value
187
+ send("#{capability}=", value)
141
188
  end
142
189
  end
143
190
  end
191
+ end
192
+
193
+ def option_value(opt, capability)
194
+ if opt.respond_to?(capability)
195
+ begin
196
+ opt.send(capability)
197
+ rescue KeyError
198
+ # Ignored
199
+ end
200
+ elsif opt.respond_to?(:[])
201
+ opt[capability]
202
+ end
203
+ end
144
204
 
145
- @selenium_options = opts.map(&:as_json).inject(:merge) || {}
205
+ def validate_browser_name(browser)
206
+ return if @browser_name.nil? || browser == @browser_name
207
+
208
+ raise ArgumentError, "Selenium class identifies capabilities for #{browser}, which does not match the " \
209
+ "provided browser name: #{@browser_name}"
146
210
  end
147
211
 
148
212
  def create_variables(key, opts)
149
213
  key.each do |option|
150
- self.class.__send__(:attr_accessor, option)
214
+ singleton_class.class_eval { attr_accessor option }
151
215
  next unless opts.key?(option)
152
216
 
153
217
  instance_variable_set("@#{option}", opts.delete(option))
154
218
  end
219
+
220
+ if opts.key?(:browser_name)
221
+ singleton_class.class_eval { attr_reader :browser_name }
222
+ @browser_name = opts.delete(:browser_name)
223
+ end
224
+
155
225
  return if opts.empty?
156
226
 
157
- raise ArgumentError, "#{opts.inspect} are not valid parameters for Options class"
227
+ raise ArgumentError, "#{opts.inspect} are not valid parameters for Options class with #{@browser_name}"
158
228
  end
159
229
 
160
230
  def build_name
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SauceBindings
4
+ class SafariConfigurations < VDCConfigurations
5
+ def self.valid_options
6
+ super + %i[avoid_proxy selenium_version set_window_rect]
7
+ end
8
+ end
9
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'sauce_whisk'
4
+ require 'sa11y/analyze'
4
5
  require 'selenium-webdriver'
5
6
 
6
7
  module SauceBindings
@@ -15,7 +16,7 @@ module SauceBindings
15
16
  attr_accessor :http_client, :listener
16
17
 
17
18
  def initialize(options = nil, data_center: nil, http_client: nil, listener: nil)
18
- @options = options || Options.new
19
+ @options = options || Options.chrome
19
20
  @http_client = http_client
20
21
  @listener = listener
21
22
 
@@ -53,6 +54,11 @@ module SauceBindings
53
54
  @data_center = data_center
54
55
  end
55
56
 
57
+ def accessibility_results(js_lib: nil, frames: true, cross_origin: false)
58
+ sa11y = Sa11y::Analyze.new(driver, js_lib: js_lib, frames: frames, cross_origin: cross_origin)
59
+ sa11y.results
60
+ end
61
+
56
62
  def url
57
63
  @url ||= "https://#{@username}:#{@access_key}@#{DATA_CENTERS[data_center]}:443/wd/hub"
58
64
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SauceBindings
4
+ class VDCConfigurations < BaseConfigurations
5
+ def self.valid_options
6
+ super + %i[browser_version page_load_strategy accept_insecure_certs proxy
7
+ strict_file_interactability unhandled_prompt_behavior implicit_wait_timeout
8
+ page_load_timeout script_timeout record_video video_upload_on_pass
9
+ record_screenshots record_logs max_duration command_timeout
10
+ idle_timeout prerun priority screen_resolution time_zone]
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SauceBindings
4
- VERSION = '1.1.0'
4
+ VERSION = '1.2.1'
5
5
  end
@@ -3,3 +3,10 @@
3
3
  require 'sauce_bindings/version'
4
4
  require 'sauce_bindings/options'
5
5
  require 'sauce_bindings/session'
6
+ require 'sauce_bindings/base_configurations'
7
+ require 'sauce_bindings/vdc_configurations'
8
+ require 'sauce_bindings/chrome_configurations'
9
+ require 'sauce_bindings/edge_configurations'
10
+ require 'sauce_bindings/firefox_configurations'
11
+ require 'sauce_bindings/ie_configurations'
12
+ require 'sauce_bindings/safari_configurations'
@@ -9,6 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.version = SauceBindings::VERSION
10
10
  spec.authors = ['Titus Fortner']
11
11
  spec.email = ['titusfortner@gmail.com']
12
+ spec.required_ruby_version = '>= 2.5.0'
12
13
 
13
14
  spec.summary = 'Simple interface for interacting with Sauce Labs.'
14
15
  spec.description = 'Reduces complexity in user code for running Selenium tests on Sauce Labs'
@@ -23,11 +24,12 @@ Gem::Specification.new do |spec|
23
24
  spec.add_development_dependency 'capybara', '~> 3.16'
24
25
  spec.add_development_dependency 'rake', '>= 12.3.3'
25
26
  spec.add_development_dependency 'rspec', '~> 3.0'
26
- spec.add_development_dependency 'rubocop', '~>0.66'
27
+ spec.add_development_dependency 'rubocop', '~> 1.0'
27
28
  spec.add_development_dependency 'rubocop-performance'
28
- spec.add_development_dependency 'rubocop-rspec', '~>1.32'
29
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.0'
29
30
  spec.add_development_dependency 'webmock', '~> 3.5'
30
31
 
32
+ spec.add_runtime_dependency 'sa11y', '~> 0.2.0'
31
33
  spec.add_runtime_dependency 'sauce_whisk'
32
- spec.add_runtime_dependency 'selenium-webdriver', '~> 3.142.0', '>= 3.142.7'
34
+ spec.add_runtime_dependency 'selenium-webdriver', '>= 3.142.7'
33
35
  end
@@ -0,0 +1,56 @@
1
+ example_values:
2
+ browser_name: 'firefox'
3
+ browser_version: '123'
4
+ platform_name: 'Mac'
5
+ accept_insecure_certs: true
6
+ page_load_strategy: 'eager'
7
+ set_window_rect: true
8
+ unhandled_prompt_behavior: "accept"
9
+ strict_file_interactability: true
10
+ timeouts:
11
+ implicit: 1
12
+ page_load: 59
13
+ script: 29
14
+ avoid_proxy: true
15
+ build: 'Sample Build Name'
16
+ capture_performance: true
17
+ chromedriver_version: '71'
18
+ command_timeout: 2
19
+ custom_data:
20
+ foo: 'foo'
21
+ bar: 'bar'
22
+ extended_debugging: true
23
+ idle_timeout: 3
24
+ iedriver_version: '3.141.0'
25
+ max_duration: 300
26
+ name: 'Sample Test Name'
27
+ parent_tunnel: 'Mommy'
28
+ prerun:
29
+ executable: "http://url.to/your/executable.exe"
30
+ args:
31
+ - --silent
32
+ - -a
33
+ - -q
34
+ background: false
35
+ timeout: 120
36
+ priority: 0
37
+ public: 'team'
38
+ record_logs: false
39
+ record_screenshots: false
40
+ record_video: false
41
+ screen_resolution: '10x10'
42
+ selenium_version: '3.141.59'
43
+ tags:
44
+ - foo
45
+ - bar
46
+ - foobar
47
+ time_zone: 'San Francisco'
48
+ tunnel_identifier: 'tunnelname'
49
+ video_upload_on_pass: false
50
+
51
+ invalid_option:
52
+ foo: "bar"
53
+ browser_name: "firefox"
54
+ browser_version: "70"
55
+ platform_name: "MacOS 10.12"
56
+ record_screenshots: false
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sauce_bindings'
4
+ require 'rspec'
5
+
6
+ describe 'Create Session' do
7
+ it 'starts session' do
8
+ # 1. Create Session object with the desired Data Center
9
+ session = SauceBindings::Session.new
10
+
11
+ # 2. Start Session to get the Driver
12
+ driver = session.start
13
+
14
+ # 3. Use the driver in your tests just like normal
15
+ driver.get('https://www.saucedemo.com/')
16
+
17
+ # 4a. Get accessibility default results with frame support
18
+ session.accessibility_results
19
+
20
+ # 4b. Get accessibility default results without frame support
21
+ session.accessibility_results(frames: false)
22
+
23
+ # 4c. Get accessibility results with cross origin frame support
24
+ session.accessibility_results(cross_origin: true)
25
+
26
+ # 4d. Get accessibility results with a different version of Axe Core JS Library
27
+ session.accessibility_results(js_lib: File.read(File.expand_path('axe.min.js', __dir__)))
28
+
29
+ # 5. Stop the Session with whether the test passed or failed
30
+ session.stop(true)
31
+ end
32
+ end
@@ -0,0 +1 @@
1
+ // Blank file
@@ -4,14 +4,12 @@ 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
- browser_options = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
9
+ browser_options = Selenium::WebDriver::Chrome::Options.new(args: ['--start-fullscreen'])
12
10
 
13
11
  # 2. Create Sauce Options object with the Browser Options object instance
14
- sauce_options = SauceBindings::Options.firefox(selenium_options: browser_options)
12
+ sauce_options = SauceBindings::Options.chrome(selenium_options: browser_options)
15
13
 
16
14
  # 3. Create Session object with SauceOptions object instance
17
15
  session = SauceBindings::Session.new(sauce_options)
@@ -3,13 +3,12 @@
3
3
  require 'sauce_bindings'
4
4
  require 'rspec'
5
5
 
6
- describe 'Basic Options' do
7
- before { WebMock.allow_net_connect! }
8
-
6
+ describe 'Common Options' do
9
7
  it 'creates session' do
10
- # 1. Create a SauceOptions instance with the 3 primary parameters
11
- sauce_options = SauceBindings::Options.firefox(browser_version: '73.0',
12
- platform_name: 'Windows 8')
8
+ # 1. Create Options instance with common w3c options
9
+ sauce_options = SauceBindings::Options.firefox(browser_version: '88.0',
10
+ platform_name: 'Windows 8',
11
+ unhandled_prompt_behavior: 'ignore')
13
12
 
14
13
  # 2. Create Session object with SauceOptions object instance
15
14
  session = SauceBindings::Session.new(sauce_options)
@@ -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,12 +4,10 @@ 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,
12
- idle_timeout: 100,
10
+ idle_timeout: 45,
13
11
  time_zone: 'Alaska')
14
12
 
15
13
  # 2. Create Session object with SauceOptions object instance