simple_sauce 0.1.0 → 1.0.0.pre.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 459ade86f96fd32db8ec9a44670c1d25676790b0ad4ab5b1cc517831b7e4ccdc
4
- data.tar.gz: eac33556eaa40e1d672f246a6cd59603662b5131280aa6030672d6f82a2de42d
3
+ metadata.gz: b6cabcc9d048c033cb89c6eb328e364c7a1f047c202453c89f5685e84e2a91f8
4
+ data.tar.gz: cb3e8f3fcca010f06dfbb09a576b71e1ed90a92305adda8fac58138ba530d942
5
5
  SHA512:
6
- metadata.gz: 60b6e3ab41402f963e7f4a7085c7413a11788aa087b49a57d63f64bfe5c0945c74922f786aef84a1f298b37b3cd03125e8295222a1a244b338413568179d0cfb
7
- data.tar.gz: a03a428ecff642195fc148f96a207f2106977dc909f26ed5576bbfcc923a8fb71a0a2ceeb6c16521884f8c6c97d21998123b0ddec7bc39194e2dbbf4b40ffeb2
6
+ metadata.gz: e86505a7b8ad04a1e6e0f3627f1e94082be58e09a01ff035177fcfd60cebf85cd6610424ca7b257b8ef103750dbb32dae30973cb1c82a2feb20b05173c864af1
7
+ data.tar.gz: 962d17eaba87c010b65308ddce0e7ad9f9d336074d752a2be97e1482a2e9abbd7cf9cb62b2ca65dc518c55d6bd1223a5f0a0e599348e433ebf27ee43e16328f0
data/.rubocop.yml CHANGED
@@ -8,15 +8,28 @@ require:
8
8
  Layout/SpaceInsideHashLiteralBraces:
9
9
  EnforcedStyle: no_space
10
10
 
11
+ Metrics/AbcSize:
12
+ Max: 22
13
+
11
14
  Metrics/BlockLength:
12
15
  Exclude:
13
16
  - "**/*_spec.rb"
14
17
 
18
+ Metrics/CyclomaticComplexity:
19
+ Max: 7
20
+
21
+ Metrics/PerceivedComplexity:
22
+ Max: 8
23
+
24
+ Metrics/ClassLength:
25
+ Exclude:
26
+ - 'lib/simple_sauce/options.rb'
27
+
15
28
  Metrics/LineLength:
16
29
  Max: 120
17
30
 
18
31
  Metrics/MethodLength:
19
- Max: 13
32
+ Max: 16
20
33
 
21
34
  Metrics/ModuleLength:
22
35
  CountComments: false
data/README.md CHANGED
@@ -52,7 +52,7 @@ sauce_options = SimpleSauce::Options.new(screen_resolution: '1080x720',
52
52
  selenium_options = Selenium::WebDriver::Remote::Capabilities.new(accept_insecure_certs: false,
53
53
  page_load_strategy: 'eager'}
54
54
 
55
- browser_options = Selenium::WebDriver::Firefox::Options.new(args: ['-foo'])
55
+ browser_options = Selenium::WebDriver::Firefox::Options.new('args' => ['-foo'])
56
56
  ```
57
57
 
58
58
  ### Session class
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'selenium-webdriver'
4
+
3
5
  module SimpleSauce
4
6
  class Options
5
7
  class << self
@@ -8,40 +10,116 @@ module SimpleSauce
8
10
  end
9
11
  end
10
12
 
11
- W3C = %i[browser_name platform_name browser_version].freeze
13
+ BROWSER_NAMES = {Selenium::WebDriver::Chrome::Options => 'chrome',
14
+ Selenium::WebDriver::Edge::Options => 'MicrosoftEdge',
15
+ Selenium::WebDriver::Firefox::Options => 'firefox',
16
+ Selenium::WebDriver::IE::Options => 'internet explorer',
17
+ Selenium::WebDriver::Safari::Options => 'safari'}.freeze
12
18
 
13
- SAUCE = %i[access_key appium_version avoid_proxy build capture_html chromedriver_version command_timeout
14
- crmuxdriver_version custom_data disable_popup_handler extended_debugging firefox_adapter_version
15
- firefox_profile_url idle_timeout iedriver_version max_duration name parent_tunnel passed prerun
16
- prevent_requeue priority proxy_host public record_logs record_screenshots record_video
17
- restricted_public_info screen_resolution selenium_version source tags time_zone tunnel_identifier
18
- username video_upload_on_pass capture_performance].freeze
19
+ W3C = %i[browser_name browser_version platform_name accept_insecure_certs page_load_strategy proxy
20
+ set_window_rect timeouts unhandled_prompt_behavior strict_file_interactability].freeze
19
21
 
20
- def initialize(**opts)
21
- @browser_name = 'chrome'
22
- @platform_name = 'Windows 10'
23
- @browser_version = 'latest'
22
+ SAUCE = %i[avoid_proxy build chromedriver_version command_timeout custom_data extended_debugging idle_timeout
23
+ iedriver_version max_duration name parent_tunnel prerun priority public record_logs record_screenshots
24
+ record_video screen_resolution selenium_version tags time_zone tunnel_identifier video_upload_on_pass
25
+ capture_performance].freeze
24
26
 
27
+ attr_accessor :browser_name, :browser_version, :platform_name, :accept_insecure_certs, :page_load_strategy, :proxy,
28
+ :set_window_rect, :timeouts, :unhandled_prompt_behavior, :strict_file_interactability, :avoid_proxy,
29
+ :build, :chromedriver_version, :command_timeout, :custom_data, :extended_debugging, :idle_timeout,
30
+ :iedriver_version, :max_duration, :name, :parent_tunnel, :prerun, :priority, :public, :record_logs,
31
+ :record_screenshots, :record_video, :screen_resolution, :selenium_version, :tags, :time_zone,
32
+ :tunnel_identifier, :video_upload_on_pass, :capture_performance
33
+ attr_reader :selenium_options
34
+
35
+ def initialize(**opts)
36
+ parse_selenium_options(opts.delete(:selenium_options))
25
37
  create_variables(SAUCE + W3C, opts)
38
+ @build ||= build_name
39
+
40
+ @browser_name ||= selenium_options['browserName'] || 'chrome'
41
+ @platform_name ||= 'Windows 10'
42
+ @browser_version ||= 'latest'
26
43
  end
27
44
 
28
45
  def capabilities
29
- caps = W3C.each_with_object({}) do |key, hash|
46
+ caps = selenium_options.dup
47
+ W3C.each do |key|
30
48
  value = send(key)
31
- hash[self.class.camel_case(key)] = value if value
49
+ key = self.class.camel_case(key)
50
+ value = parse_w3c_key(key, value)
51
+ caps[key] = value unless value.nil?
32
52
  end
33
53
  caps['sauce:options'] = {}
34
54
  SAUCE.each do |key|
35
55
  value = send(key)
36
- caps['sauce:options'][self.class.camel_case(key)] = value unless value.nil?
56
+ key = self.class.camel_case(key)
57
+ value = parse_sauce_key(key, value)
58
+ caps['sauce:options'][key] = value unless value.nil?
37
59
  end
38
60
  caps
39
61
  end
40
-
41
62
  alias as_json capabilities
42
63
 
64
+ def add_capabilities(opts)
65
+ opts.each do |key, value|
66
+ raise ArgumentError, "#{key} is not a valid parameter for Options class" unless respond_to?("#{key}=")
67
+
68
+ if value.is_a?(Hash)
69
+ value = value.each_with_object({}) do |(old_key, val), updated|
70
+ updated[old_key.to_sym] = val
71
+ end
72
+ end
73
+
74
+ send("#{key}=", value)
75
+ end
76
+ end
77
+
43
78
  private
44
79
 
80
+ def parse_w3c_key(key, value)
81
+ if key == 'proxy' && value
82
+ value.as_json
83
+ elsif key == 'timeouts' && value
84
+ value.each_with_object({}) do |(old_key, val), updated|
85
+ updated[self.class.camel_case(old_key)] = val
86
+ end
87
+ else
88
+ value
89
+ end
90
+ end
91
+
92
+ def parse_sauce_key(key, value)
93
+ if key == 'prerun' && value.is_a?(Hash)
94
+ value.each_with_object({}) do |(old_key, val), updated|
95
+ updated[self.class.camel_case(old_key)] = val
96
+ end
97
+ elsif key == 'customData' && value.is_a?(Hash)
98
+ value.each_with_object({}) do |(old_key, val), updated|
99
+ updated[self.class.camel_case(old_key)] = val
100
+ end
101
+ else
102
+ value
103
+ end
104
+ end
105
+
106
+ def parse_selenium_options(selenium_opts)
107
+ opts = Array(selenium_opts)
108
+
109
+ opts.each do |opt|
110
+ browser = BROWSER_NAMES[opt.class]
111
+ if browser
112
+ @browser_name = browser
113
+ else
114
+ W3C.each do |capability|
115
+ send("#{capability}=", opt[capability]) if opt[capability]
116
+ end
117
+ end
118
+ end
119
+
120
+ @selenium_options = opts.map(&:as_json).inject(:merge) || {}
121
+ end
122
+
45
123
  def create_variables(key, opts)
46
124
  key.each do |option|
47
125
  self.class.__send__(:attr_accessor, option)
@@ -53,5 +131,30 @@ module SimpleSauce
53
131
 
54
132
  raise ArgumentError, "#{opts.inspect} are not valid parameters for Options class"
55
133
  end
134
+
135
+ def build_name
136
+ # Jenkins
137
+ if ENV['BUILD_TAG']
138
+ "#{ENV['BUILD_NAME']}: #{ENV['BUILD_NUMBER']}"
139
+ # Bamboo
140
+ elsif ENV['bamboo_agentId']
141
+ "#{ENV['bamboo_shortJobName']}: #{ENV['bamboo_buildNumber']}"
142
+ # Travis
143
+ elsif ENV['TRAVIS_JOB_ID']
144
+ "#{ENV['TRAVIS_JOB_NAME']}: #{ENV['TRAVIS_JOB_NUMBER']}"
145
+ # CircleCI
146
+ elsif ENV['CIRCLE_JOB']
147
+ "#{ENV['CIRCLE_JOB']}: #{ENV['CIRCLE_BUILD_NUM']}"
148
+ # Gitlab
149
+ elsif ENV['CI']
150
+ "#{ENV['CI_JOB_NAME']}: #{ENV['CI_JOB_ID']}"
151
+ # Team City
152
+ elsif ENV['TEAMCITY_PROJECT_NAME']
153
+ "#{ENV['TEAMCITY_PROJECT_NAME']}: #{ENV['BUILD_NUMBER']}"
154
+ # Default
155
+ else
156
+ "Build Time - #{Time.now.to_i}"
157
+ end
158
+ end
56
159
  end
57
160
  end
@@ -5,54 +5,51 @@ require 'selenium-webdriver'
5
5
 
6
6
  module SimpleSauce
7
7
  class Session
8
+ DATA_CENTERS = {US_WEST: 'ondemand.us-west-1.saucelabs.com',
9
+ US_EAST: 'ondemand.us-east-1.saucelabs.com',
10
+ EU_VDC: 'ondemand.eu-central-1.saucelabs.com'}.freeze
11
+
8
12
  attr_writer :username, :access_key, :url
9
13
  attr_reader :driver, :options, :data_center
10
14
 
11
- def initialize(options = nil)
15
+ def initialize(options = nil, username: nil, access_key: nil, data_center: nil)
12
16
  @options = options || Options.new
13
- raise unless [Array, Options].include?(@options.class)
14
17
 
15
- self.data_center = :US_WEST
16
- @username = ENV['SAUCE_USERNAME']
17
- @access_key = ENV['SAUCE_ACCESS_KEY']
18
+ @username = username || ENV['SAUCE_USERNAME']
19
+ @access_key = access_key || ENV['SAUCE_ACCESS_KEY']
20
+ self.data_center = data_center || :US_WEST
18
21
  end
19
22
 
20
23
  def start
21
- @driver = Selenium::WebDriver.for :remote, url: url, desired_capabilities: options.capabilities
24
+ raise ArgumentError, "needs username; use `ENV['SAUCE_USERNAME']` or `Session#username=`" unless @username
25
+ raise ArgumentError, "needs access_key; use `ENV['SAUCE_ACCESS_KEY']` or `Session#access_key=`" unless @access_key
26
+
27
+ @driver = Selenium::WebDriver.for :remote, to_selenium
22
28
  end
23
29
 
24
30
  def stop(result)
31
+ return if @driver.nil?
32
+
25
33
  SauceWhisk::Jobs.change_status(@driver.session_id, result)
26
34
  @driver.quit
27
35
  end
28
36
 
29
37
  def data_center=(data_center)
38
+ unless DATA_CENTERS.key?(data_center)
39
+ msg = "#{data_center} is an invalid data center; specify :US_WEST, :US_EAST or :EU_VDC"
40
+ raise ArgumentError, msg
41
+ end
42
+
43
+ SauceWhisk.data_center = data_center
30
44
  @data_center = data_center
31
- @dc_url = case data_center
32
- when :US_WEST
33
- 'ondemand.saucelabs.com:443/wd/hub'
34
- when :US_EAST
35
- 'us-east-1.saucelabs.com:443/wd/hub'
36
- when :EU_VDC
37
- 'ondemand.eu-central-1.saucelabs.com:443/wd/hub'
38
- else
39
- msg = "#{data_center} is an invalid data center; specify :US_WEST, :US_EAST or :EU_VDC"
40
- raise ::ArgumentError, msg
41
- end
42
- SauceWhisk.data_center = @data_center
43
45
  end
44
46
 
45
47
  def url
46
- raise ArgumentError, "No user name was set; use `ENV['SAUCE_USERNAME']` or `Session#username=`" unless @username
47
- unless @access_key
48
- raise ArgumentError, "No access key was set; use `ENV['SAUCE_ACCESS_KEY']` or `Session#access_key=`"
49
- end
50
-
51
- @url ||= "https://#{@username}:#{@access_key}@#{@dc_url}"
48
+ @url ||= "https://#{@username}:#{@access_key}@#{DATA_CENTERS[data_center]}:443/wd/hub"
52
49
  end
53
50
 
54
51
  def to_selenium
55
- {url: url, desired_capabilities: Array(@options).map(&:as_json).inject(:merge)}
52
+ {url: url, desired_capabilities: options.capabilities}
56
53
  end
57
54
  end
58
55
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimpleSauce
4
- VERSION = '0.1.0'
4
+ VERSION = '1.0.0.pre.alpha'
5
5
  end
data/simple_sauce.gemspec CHANGED
@@ -27,7 +27,6 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'rubocop-rspec', '~>1.32'
28
28
  spec.add_development_dependency 'webmock', '~> 3.5'
29
29
 
30
- spec.add_runtime_dependency 'selenium-webdriver', '~> 3.0'
31
30
  spec.add_runtime_dependency 'sauce_whisk'
32
-
31
+ spec.add_runtime_dependency 'selenium-webdriver', '~> 3.142.0', '>= 3.142.7'
33
32
  end
data/spec/options.yml ADDED
@@ -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
data/spec/options_spec.rb CHANGED
@@ -4,18 +4,28 @@ require 'spec_helper'
4
4
 
5
5
  module SimpleSauce
6
6
  describe Options do
7
+ before do
8
+ ENV['BUILD_TAG'] = ''
9
+ ENV['BUILD_NAME'] = 'TEMP BUILD'
10
+ ENV['BUILD_NUMBER'] = '11'
11
+ end
12
+
13
+ after { ENV.delete 'BUILD_TAG' }
14
+
7
15
  describe '#new' do
8
16
  let(:default_options) do
9
17
  {'browserName' => 'chrome',
10
18
  'browserVersion' => 'latest',
11
19
  'platformName' => 'Windows 10',
12
- 'sauce:options' => {}}
20
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'}}
13
21
  end
14
22
 
15
23
  it 'uses latest Chrome version on Windows 10 by default' do
16
- sauce_opts = SimpleSauce::Options.new
24
+ options = Options.new
17
25
 
18
- expect(sauce_opts.capabilities).to eq(default_options)
26
+ expect(options.browser_name).to eq 'chrome'
27
+ expect(options.browser_version).to eq 'latest'
28
+ expect(options.platform_name).to eq 'Windows 10'
19
29
  end
20
30
 
21
31
  it 'accepts provided values for browser, browser version and platform name' do
@@ -28,51 +38,434 @@ module SimpleSauce
28
38
  expect(options.platform_name).to eq 'Mac'
29
39
  end
30
40
 
31
- it 'accepts Sauce Lab specific settings' do
32
- sauce_options = {max_duration: 1,
33
- command_timeout: 2,
34
- idle_timeout: 3,
35
- name: 'foo',
36
- build: 'bar',
37
- tags: %w[foo bar],
38
- parent_tunnel: 'bar',
39
- tunnel_identifier: 'foobar',
40
- screen_resolution: '10x10',
41
- time_zone: 'Foo',
42
- extended_debugging: true,
43
- capture_performance: true,
44
- record_video: false,
45
- video_upload_on_pass: false,
46
- record_screenshots: false,
47
- record_logs: false,
48
- username: 'foo',
49
- access_key: '1234',
50
- passed: true}
41
+ it 'accepts other w3c values' do
42
+ proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
43
+ timeouts = {implicit: 1,
44
+ page_load: 59,
45
+ script: 29}
46
+ options = Options.new(accept_insecure_certs: true,
47
+ page_load_strategy: 'eager',
48
+ proxy: proxy,
49
+ set_window_rect: true,
50
+ unhandled_prompt_behavior: 'accept',
51
+ strict_file_interactability: true,
52
+ timeouts: timeouts)
53
+
54
+ expect(options.accept_insecure_certs).to eq true
55
+ expect(options.page_load_strategy).to eq 'eager'
56
+ expect(options.proxy).to eq proxy
57
+ expect(options.set_window_rect).to eq true
58
+ expect(options.unhandled_prompt_behavior).to eq 'accept'
59
+ expect(options.strict_file_interactability).to eq true
60
+ expect(options.timeouts).to eq timeouts
61
+ end
62
+
63
+ it 'accepts Sauce Labs specific settings' do
64
+ custom_data = {foo: 'foo',
65
+ bar: 'bar'}
66
+ prerun = {executable: 'http://url.to/your/executable.exe',
67
+ args: ['--silent', '-a', '-q'],
68
+ background: false,
69
+ timeout: 120}
70
+ tags = %w[foo bar foobar]
71
+ sauce_options = {
72
+ avoid_proxy: true,
73
+ build: 'Sample Build Name',
74
+ capture_performance: true,
75
+ chromedriver_version: '71',
76
+ command_timeout: 2,
77
+ custom_data: custom_data,
78
+ extended_debugging: true,
79
+ idle_timeout: 3,
80
+ iedriver_version: '3.141.0',
81
+ max_duration: 300,
82
+ name: 'Sample Test Name',
83
+ parent_tunnel: 'Mommy',
84
+ prerun: prerun,
85
+ priority: 0,
86
+ public: 'team',
87
+ record_logs: false,
88
+ record_screenshots: false,
89
+ record_video: false,
90
+ screen_resolution: '10x10',
91
+ selenium_version: '3.141.59',
92
+ tags: tags,
93
+ time_zone: 'San Francisco',
94
+ tunnel_identifier: 'tunnelname',
95
+ video_upload_on_pass: false
96
+ }
97
+
98
+ options = Options.new(**sauce_options)
99
+
100
+ expect(options.avoid_proxy).to eq true
101
+ expect(options.build).to eq 'Sample Build Name'
102
+ expect(options.capture_performance).to eq true
103
+ expect(options.chromedriver_version).to eq '71'
104
+ expect(options.command_timeout).to eq 2
105
+ expect(options.custom_data).to eq custom_data
106
+ expect(options.extended_debugging).to eq true
107
+ expect(options.idle_timeout).to eq 3
108
+ expect(options.iedriver_version).to eq '3.141.0'
109
+ expect(options.max_duration).to eq 300
110
+ expect(options.name).to eq 'Sample Test Name'
111
+ expect(options.parent_tunnel).to eq 'Mommy'
112
+ expect(options.prerun).to eq prerun
113
+ expect(options.priority).to eq 0
114
+ expect(options.public).to eq 'team'
115
+ expect(options.record_logs).to eq false
116
+ expect(options.record_screenshots).to eq false
117
+ expect(options.record_video).to eq false
118
+ expect(options.screen_resolution).to eq '10x10'
119
+ expect(options.selenium_version).to eq '3.141.59'
120
+ expect(options.tags).to eq tags
121
+ expect(options.time_zone).to eq 'San Francisco'
122
+ expect(options.tunnel_identifier).to eq 'tunnelname'
123
+ expect(options.video_upload_on_pass).to eq false
124
+ end
125
+
126
+ it 'accepts Selenium Capabilities and overrides default browser' do
127
+ caps = Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true,
128
+ page_load_strategy: 'eager')
129
+ options = Options.new(selenium_options: caps)
130
+
131
+ expect(options.browser_name).to eq 'firefox'
132
+ expect(options.accept_insecure_certs).to eq true
133
+ expect(options.page_load_strategy).to eq 'eager'
134
+ end
135
+
136
+ it 'accepts Selenium Options and overrides default browser' do
137
+ browser_opts = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
138
+ options = Options.new(selenium_options: browser_opts)
51
139
 
52
- sauce_opts = SimpleSauce::Options.new(sauce_options)
140
+ expect(options.browser_name).to eq 'firefox'
141
+ expect(options.selenium_options['moz:firefoxOptions']).to eq('args' => ['--foo'])
142
+ end
53
143
 
54
- expected_options = default_options.merge('sauce:options' => {})
55
- sauce_options.each do |key, value|
56
- expected_options['sauce:options'][SimpleSauce::Options.send(:camel_case, key.to_s)] = value
57
- end
144
+ it 'accepts Selenium Capabilities and Options class instances' do
145
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(accept_insecure_certs: true,
146
+ page_load_strategy: 'eager')
147
+ browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['--foo'])
148
+ options = Options.new(selenium_options: [caps, browser_opts])
58
149
 
59
- expect(sauce_opts.capabilities).to eq(expected_options)
150
+ expect(options.page_load_strategy).to eq 'eager'
151
+ expect(options.accept_insecure_certs).to eq true
152
+ expect(options.selenium_options['goog:chromeOptions']).to eq('args' => ['--foo'])
153
+ end
154
+
155
+ it 'accepts W3C, Sauce, Browser Options and Capabilities at the same time' do
156
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(page_load_strategy: 'eager')
157
+ browser_opts = Selenium::WebDriver::Firefox::Options.new(args: ['--foo'])
158
+
159
+ options = Options.new(browser_version: '77',
160
+ accept_insecure_certs: true,
161
+ command_timeout: 2,
162
+ time_zone: 'Alaska',
163
+ selenium_options: [caps, browser_opts])
164
+
165
+ expect(options.browser_name).to eq 'firefox'
166
+ expect(options.browser_version).to eq '77'
167
+ expect(options.platform_name).to eq 'Windows 10'
168
+ expect(options.accept_insecure_certs).to eq true
169
+ expect(options.command_timeout).to eq 2
170
+ expect(options.time_zone).to eq 'Alaska'
171
+ expect(options.page_load_strategy).to eq 'eager'
172
+
173
+ expect(options.selenium_options['moz:firefoxOptions']).to eq('args' => ['--foo'])
174
+ end
175
+
176
+ it 'creates a default build value' do
177
+ options = Options.new
178
+ expect(options.build).to eq 'TEMP BUILD: 11'
60
179
  end
61
180
 
62
181
  it 'raises ArgumentError if parameter is not recognized as valid' do
63
- expect { SimpleSauce::Options.new(foo: 'bar') }.to raise_exception(ArgumentError)
182
+ expect { Options.new(foo: 'bar') }.to raise_exception(ArgumentError)
183
+ end
184
+ end
185
+
186
+ describe '#accessors' do
187
+ it 'parses w3c values' do
188
+ proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
189
+ timeouts = {implicit: 1,
190
+ page_load: 59,
191
+ script: 29}
192
+
193
+ options = Options.new
194
+
195
+ options.browser_name = 'firefox'
196
+ options.browser_version = '7'
197
+ options.platform_name = 'macOS 10.14'
198
+ options.accept_insecure_certs = true
199
+ options.page_load_strategy = 'eager'
200
+ options.proxy = proxy
201
+ options.set_window_rect = true
202
+ options.unhandled_prompt_behavior = 'accept'
203
+ options.strict_file_interactability = true
204
+ options.timeouts = timeouts
205
+ options.platform_name
206
+
207
+ expect(options.browser_name).to eq 'firefox'
208
+ expect(options.browser_version).to eq '7'
209
+ expect(options.platform_name).to eq 'macOS 10.14'
210
+ expect(options.accept_insecure_certs).to eq true
211
+ expect(options.page_load_strategy).to eq 'eager'
212
+ expect(options.proxy).to eq proxy
213
+ expect(options.set_window_rect).to eq true
214
+ expect(options.unhandled_prompt_behavior).to eq 'accept'
215
+ expect(options.strict_file_interactability).to eq true
216
+ expect(options.timeouts).to eq timeouts
217
+ end
218
+
219
+ it 'parses Sauce values' do
220
+ custom_data = {foo: 'foo',
221
+ bar: 'bar'}
222
+ prerun = {executable: 'http://url.to/your/executable.exe',
223
+ args: ['--silent', '-a', '-q'],
224
+ background: false,
225
+ timeout: 120}
226
+ tags = %w[foo bar foobar]
227
+
228
+ options = Options.new
229
+
230
+ options.avoid_proxy = true
231
+ options.build = 'Sample Build Name'
232
+ options.capture_performance = true
233
+ options.chromedriver_version = '71'
234
+ options.command_timeout = 2
235
+ options.custom_data = custom_data
236
+ options.extended_debugging = true
237
+ options.idle_timeout = 3
238
+ options.iedriver_version = '3.141.0'
239
+ options.max_duration = 300
240
+ options.name = 'Sample Test Name'
241
+ options.parent_tunnel = 'Mommy'
242
+ options.prerun = prerun
243
+ options.priority = 0
244
+ options.public = 'team'
245
+ options.record_logs = false
246
+ options.record_screenshots = false
247
+ options.record_video = false
248
+ options.screen_resolution = '10x10'
249
+ options.selenium_version = '3.141.59'
250
+ options.tags = tags
251
+ options.time_zone = 'San Francisco'
252
+ options.tunnel_identifier = 'tunnelname'
253
+ options.video_upload_on_pass = false
254
+
255
+ expect(options.avoid_proxy).to eq true
256
+ expect(options.build).to eq 'Sample Build Name'
257
+ expect(options.capture_performance).to eq true
258
+ expect(options.chromedriver_version).to eq '71'
259
+ expect(options.command_timeout).to eq 2
260
+ expect(options.custom_data).to eq custom_data
261
+ expect(options.extended_debugging).to eq true
262
+ expect(options.idle_timeout).to eq 3
263
+ expect(options.iedriver_version).to eq '3.141.0'
264
+ expect(options.max_duration).to eq 300
265
+ expect(options.name).to eq 'Sample Test Name'
266
+ expect(options.parent_tunnel).to eq 'Mommy'
267
+ expect(options.prerun).to eq prerun
268
+ expect(options.priority).to eq 0
269
+ expect(options.public).to eq 'team'
270
+ expect(options.record_logs).to eq false
271
+ expect(options.record_screenshots).to eq false
272
+ expect(options.record_video).to eq false
273
+ expect(options.screen_resolution).to eq '10x10'
274
+ expect(options.selenium_version).to eq '3.141.59'
275
+ expect(options.tags).to eq tags
276
+ expect(options.time_zone).to eq 'San Francisco'
277
+ expect(options.tunnel_identifier).to eq 'tunnelname'
278
+ expect(options.video_upload_on_pass).to eq false
64
279
  end
65
280
  end
66
281
 
67
- it 'uses accessor' do
68
- sauce_opts = SimpleSauce::Options.new
69
- sauce_opts.browser_name = 'firefox'
70
- sauce_opts.idle_timeout = 3
282
+ describe '#add_capabilities' do
283
+ it 'loads options from configuration' do
284
+ timeouts = {implicit: 1,
285
+ page_load: 59,
286
+ script: 29}
287
+ custom_data = {foo: 'foo',
288
+ bar: 'bar'}
289
+ prerun = {executable: 'http://url.to/your/executable.exe',
290
+ args: ['--silent', '-a', '-q'],
291
+ background: false,
292
+ timeout: 120}
293
+ tags = %w[foo bar foobar]
294
+
295
+ options = Options.new
296
+ yaml = YAML.load_file('spec/options.yml')
297
+ options.add_capabilities(yaml['example_values'])
298
+
299
+ expect(options.browser_name).to eq 'firefox'
300
+ expect(options.browser_version).to eq '123'
301
+ expect(options.platform_name).to eq 'Mac'
302
+ expect(options.accept_insecure_certs).to eq true
303
+ expect(options.page_load_strategy).to eq 'eager'
304
+ expect(options.set_window_rect).to eq true
305
+ expect(options.unhandled_prompt_behavior).to eq 'accept'
306
+ expect(options.strict_file_interactability).to eq true
307
+ expect(options.timeouts).to eq timeouts
308
+ expect(options.avoid_proxy).to eq true
309
+ expect(options.build).to eq 'Sample Build Name'
310
+ expect(options.capture_performance).to eq true
311
+ expect(options.chromedriver_version).to eq '71'
312
+ expect(options.command_timeout).to eq 2
313
+ expect(options.custom_data).to eq custom_data
314
+ expect(options.extended_debugging).to eq true
315
+ expect(options.idle_timeout).to eq 3
316
+ expect(options.iedriver_version).to eq '3.141.0'
317
+ expect(options.max_duration).to eq 300
318
+ expect(options.name).to eq 'Sample Test Name'
319
+ expect(options.parent_tunnel).to eq 'Mommy'
320
+ expect(options.prerun).to eq prerun
321
+ expect(options.priority).to eq 0
322
+ expect(options.public).to eq 'team'
323
+ expect(options.record_logs).to eq false
324
+ expect(options.record_screenshots).to eq false
325
+ expect(options.record_video).to eq false
326
+ expect(options.screen_resolution).to eq '10x10'
327
+ expect(options.selenium_version).to eq '3.141.59'
328
+ expect(options.tags).to eq tags
329
+ expect(options.time_zone).to eq 'San Francisco'
330
+ expect(options.tunnel_identifier).to eq 'tunnelname'
331
+ expect(options.video_upload_on_pass).to eq false
332
+ end
333
+
334
+ it 'raises exception if value not recognized' do
335
+ options = Options.new
336
+ yaml = YAML.load_file('spec/options.yml')
337
+
338
+ msg = 'foo is not a valid parameter for Options class'
339
+ expect { options.add_capabilities(yaml['invalid_option']) }.to raise_exception(ArgumentError, msg)
340
+ end
341
+ end
342
+
343
+ describe '#capabilities' do
344
+ it 'correctly generates capabilities for w3c values' do
345
+ proxy = Selenium::WebDriver::Proxy.new(ssl: 'foo')
346
+ timeouts = {implicit: 1,
347
+ page_load: 59,
348
+ script: 29}
349
+
350
+ options = Options.new(browser_name: 'firefox',
351
+ platform_name: 'Mac',
352
+ accept_insecure_certs: true,
353
+ page_load_strategy: 'eager',
354
+ proxy: proxy,
355
+ set_window_rect: true,
356
+ unhandled_prompt_behavior: 'accept',
357
+ strict_file_interactability: true,
358
+ timeouts: timeouts)
359
+
360
+ expect(options.capabilities).to eq('browserName' => 'firefox',
361
+ 'browserVersion' => 'latest',
362
+ 'platformName' => 'Mac',
363
+ 'acceptInsecureCerts' => true,
364
+ 'pageLoadStrategy' => 'eager',
365
+ 'proxy' => {'proxyType' => 'MANUAL', 'sslProxy' => 'foo'},
366
+ 'setWindowRect' => true,
367
+ 'unhandledPromptBehavior' => 'accept',
368
+ 'strictFileInteractability' => true,
369
+ 'timeouts' => {'implicit' => 1,
370
+ 'pageLoad' => 59,
371
+ 'script' => 29},
372
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'})
373
+ end
71
374
 
72
- expect(sauce_opts.capabilities).to eq('browserName' => 'firefox',
73
- 'browserVersion' => 'latest',
74
- 'platformName' => 'Windows 10',
75
- 'sauce:options' => {'idleTimeout' => 3})
375
+ it 'correctly generates capabilities for sauce values' do
376
+ custom_data = {foo: 'foo',
377
+ bar: 'bar'}
378
+ prerun = {'executable': 'http://url.to/your/executable.exe',
379
+ args: ['--silent', '-a', '-q'],
380
+ background: false,
381
+ timeout: 120}
382
+ tags = %w[foo bar foobar]
383
+ sauce_options = {avoid_proxy: true,
384
+ build: 'Sample Build Name',
385
+ capture_performance: true,
386
+ chromedriver_version: '71',
387
+ command_timeout: 2,
388
+ custom_data: custom_data,
389
+ extended_debugging: true,
390
+ idle_timeout: 3,
391
+ iedriver_version: '3.141.0',
392
+ max_duration: 300,
393
+ name: 'Sample Test Name',
394
+ parent_tunnel: 'Mommy',
395
+ prerun: prerun,
396
+ priority: 0,
397
+ public: 'team',
398
+ record_logs: false,
399
+ record_screenshots: false,
400
+ record_video: false,
401
+ screen_resolution: '10x10',
402
+ selenium_version: '3.141.59',
403
+ tags: tags,
404
+ time_zone: 'San Francisco',
405
+ tunnel_identifier: 'tunnelname',
406
+ video_upload_on_pass: false}
407
+
408
+ options = Options.new(**sauce_options)
409
+
410
+ prerun_caps = {'executable' => 'http://url.to/your/executable.exe',
411
+ 'args' => ['--silent', '-a', '-q'],
412
+ 'background' => false,
413
+ 'timeout' => 120}
414
+
415
+ expect(options.capabilities).to eq('browserName' => 'chrome',
416
+ 'browserVersion' => 'latest',
417
+ 'platformName' => 'Windows 10',
418
+ 'sauce:options' => {'build' => 'Sample Build Name',
419
+ 'avoidProxy' => true,
420
+ 'capturePerformance' => true,
421
+ 'chromedriverVersion' => '71',
422
+ 'commandTimeout' => 2,
423
+ 'customData' => {'foo' => 'foo',
424
+ 'bar' => 'bar'},
425
+ 'extendedDebugging' => true,
426
+ 'idleTimeout' => 3,
427
+ 'iedriverVersion' => '3.141.0',
428
+ 'maxDuration' => 300,
429
+ 'name' => 'Sample Test Name',
430
+ 'parentTunnel' => 'Mommy',
431
+ 'prerun' => prerun_caps,
432
+ 'priority' => 0,
433
+ 'public' => 'team',
434
+ 'recordLogs' => false,
435
+ 'recordScreenshots' => false,
436
+ 'recordVideo' => false,
437
+ 'screenResolution' => '10x10',
438
+ 'seleniumVersion' => '3.141.59',
439
+ 'tags' => %w[foo bar foobar],
440
+ 'timeZone' => 'San Francisco',
441
+ 'tunnelIdentifier' => 'tunnelname',
442
+ 'videoUploadOnPass' => false})
443
+ end
444
+
445
+ it 'correctly generates capabilities for selenium object values' do
446
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(accept_insecure_certs: true,
447
+ page_load_strategy: 'eager')
448
+ browser_opts = Selenium::WebDriver::Chrome::Options.new(args: ['--foo'])
449
+ options = Options.new(selenium_options: [caps, browser_opts])
450
+
451
+ jwp_defaults = {'cssSelectorsEnabled' => true,
452
+ 'javascriptEnabled' => true,
453
+ 'nativeEvents' => false,
454
+ 'platform' => 'ANY',
455
+ 'rotatable' => false,
456
+ 'takesScreenshot' => false,
457
+ 'version' => ''}
458
+
459
+ expected_caps = {'browserName' => 'chrome',
460
+ 'browserVersion' => 'latest',
461
+ 'platformName' => 'Windows 10',
462
+ 'acceptInsecureCerts' => true,
463
+ 'pageLoadStrategy' => 'eager',
464
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'},
465
+ 'goog:chromeOptions' => {'args' => ['--foo']}}
466
+
467
+ expect(options.capabilities).to eq(jwp_defaults.merge(expected_caps))
468
+ end
76
469
  end
77
470
  end
78
471
  end
data/spec/session_spec.rb CHANGED
@@ -12,37 +12,43 @@ module SimpleSauce
12
12
  end
13
13
  let(:default_capabilities) do
14
14
  {browserName: 'chrome',
15
- platformName: 'Windows 10',
16
15
  browserVersion: 'latest',
17
- 'sauce:options': {}}
16
+ platformName: 'Windows 10',
17
+ 'sauce:options': {build: 'TEMP BUILD: 11'}}
18
18
  end
19
19
 
20
20
  def expect_request(body: nil, endpoint: nil)
21
21
  body = (body || {desiredCapabilities: default_capabilities,
22
22
  capabilities: {firstMatch: [default_capabilities]}}).to_json
23
- endpoint ||= 'https://ondemand.saucelabs.com/wd/hub/session'
23
+ endpoint ||= 'https://ondemand.us-west-1.saucelabs.com/wd/hub/session'
24
24
  stub_request(:post, endpoint).with(body: body).to_return(valid_response)
25
25
  end
26
26
 
27
27
  before do
28
+ ENV['BUILD_TAG'] = ''
29
+ ENV['BUILD_NAME'] = 'TEMP BUILD'
30
+ ENV['BUILD_NUMBER'] = '11'
28
31
  ENV['SAUCE_USERNAME'] = 'foo'
29
32
  ENV['SAUCE_ACCESS_KEY'] = '123'
30
33
  end
31
34
 
32
35
  after do
36
+ ENV.delete 'BUILD_TAG'
37
+ ENV.delete 'BUILD_NAME'
38
+ ENV.delete 'BUILD_NUMBER'
33
39
  ENV.delete 'SAUCE_USERNAME'
34
40
  ENV.delete 'SAUCE_ACCESS_KEY'
35
41
  end
36
42
 
37
43
  describe '#new' do
38
- it 'uses latest Chrome version and Windows 10 by default' do
39
- session = SimpleSauce::Session.new
44
+ it 'creates default Options instance if none is provided' do
45
+ session = Session.new
40
46
 
41
- expected_results = {url: 'https://foo:123@ondemand.saucelabs.com:443/wd/hub',
47
+ expected_results = {url: 'https://foo:123@ondemand.us-west-1.saucelabs.com:443/wd/hub',
42
48
  desired_capabilities: {'browserName' => 'chrome',
43
49
  'browserVersion' => 'latest',
44
50
  'platformName' => 'Windows 10',
45
- 'sauce:options' => {}}}
51
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'}}}
46
52
  expect(session.to_selenium).to eq expected_results
47
53
  end
48
54
 
@@ -50,58 +56,37 @@ module SimpleSauce
50
56
  sauce_opts = Options.new(browser_version: '123',
51
57
  platform_name: 'Mac',
52
58
  idle_timeout: 4)
53
- session = SimpleSauce::Session.new(sauce_opts)
59
+ session = Session.new(sauce_opts)
54
60
 
55
- expected_results = {url: 'https://foo:123@ondemand.saucelabs.com:443/wd/hub',
61
+ expected_results = {url: 'https://foo:123@ondemand.us-west-1.saucelabs.com:443/wd/hub',
56
62
  desired_capabilities: {'browserName' => 'chrome',
57
63
  'browserVersion' => '123',
58
64
  'platformName' => 'Mac',
59
- 'sauce:options' => {'idleTimeout' => 4}}}
65
+ 'sauce:options' => {'idleTimeout' => 4,
66
+ 'build' => 'TEMP BUILD: 11'}}}
60
67
  expect(session.to_selenium).to eq expected_results
61
68
  end
62
69
 
63
- it 'uses provided Options with Selenium Capabilities and Options classes' do
64
- sauce_options = {idle_timeout: 4,
65
- browser_name: 'Firefox',
66
- platform_name: 'Mac OS'}
67
-
68
- se_options = {accept_insecure_certs: false,
69
- page_load_strategy: 'eager'}
70
-
71
- browser_options = {args: ['-foo']}
72
-
73
- sauce_opts = SimpleSauce::Options.new(sauce_options)
74
- se_opts = Selenium::WebDriver::Remote::Capabilities.firefox(se_options)
75
- browser_opts = Selenium::WebDriver::Firefox::Options.new(browser_options)
76
-
77
- session = SimpleSauce::Session.new([sauce_opts, se_opts, browser_opts])
78
-
79
- expected_capabilities = {'browserName' => 'firefox',
80
- 'platformName' => 'Mac OS',
81
- 'browserVersion' => 'latest',
82
- 'acceptInsecureCerts' => false,
83
- 'pageLoadStrategy' => 'eager',
84
- 'moz:firefoxOptions' => {args: ['-foo']},
85
- 'sauce:options' => {'idleTimeout' => 4}}
86
-
87
- oss_capabilities = {'cssSelectorsEnabled' => false,
88
- 'javascriptEnabled' => false,
89
- 'marionette' => true,
90
- 'nativeEvents' => false,
91
- 'platform' => 'ANY',
92
- 'rotatable' => false,
93
- 'takesScreenshot' => false,
94
- 'timeouts' => {},
95
- 'version' => ''}
96
-
97
- expected_results = {url: 'https://foo:123@ondemand.saucelabs.com:443/wd/hub',
98
- desired_capabilities: expected_capabilities.merge(oss_capabilities)}
70
+ it 'defaults to US West data Center' do
71
+ session = Session.new
72
+ expect(session.data_center).to eq :US_WEST
73
+ end
74
+
75
+ it 'uses provided Data Center, Username, Access Key' do
76
+ session = Session.new(data_center: :EU_VDC,
77
+ username: 'bar',
78
+ access_key: '321')
79
+
80
+ expected_results = {url: 'https://bar:321@ondemand.eu-central-1.saucelabs.com:443/wd/hub',
81
+ desired_capabilities: {'browserName' => 'chrome',
82
+ 'browserVersion' => 'latest',
83
+ 'platformName' => 'Windows 10',
84
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'}}}
99
85
  expect(session.to_selenium).to eq expected_results
100
86
  end
101
87
 
102
- it 'defaults to US West data Center' do
103
- session = SimpleSauce::Session.new
104
- expect(session.data_center).to eq :US_WEST
88
+ it 'raises exception if data center is invalid' do
89
+ expect { Session.new(data_center: :FOO) }.to raise_exception(ArgumentError)
105
90
  end
106
91
  end
107
92
 
@@ -109,20 +94,20 @@ module SimpleSauce
109
94
  it 'starts the session and returns Selenium Driver instance' do
110
95
  expect_request
111
96
 
112
- driver = SimpleSauce::Session.new.start
97
+ driver = Session.new.start
113
98
  expect(driver).to be_a Selenium::WebDriver::Driver
114
99
  end
115
100
 
116
101
  it 'raises exception if no username set' do
117
102
  ENV.delete('SAUCE_USERNAME')
118
103
 
119
- expect { SimpleSauce::Session.new.start }.to raise_exception(ArgumentError)
104
+ expect { Session.new.start }.to raise_exception(ArgumentError)
120
105
  end
121
106
 
122
107
  it 'raises exception if no access key set' do
123
108
  ENV.delete('SAUCE_ACCESS_KEY')
124
109
 
125
- expect { SimpleSauce::Session.new.start }.to raise_exception(ArgumentError)
110
+ expect { Session.new.start }.to raise_exception(ArgumentError)
126
111
  end
127
112
  end
128
113
 
@@ -133,8 +118,7 @@ module SimpleSauce
133
118
  allow(driver).to receive :quit
134
119
  allow(SauceWhisk::Jobs).to receive(:change_status).with('1234', true)
135
120
 
136
- session = SimpleSauce::Session.new
137
-
121
+ session = Session.new
138
122
  session.start
139
123
  session.stop(true)
140
124
 
@@ -145,14 +129,14 @@ module SimpleSauce
145
129
 
146
130
  describe '#data_center=' do
147
131
  it 'overrides default value for data center' do
148
- session = SimpleSauce::Session.new
132
+ session = Session.new
149
133
  session.data_center = :US_EAST
150
134
 
151
- expect(session.url).to eq('https://foo:123@us-east-1.saucelabs.com:443/wd/hub')
135
+ expect(session.url).to eq('https://foo:123@ondemand.us-east-1.saucelabs.com:443/wd/hub')
152
136
  end
153
137
 
154
138
  it 'raises exception if data center is invalid' do
155
- session = SimpleSauce::Session.new
139
+ session = Session.new
156
140
 
157
141
  expect { session.data_center = :FOO }.to raise_exception(ArgumentError)
158
142
  end
@@ -160,19 +144,33 @@ module SimpleSauce
160
144
 
161
145
  describe '#username=' do
162
146
  it 'accepts provided username' do
163
- session = SimpleSauce::Session.new
147
+ session = Session.new
164
148
  session.username = 'name'
165
149
 
166
- expect(session.url).to eq('https://name:123@ondemand.saucelabs.com:443/wd/hub')
150
+ expect(session.url).to eq('https://name:123@ondemand.us-west-1.saucelabs.com:443/wd/hub')
167
151
  end
168
152
  end
169
153
 
170
154
  describe '#access_key=' do
171
155
  it 'accepts provided access key' do
172
- session = SimpleSauce::Session.new
156
+ session = Session.new
173
157
  session.access_key = '456'
174
158
 
175
- expect(session.url).to eq('https://foo:456@ondemand.saucelabs.com:443/wd/hub')
159
+ expect(session.url).to eq('https://foo:456@ondemand.us-west-1.saucelabs.com:443/wd/hub')
160
+ end
161
+ end
162
+
163
+ describe '#url=' do
164
+ it 'allows user to override default URL' do
165
+ session = Session.new
166
+ session.url = 'https://bar:321@mycustomurl/foo/wd/hub:8080'
167
+
168
+ expected_results = {url: 'https://bar:321@mycustomurl/foo/wd/hub:8080',
169
+ desired_capabilities: {'browserName' => 'chrome',
170
+ 'browserVersion' => 'latest',
171
+ 'platformName' => 'Windows 10',
172
+ 'sauce:options' => {'build' => 'TEMP BUILD: 11'}}}
173
+ expect(session.to_selenium).to eq expected_results
176
174
  end
177
175
  end
178
176
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_sauce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0.pre.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-06 00:00:00.000000000 Z
11
+ date: 2020-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,33 +109,39 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.5'
111
111
  - !ruby/object:Gem::Dependency
112
- name: selenium-webdriver
112
+ name: sauce_whisk
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '3.0'
117
+ version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '3.0'
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: sauce_whisk
126
+ name: selenium-webdriver
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.142.0
129
132
  - - ">="
130
133
  - !ruby/object:Gem::Version
131
- version: '0'
134
+ version: 3.142.7
132
135
  type: :runtime
133
136
  prerelease: false
134
137
  version_requirements: !ruby/object:Gem::Requirement
135
138
  requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: 3.142.0
136
142
  - - ">="
137
143
  - !ruby/object:Gem::Version
138
- version: '0'
144
+ version: 3.142.7
139
145
  description: Reduces complexity in user code for running Selenium tests on Sauce Labs
140
146
  email:
141
147
  - titusfortner@gmail.com
@@ -156,6 +162,7 @@ files:
156
162
  - lib/simple_sauce/session.rb
157
163
  - lib/simple_sauce/version.rb
158
164
  - simple_sauce.gemspec
165
+ - spec/options.yml
159
166
  - spec/options_spec.rb
160
167
  - spec/session_spec.rb
161
168
  - spec/spec_helper.rb
@@ -174,15 +181,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
181
  version: '0'
175
182
  required_rubygems_version: !ruby/object:Gem::Requirement
176
183
  requirements:
177
- - - ">="
184
+ - - ">"
178
185
  - !ruby/object:Gem::Version
179
- version: '0'
186
+ version: 1.3.1
180
187
  requirements: []
181
188
  rubygems_version: 3.0.3
182
189
  signing_key:
183
190
  specification_version: 4
184
191
  summary: Simple interface for interacting with Sauce Labs.
185
192
  test_files:
193
+ - spec/options.yml
186
194
  - spec/options_spec.rb
187
195
  - spec/session_spec.rb
188
196
  - spec/spec_helper.rb