simple_sauce 0.1.0 → 1.0.0.pre.alpha

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: 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