testcentricity_web 4.3.1 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -12
  3. data/LICENSE.md +1 -1
  4. data/README.md +1794 -697
  5. data/lib/devices/devices.yml +144 -216
  6. data/lib/testcentricity_web/browser_helper.rb +33 -4
  7. data/lib/testcentricity_web/data_objects/environment.rb +96 -13
  8. data/lib/testcentricity_web/exception_queue_helper.rb +5 -6
  9. data/lib/testcentricity_web/version.rb +1 -1
  10. data/lib/testcentricity_web/web_core/page_object.rb +53 -49
  11. data/lib/testcentricity_web/web_core/page_objects_helper.rb +20 -11
  12. data/lib/testcentricity_web/web_core/page_section.rb +31 -34
  13. data/lib/testcentricity_web/web_core/webdriver_helper.rb +379 -252
  14. data/lib/testcentricity_web/web_elements/audio.rb +6 -4
  15. data/lib/testcentricity_web/web_elements/button.rb +7 -4
  16. data/lib/testcentricity_web/web_elements/checkbox.rb +149 -147
  17. data/lib/testcentricity_web/web_elements/file_field.rb +38 -36
  18. data/lib/testcentricity_web/web_elements/image.rb +75 -70
  19. data/lib/testcentricity_web/web_elements/label.rb +6 -4
  20. data/lib/testcentricity_web/web_elements/link.rb +15 -13
  21. data/lib/testcentricity_web/web_elements/list.rb +171 -169
  22. data/lib/testcentricity_web/web_elements/media.rb +384 -379
  23. data/lib/testcentricity_web/web_elements/radio.rb +135 -133
  24. data/lib/testcentricity_web/web_elements/range.rb +16 -29
  25. data/lib/testcentricity_web/web_elements/select_list.rb +247 -245
  26. data/lib/testcentricity_web/web_elements/table.rb +575 -573
  27. data/lib/testcentricity_web/web_elements/textfield.rb +143 -139
  28. data/lib/testcentricity_web/web_elements/ui_element.rb +1171 -0
  29. data/lib/testcentricity_web/web_elements/video.rb +39 -37
  30. data/lib/testcentricity_web/world_extensions.rb +37 -4
  31. data/lib/testcentricity_web.rb +4 -23
  32. metadata +27 -79
  33. data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +0 -1148
@@ -1,7 +1,6 @@
1
1
  require 'selenium-webdriver'
2
2
  require 'os'
3
3
  require 'browserstack/local'
4
- require 'webdrivers'
5
4
  require 'fileutils'
6
5
 
7
6
 
@@ -10,41 +9,47 @@ module TestCentricity
10
9
  include Capybara::DSL
11
10
 
12
11
  attr_accessor :bs_local
12
+ attr_accessor :initialized
13
13
  attr_accessor :downloads_path
14
14
  attr_accessor :endpoint
15
15
  attr_accessor :capabilities
16
+ attr_accessor :drivers
16
17
 
17
18
  def self.initialize_web_driver(options = nil)
19
+ @initialized ||= false
20
+ initialize_downloads unless @initialized
18
21
  @endpoint = nil
19
22
  @capabilities = nil
23
+ Environ.driver_name = nil
24
+ Environ.device_orientation = nil
20
25
  if options.is_a?(String)
21
26
  Capybara.app_host = options
22
27
  elsif options.is_a?(Hash)
23
28
  Capybara.app_host = options[:app_host] if options.key?(:app_host)
24
29
  @endpoint = options[:endpoint] if options.key?(:endpoint)
25
- @capabilities = options[:desired_capabilities] if options.key?(:desired_capabilities)
30
+ @capabilities = options[:capabilities] if options.key?(:capabilities)
31
+ Environ.driver = options[:driver] if options.key?(:driver)
32
+ Environ.driver_name = options[:driver_name] if options.key?(:driver_name)
33
+ Environ.device_type = options[:device_type] if options.key?(:device_type)
34
+ Environ.browser_size = if options.key?(:browser_size)
35
+ options[:browser_size]
36
+ else
37
+ ENV['BROWSER_SIZE'] if ENV['BROWSER_SIZE']
38
+ end
26
39
  end
27
40
  # determine browser type and driver
28
- Environ.browser = ENV['WEB_BROWSER'] if ENV['WEB_BROWSER']
29
- Environ.driver = if ENV['DRIVER']
30
- ENV['DRIVER'].downcase.to_sym
31
- else
32
- :webdriver
33
- end
34
- # set downloads folder path
35
- @downloads_path = "#{Dir.pwd}/downloads"
36
- if ENV['PARALLEL']
37
- Environ.parallel = true
38
- Environ.process_num = ENV['TEST_ENV_NUMBER']
39
- if Dir.exist?(@downloads_path)
40
- @downloads_path = "#{@downloads_path}/#{ENV['TEST_ENV_NUMBER']}"
41
- Dir.mkdir(@downloads_path) unless Dir.exist?(@downloads_path)
42
- end
41
+ if @capabilities.nil?
42
+ Environ.driver = ENV['DRIVER'].downcase.to_sym if ENV['DRIVER']
43
+ Environ.browser = ENV['WEB_BROWSER'] if ENV['WEB_BROWSER']
44
+ Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
43
45
  else
44
- Environ.parallel = false
46
+ Environ.browser = @capabilities[:browserName]
47
+ Environ.device_orientation = @capabilities[:orientation] if @capabilities[:orientation]
48
+ Environ.device_orientation = @capabilities[:'appium:orientation'] if @capabilities[:'appium:orientation']
45
49
  end
46
- @downloads_path = @downloads_path.tr('/', "\\") if OS.windows?
47
-
50
+ Environ.browser = Environ.browser.downcase.to_sym if Environ.browser.is_a?(String)
51
+ Environ.driver = :webdriver if Environ.driver.nil?
52
+ Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
48
53
  # assume that we're testing within a local desktop web browser
49
54
  Environ.platform = :desktop
50
55
  Environ.headless = false
@@ -56,13 +61,11 @@ module TestCentricity
56
61
  initialize_appium
57
62
  'Appium'
58
63
  when :webdriver
59
- if ENV['SELENIUM'] == 'remote'
60
- initialize_remote
61
- 'Selenium Grid'
62
- else
63
- initialize_local_browser
64
- 'local browser instance'
65
- end
64
+ initialize_local_browser
65
+ 'local browser instance'
66
+ when :selenium_grid, :grid
67
+ initialize_remote
68
+ 'Selenium Grid'
66
69
  when :browserstack
67
70
  initialize_browserstack
68
71
  'Browserstack cloud service'
@@ -70,41 +73,76 @@ module TestCentricity
70
73
  initialize_testingbot
71
74
  'TestingBot cloud service'
72
75
  # :nocov:
73
- when :lambdatest
74
- initialize_lambdatest
75
- 'LambdaTest cloud service'
76
76
  when :saucelabs
77
77
  initialize_saucelabs
78
78
  'Sauce Labs cloud service'
79
+ when :lambdatest
80
+ initialize_lambdatest
81
+ 'LambdaTest cloud service'
79
82
  # :nocov:
83
+ else
84
+ raise "#{Environ.driver} is not a supported driver"
80
85
  end
81
86
 
82
87
  # set browser window size only if testing with a desktop web browser
83
- unless Environ.is_device? || Environ.is_simulator? || Capybara.current_driver == :appium
88
+ unless Environ.is_device? || Environ.is_simulator? || Environ.driver == :appium
84
89
  initialize_browser_size
85
90
  end
86
91
 
87
92
  # set Capybara's server port if PARALLEL_PORT is true
88
- Capybara.server_port = 9887 + ENV['TEST_ENV_NUMBER'].to_i if ENV['PARALLEL'] && ENV['PARALLEL_PORT']
93
+ Capybara.server_port = 9887 + ENV['TEST_ENV_NUMBER'].to_i if Environ.parallel
89
94
 
90
95
  Environ.session_state = :running
91
96
  puts "Using #{Environ.browser} browser via #{context}"
97
+ # add the new driver to the driver queue
98
+ @drivers[Environ.driver_name] = Environ.driver_state
92
99
  end
93
100
 
94
- def self.set_domain(url)
95
- Capybara.app_host = url
101
+ def self.activate_driver(driver_name)
102
+ driver_state = @drivers[driver_name]
103
+ raise "Could not find a driver named '#{driver_name}'" if driver_state.nil?
104
+
105
+ Environ.restore_driver_state(driver_state)
106
+ Capybara.current_driver = driver_name
107
+ Capybara.default_driver = driver_name
108
+ end
109
+
110
+ # Return the number of driver instances
111
+ #
112
+ # @return [Integer]
113
+ def self.num_drivers
114
+ @drivers.length
115
+ end
116
+
117
+ # Close all browsers and terminate all driver instances
118
+ def self.close_all_drivers
119
+ @drivers.each do |key, _value|
120
+ Environ.restore_driver_state(@drivers[key])
121
+ Capybara.current_driver = key
122
+ Capybara.default_driver = key
123
+ Capybara.page.driver.quit
124
+ Capybara.current_session.quit
125
+ @drivers.delete(key)
126
+ end
127
+ Capybara.reset_sessions!
128
+ Environ.session_state = :quit
129
+ Capybara.current_driver = nil
130
+ @drivers = {}
131
+ @initialized = false
96
132
  end
97
133
 
98
134
  def self.initialize_browser_size
99
- # tile browser windows if running in multiple parallel threads and BROWSER_TILE environment variable is true
100
- if ENV['PARALLEL'] && ENV['BROWSER_TILE']
101
- # :nocov:
102
- thread = ENV['TEST_ENV_NUMBER'].to_i
135
+ # tile browser windows if BROWSER_TILE environment variable is true and running in multiple parallel threads
136
+ if ENV['BROWSER_TILE'] && (Environ.parallel || @drivers.length > 1)
137
+ thread = if Environ.parallel
138
+ ENV['TEST_ENV_NUMBER'].to_i
139
+ else
140
+ @drivers.length
141
+ end
103
142
  if thread > 1
104
143
  Browsers.set_browser_window_position(100 * thread - 1, 100 * thread - 1)
105
144
  sleep(1)
106
145
  end
107
- # :nocov:
108
146
  else
109
147
  Browsers.set_browser_window_position(10, 10)
110
148
  sleep(1)
@@ -112,20 +150,30 @@ module TestCentricity
112
150
 
113
151
  browser = Environ.browser.to_s
114
152
  if Environ.is_desktop?
115
- if ENV['BROWSER_SIZE'] == 'max'
153
+ case
154
+ when ENV['BROWSER_SIZE'] == 'max'
116
155
  Browsers.maximize_browser
117
- elsif ENV['BROWSER_SIZE']
156
+ when ENV['BROWSER_SIZE']
118
157
  Browsers.set_browser_window_size(ENV['BROWSER_SIZE'])
158
+ when Environ.browser_size == 'max'
159
+ Browsers.maximize_browser
160
+ when Environ.browser_size
161
+ Browsers.set_browser_window_size(Environ.browser_size)
119
162
  else
120
- Browsers.set_browser_window_size(Browsers.browser_size(browser, ENV['ORIENTATION']))
163
+ Browsers.set_browser_window_size(Browsers.browser_size(browser, Environ.device_orientation))
121
164
  end
122
165
  elsif Environ.is_mobile? && !Environ.is_device?
123
- Browsers.set_browser_window_size(Browsers.browser_size(browser, ENV['ORIENTATION']))
166
+ Browsers.set_browser_window_size(Browsers.browser_size(browser, Environ.device_orientation))
124
167
  end
125
168
  Environ.session_state = :running
126
169
  end
127
170
 
128
171
  # :nocov:
172
+
173
+ def self.set_domain(url)
174
+ Capybara.app_host = url
175
+ end
176
+
129
177
  def self.close_tunnel
130
178
  unless @bs_local.nil?
131
179
  @bs_local.stop
@@ -140,86 +188,98 @@ module TestCentricity
140
188
 
141
189
  private
142
190
 
191
+ def self.initialize_downloads
192
+ @drivers = {}
193
+ # set downloads folder path
194
+ @downloads_path = "#{Dir.pwd}/downloads"
195
+ if ENV['PARALLEL']
196
+ Environ.parallel = true
197
+ Environ.process_num = ENV['TEST_ENV_NUMBER']
198
+ Environ.process_num = '1' if Environ.process_num.blank?
199
+ if Dir.exist?(@downloads_path)
200
+ @downloads_path = "#{@downloads_path}/#{Environ.process_num}"
201
+ Dir.mkdir(@downloads_path) unless Dir.exist?(@downloads_path)
202
+ end
203
+ else
204
+ Environ.parallel = false
205
+ end
206
+ @downloads_path = @downloads_path.tr('/', "\\") if OS.windows?
207
+ @initialized = true
208
+ end
209
+
143
210
  def self.initialize_appium
144
211
  Environ.platform = :mobile
145
212
  Environ.device = :simulator
146
- Environ.browser = ENV['APP_BROWSER']
147
- Environ.device_name = ENV['APP_DEVICE']
148
- Environ.device_os = ENV['APP_PLATFORM_NAME'].downcase.to_sym
149
- Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
150
- Environ.device_os_version = ENV['APP_VERSION']
151
- Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
152
- Capybara.default_driver = :appium
153
- Environ.driver = :appium
154
- # define capabilites
155
- desired_capabilities = if @capabilities.nil?
156
- desired_capabilities = {
157
- platformName: Environ.device_os,
158
- platformVersion: Environ.device_os_version,
159
- browserName: Environ.browser,
160
- deviceName: Environ.device_name
161
- }
162
- desired_capabilities[:avd] = ENV['APP_DEVICE'] if Environ.device_os == :android
163
- desired_capabilities[:automationName] = ENV['AUTOMATION_ENGINE'] if ENV['AUTOMATION_ENGINE']
164
- if ENV['UDID']
165
- # :nocov:
166
- Environ.device = :device
167
- desired_capabilities[:udid] = ENV['UDID']
168
- desired_capabilities[:xcodeOrgId] = ENV['TEAM_ID'] if ENV['TEAM_ID']
169
- desired_capabilities[:xcodeSigningId] = ENV['TEAM_NAME'] if ENV['TEAM_NAME']
170
- # :nocov:
171
- else
172
- desired_capabilities[:orientation] = Environ.device_orientation.upcase if Environ.device_orientation
173
- if Environ.device_os == :ios
174
- desired_capabilities[:language] = Environ.language if Environ.language
175
- desired_capabilities[:locale] = Environ.locale.gsub('-', '_') if Environ.locale
176
- end
177
- end
178
- desired_capabilities[:safariIgnoreFraudWarning] = ENV['APP_IGNORE_FRAUD_WARNING'] if ENV['APP_IGNORE_FRAUD_WARNING']
179
- desired_capabilities[:safariInitialUrl] = ENV['APP_INITIAL_URL'] if ENV['APP_INITIAL_URL']
180
- desired_capabilities[:safariAllowPopups] = ENV['APP_ALLOW_POPUPS'] if ENV['APP_ALLOW_POPUPS']
181
- desired_capabilities[:shutdownOtherSimulators] = ENV['SHUTDOWN_OTHER_SIMS'] if ENV['SHUTDOWN_OTHER_SIMS']
182
- desired_capabilities[:forceSimulatorSoftwareKeyboardPresence] = ENV['SHOW_SIM_KEYBOARD'] if ENV['SHOW_SIM_KEYBOARD']
183
-
184
- desired_capabilities[:autoAcceptAlerts] = ENV['AUTO_ACCEPT_ALERTS'] if ENV['AUTO_ACCEPT_ALERTS']
185
- desired_capabilities[:autoDismissAlerts] = ENV['AUTO_DISMISS_ALERTS'] if ENV['AUTO_DISMISS_ALERTS']
186
- desired_capabilities[:isHeadless] = ENV['HEADLESS'] if ENV['HEADLESS']
187
-
188
- desired_capabilities[:newCommandTimeout] = ENV['NEW_COMMAND_TIMEOUT'] if ENV['NEW_COMMAND_TIMEOUT']
189
- desired_capabilities[:noReset] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
190
- desired_capabilities[:fullReset] = ENV['APP_FULL_RESET'] if ENV['APP_FULL_RESET']
191
- desired_capabilities[:webkitDebugProxyPort] = ENV['WEBKIT_DEBUG_PROXY_PORT'] if ENV['WEBKIT_DEBUG_PROXY_PORT']
192
- desired_capabilities[:webDriverAgentUrl] = ENV['WEBDRIVER_AGENT_URL'] if ENV['WEBDRIVER_AGENT_URL']
193
- desired_capabilities[:usePrebuiltWDA] = ENV['USE_PREBUILT_WDA'] if ENV['USE_PREBUILT_WDA']
194
- desired_capabilities[:useNewWDA] = ENV['USE_NEW_WDA'] if ENV['USE_NEW_WDA']
195
- desired_capabilities[:chromedriverExecutable] = ENV['CHROMEDRIVER_EXECUTABLE'] if ENV['CHROMEDRIVER_EXECUTABLE']
196
- # set wdaLocalPort (iOS) or systemPort (Android) if PARALLEL_PORT is true
197
- if ENV['PARALLEL'] && ENV['PARALLEL_PORT']
198
- # :nocov:
199
- if Environ.device_os == :ios
200
- desired_capabilities[:wdaLocalPort] = 8100 + ENV['TEST_ENV_NUMBER'].to_i
201
- else
202
- desired_capabilities[:systemPort] = 8200 + ENV['TEST_ENV_NUMBER'].to_i
203
- end
204
- # :nocov:
205
- else
206
- desired_capabilities[:wdaLocalPort] = ENV['WDA_LOCAL_PORT'] if ENV['WDA_LOCAL_PORT']
207
- desired_capabilities[:systemPort] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
208
- end
209
- desired_capabilities
210
- else
211
- @capabilities
212
- end
213
+ # define capabilities
214
+ caps = if @capabilities.nil?
215
+ Environ.browser = ENV['APP_BROWSER']
216
+ Environ.device_name = ENV['APP_DEVICE']
217
+ Environ.device_os = ENV['APP_PLATFORM_NAME'].downcase.to_sym
218
+ Environ.device_os_version = ENV['APP_VERSION']
219
+ caps = {
220
+ platformName: Environ.device_os,
221
+ browserName: Environ.browser,
222
+ 'appium:platformVersion': Environ.device_os_version,
223
+ 'appium:deviceName': Environ.device_name
224
+ }
225
+ caps[:'appium:avd'] = ENV['APP_DEVICE'] if Environ.device_os == :android
226
+ caps[:'appium:automationName'] = ENV['AUTOMATION_ENGINE'] if ENV['AUTOMATION_ENGINE']
227
+ if ENV['UDID']
228
+ # :nocov:
229
+ Environ.device = :device
230
+ caps[:'appium:udid'] = ENV['UDID']
231
+ caps[:'appium:xcodeOrgId'] = ENV['TEAM_ID'] if ENV['TEAM_ID']
232
+ caps[:'appium:xcodeSigningId'] = ENV['TEAM_NAME'] if ENV['TEAM_NAME']
233
+ # :nocov:
234
+ else
235
+ caps[:'appium:orientation'] = Environ.device_orientation.upcase if Environ.device_orientation
236
+ if Environ.device_os == :ios
237
+ caps[:'appium:language'] = Environ.language if Environ.language
238
+ caps[:'appium:locale'] = Environ.locale.gsub('-', '_') if Environ.locale
239
+ end
240
+ end
241
+ caps[:'appium:safariIgnoreFraudWarning'] = ENV['APP_IGNORE_FRAUD_WARNING'] if ENV['APP_IGNORE_FRAUD_WARNING']
242
+ caps[:'appium:safariInitialUrl'] = ENV['APP_INITIAL_URL'] if ENV['APP_INITIAL_URL']
243
+ caps[:'appium:safariAllowPopups'] = ENV['APP_ALLOW_POPUPS'] if ENV['APP_ALLOW_POPUPS']
244
+ caps[:'appium:shutdownOtherSimulators'] = ENV['SHUTDOWN_OTHER_SIMS'] if ENV['SHUTDOWN_OTHER_SIMS']
245
+ caps[:'appium:forceSimulatorSoftwareKeyboardPresence'] = ENV['SHOW_SIM_KEYBOARD'] if ENV['SHOW_SIM_KEYBOARD']
246
+
247
+ caps[:'appium:autoAcceptAlerts'] = ENV['AUTO_ACCEPT_ALERTS'] if ENV['AUTO_ACCEPT_ALERTS']
248
+ caps[:'appium:autoDismissAlerts'] = ENV['AUTO_DISMISS_ALERTS'] if ENV['AUTO_DISMISS_ALERTS']
249
+ caps[:'appium:isHeadless'] = ENV['HEADLESS'] if ENV['HEADLESS']
250
+
251
+ caps[:'appium:newCommandTimeout'] = ENV['NEW_COMMAND_TIMEOUT'] if ENV['NEW_COMMAND_TIMEOUT']
252
+ caps[:'appium:noReset'] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
253
+ caps[:'appium:fullReset'] = ENV['APP_FULL_RESET'] if ENV['APP_FULL_RESET']
254
+ caps[:'appium:webkitDebugProxyPort'] = ENV['WEBKIT_DEBUG_PROXY_PORT'] if ENV['WEBKIT_DEBUG_PROXY_PORT']
255
+ caps[:'appium:webDriverAgentUrl'] = ENV['WEBDRIVER_AGENT_URL'] if ENV['WEBDRIVER_AGENT_URL']
256
+ caps[:'appium:usePrebuiltWDA'] = ENV['USE_PREBUILT_WDA'] if ENV['USE_PREBUILT_WDA']
257
+ caps[:'appium:useNewWDA'] = ENV['USE_NEW_WDA'] if ENV['USE_NEW_WDA']
258
+ caps[:'appium:chromedriverExecutable'] = ENV['CHROMEDRIVER_EXECUTABLE'] if ENV['CHROMEDRIVER_EXECUTABLE']
259
+ # set wdaLocalPort (iOS) or systemPort (Android) if PARALLEL_PORT is true
260
+ if Environ.parallel
261
+ # :nocov:
262
+ if Environ.device_os == :ios
263
+ caps[:'appium:wdaLocalPort'] = 8100 + ENV['TEST_ENV_NUMBER'].to_i
264
+ else
265
+ caps[:'appium:systemPort'] = 8200 + ENV['TEST_ENV_NUMBER'].to_i
266
+ end
267
+ # :nocov:
268
+ else
269
+ caps[:'appium:wdaLocalPort'] = ENV['WDA_LOCAL_PORT'] if ENV['WDA_LOCAL_PORT']
270
+ caps[:'appium:systemPort'] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
271
+ end
272
+ caps
273
+ else
274
+ Environ.device_os = @capabilities[:platformName]
275
+ Environ.device_os_version = @capabilities[:'appium:platformVersion']
276
+ Environ.device_name = @capabilities[:'appium:deviceName']
277
+ @capabilities
278
+ end
213
279
  # specify endpoint url
214
280
  @endpoint = 'http://localhost:4723/wd/hub' if @endpoint.nil?
215
281
 
216
- Capybara.register_driver(:appium) do |app|
217
- all_options = {
218
- appium_lib: { server_url: @endpoint },
219
- caps: desired_capabilities
220
- }
221
- Appium::Capybara::Driver.new(app, all_options)
222
- end
282
+ register_remote_driver(Environ.browser, caps)
223
283
  end
224
284
 
225
285
  def self.initialize_local_browser
@@ -235,83 +295,72 @@ module TestCentricity
235
295
  'unknown'
236
296
  # :nocov:
237
297
  end
238
- browser = Environ.browser.downcase.to_sym
239
-
240
- case browser
241
- when :firefox, :chrome, :ie, :safari, :edge
298
+ case Environ.browser
299
+ when :firefox, :chrome, :safari, :edge, :chrome_headless, :firefox_headless, :edge_headless
242
300
  Environ.platform = :desktop
243
- when :chrome_headless, :firefox_headless, :edge_headless
244
- Environ.platform = :desktop
245
- Environ.headless = true
246
301
  else
247
302
  Environ.platform = :mobile
248
303
  Environ.device_name = Browsers.mobile_device_name(Environ.browser)
249
304
  end
250
305
 
251
- Capybara.register_driver :selenium do |app|
306
+ Capybara.register_driver driver_name do |app|
307
+ browser = Environ.browser
252
308
  case browser
253
- when :safari, :ie
309
+ when :safari
254
310
  Capybara::Selenium::Driver.new(app, browser: browser)
255
311
  when :firefox, :firefox_headless
256
312
  options = firefox_options(browser)
257
- Capybara::Selenium::Driver.new(app, browser: :firefox, capabilities: [options])
313
+ Capybara::Selenium::Driver.new(app, browser: :firefox, options: options)
258
314
  when :chrome, :chrome_headless
259
315
  options = chrome_edge_options(browser)
260
- Capybara::Selenium::Driver.new(app, browser: :chrome, capabilities: [options])
316
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
261
317
  when :edge, :edge_headless
262
318
  options = chrome_edge_options(browser)
263
- Capybara::Selenium::Driver.new(app, browser: :edge, capabilities: [options])
319
+ Capybara::Selenium::Driver.new(app, browser: :edge, options: options)
264
320
  else
265
- if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
266
- user_agent = Browsers.mobile_device_agent(Environ.browser)
267
- options = Selenium::WebDriver::Chrome::Options.new
268
- options.add_argument('--disable-dev-shm-usage')
269
- options.add_argument("--user-agent='#{user_agent}'")
270
- options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
271
- Capybara::Selenium::Driver.new(app, browser: :chrome, capabilities: [options])
272
- else
273
- raise "Requested browser '#{browser}' is not supported"
274
- end
321
+ user_agent = Browsers.mobile_device_agent(Environ.browser)
322
+ options = Selenium::WebDriver::Chrome::Options.new(exclude_switches: ['enable-automation'])
323
+ options.add_argument('--disable-dev-shm-usage')
324
+ options.add_argument("--user-agent='#{user_agent}'")
325
+ options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
326
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
275
327
  end
276
328
  end
277
- Capybara.default_driver = :selenium
329
+ Capybara.default_driver = Environ.driver_name
278
330
  end
279
331
 
280
332
  def self.initialize_remote
281
333
  Environ.grid = :selenium_grid
282
- browser = Environ.browser.downcase.to_sym
283
- @endpoint = ENV['REMOTE_ENDPOINT'] || 'http://127.0.0.1:4444/wd/hub' if @endpoint.nil?
284
-
334
+ browser = Environ.browser
335
+ @endpoint = if @endpoint.nil?
336
+ ENV['REMOTE_ENDPOINT'] if ENV['REMOTE_ENDPOINT']
337
+ else
338
+ 'http://localhost:4444/wd/hub'
339
+ end
285
340
  case browser
286
341
  # :nocov:
287
342
  when :safari
288
343
  options = Selenium::WebDriver::Safari::Options.new
289
- when :ie
290
- options = Selenium::WebDriver::IE::Options.new
291
344
  # :nocov:
292
345
  when :firefox, :firefox_headless
293
346
  options = firefox_options(browser)
294
347
  when :chrome, :chrome_headless, :edge, :edge_headless
295
348
  options = chrome_edge_options(browser)
296
349
  else
297
- if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
298
- Environ.platform = :mobile
299
- Environ.device_name = Browsers.mobile_device_name(Environ.browser)
300
- user_agent = Browsers.mobile_device_agent(Environ.browser)
301
- options = Selenium::WebDriver::Chrome::Options.new
302
- options.add_argument('--disable-dev-shm-usage')
303
- options.add_argument("--user-agent='#{user_agent}'")
304
- options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
305
- else
306
- raise "Requested browser '#{browser}' is not supported on Selenium Grid"
307
- end
350
+ Environ.platform = :mobile
351
+ Environ.device_name = Browsers.mobile_device_name(Environ.browser)
352
+ user_agent = Browsers.mobile_device_agent(Environ.browser)
353
+ options = Selenium::WebDriver::Chrome::Options.new
354
+ options.add_argument('--disable-dev-shm-usage')
355
+ options.add_argument("--user-agent='#{user_agent}'")
356
+ options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
308
357
  end
309
358
 
310
- Capybara.register_driver :remote_browser do |app|
359
+ Capybara.register_driver driver_name do |app|
311
360
  Capybara::Selenium::Driver.new(app,
312
361
  browser: :remote,
313
362
  url: @endpoint,
314
- capabilities: [options]).tap do |driver|
363
+ options: options).tap do |driver|
315
364
  # configure file_detector for remote uploads
316
365
  driver.browser.file_detector = lambda do |args|
317
366
  str = args.first.to_s
@@ -319,19 +368,23 @@ module TestCentricity
319
368
  end
320
369
  end
321
370
  end
322
- Capybara.current_driver = :remote_browser
323
- Capybara.default_driver = :remote_browser
371
+ Capybara.current_driver = Environ.driver_name
372
+ Capybara.default_driver = Environ.driver_name
324
373
  end
325
374
 
326
375
  def self.initialize_browserstack
327
- browser = ENV['BS_BROWSER']
376
+ # determine browser type
377
+ Environ.browser = if @capabilities.nil?
378
+ ENV['BS_BROWSER'] if ENV['BS_BROWSER']
379
+ else
380
+ @capabilities[:browserName]
381
+ end
382
+ browser = Environ.browser
328
383
  Environ.grid = :browserstack
329
- Environ.os = "#{ENV['BS_OS']} #{ENV['BS_OS_VERSION']}"
330
384
  if ENV['BS_REAL_MOBILE'] || ENV['BS_DEVICE']
331
385
  Environ.platform = :mobile
332
386
  Environ.device_name = ENV['BS_DEVICE']
333
387
  Environ.device_os = ENV['BS_OS']
334
- Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
335
388
  Environ.device = if ENV['BS_REAL_MOBILE']
336
389
  :device
337
390
  else
@@ -339,7 +392,7 @@ module TestCentricity
339
392
  end
340
393
  end
341
394
  # specify endpoint url
342
- @endpoint = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub-cloud.browserstack.com/wd/hub" if @endpoint.nil?
395
+ @endpoint = "https://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub-cloud.browserstack.com/wd/hub" if @endpoint.nil?
343
396
  # :nocov:
344
397
  # enable tunneling if specified
345
398
  if ENV['TUNNELING']
@@ -355,6 +408,7 @@ module TestCentricity
355
408
  # :nocov:
356
409
  # define BrowserStack options
357
410
  options = if @capabilities.nil?
411
+ Environ.os = "#{ENV['BS_OS']} #{ENV['BS_OS_VERSION']}"
358
412
  browser_options = {}
359
413
  # define the required set of BrowserStack options
360
414
  bs_options = {
@@ -401,7 +455,7 @@ module TestCentricity
401
455
  else
402
456
  # define desktop browser options
403
457
  bs_options[:resolution] = ENV['RESOLUTION'] if ENV['RESOLUTION']
404
- bs_options[:seleniumVersion] = '4.3.0'
458
+ bs_options[:seleniumVersion] = '4.15.0'
405
459
  {
406
460
  browserName: browser,
407
461
  browserVersion: ENV['BS_VERSION'],
@@ -409,42 +463,57 @@ module TestCentricity
409
463
  }
410
464
  end
411
465
  else
466
+ bs_options = @capabilities[:'bstack:options']
467
+ Environ.os = "#{bs_options[:os]} #{bs_options[:osVersion]}"
468
+ if bs_options.key?(:deviceName)
469
+ Environ.platform = :mobile
470
+ Environ.device_name = bs_options[:deviceName]
471
+ Environ.device_os = bs_options[:osVersion]
472
+ Environ.device = if bs_options.key?(:realMobile)
473
+ :device
474
+ else
475
+ :simulator
476
+ end
477
+ Environ.device_orientation = bs_options[:deviceOrientation] if bs_options.key?(:deviceOrientation)
478
+ end
412
479
  @capabilities
413
480
  end
414
- register_remote_driver(:browserstack, browser, options)
415
- # configure file_detector for remote uploads
416
- config_file_uploads
481
+ register_remote_driver(browser, options)
482
+ # configure file_detector for remote uploads if target is desktop web browser
483
+ config_file_uploads if Environ.platform == :desktop
417
484
  Environ.tunneling = ENV['TUNNELING'] if ENV['TUNNELING']
418
- Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
419
485
  end
420
486
 
421
487
  def self.initialize_testingbot
422
- browser = ENV['TB_BROWSER']
488
+ # determine browser type
489
+ Environ.browser = if @capabilities.nil?
490
+ ENV['TB_BROWSER'] if ENV['TB_BROWSER']
491
+ else
492
+ @capabilities[:browserName]
493
+ end
494
+ browser = Environ.browser
423
495
  Environ.grid = :testingbot
424
-
425
- Environ.os = ENV['TB_OS']
426
496
  if ENV['TB_PLATFORM']
427
- Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
428
- Environ.device_os = ENV['TB_PLATFORM']
497
+ Environ.device_os = ENV['TB_PLATFORM']
429
498
  Environ.device_name = ENV['TB_DEVICE']
430
- Environ.device = :device
431
- Environ.platform = :mobile
432
- Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
499
+ Environ.platform = :mobile
500
+ Environ.device = :simulator
433
501
  else
434
502
  Environ.platform = :desktop
435
503
  end
436
504
  # specify endpoint url
437
505
  if @endpoint.nil?
438
506
  url = ENV['TUNNELING'] ? '@localhost:4445/wd/hub' : '@hub.testingbot.com/wd/hub'
439
- @endpoint = "http://#{ENV['TB_USERNAME']}:#{ENV['TB_AUTHKEY']}#{url}"
507
+ @endpoint = "https://#{ENV['TB_USERNAME']}:#{ENV['TB_AUTHKEY']}#{url}"
440
508
  end
441
509
  # define TestingBot options
442
510
  options = if @capabilities.nil?
511
+ Environ.os = ENV['TB_OS']
443
512
  # define the required set of TestingBot options
444
513
  tb_options = { build: test_context_message }
445
514
  # define the optional TestingBot options
446
515
  tb_options[:name] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
447
- tb_options['timeZone'] = ENV['TIME_ZONE'] if ENV['TIME_ZONE']
516
+ tb_options[:timeZone] = ENV['TIME_ZONE'] if ENV['TIME_ZONE']
448
517
  tb_options['testingbot.geoCountryCode'] = ENV['GEO_LOCATION'] if ENV['GEO_LOCATION']
449
518
  tb_options[:screenrecorder] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
450
519
  tb_options[:screenshot] = ENV['SCREENSHOTS'] if ENV['SCREENSHOTS']
@@ -456,7 +525,7 @@ module TestCentricity
456
525
  else
457
526
  # define desktop browser options
458
527
  tb_options['screen-resolution'] = ENV['RESOLUTION'] if ENV['RESOLUTION']
459
- tb_options['selenium-version'] = '4.3.0'
528
+ tb_options['selenium-version'] = '4.14.1'
460
529
  end
461
530
  {
462
531
  browserName: browser,
@@ -465,24 +534,112 @@ module TestCentricity
465
534
  'tb:options': tb_options
466
535
  }
467
536
  else
537
+ tb_options = @capabilities[:'tb:options']
538
+ Environ.os = @capabilities[:platformName]
539
+ if tb_options.key?(:deviceName)
540
+ Environ.platform = :mobile
541
+ Environ.device_name = tb_options[:deviceName]
542
+ Environ.device_os = @capabilities[:browserVersion]
543
+ Environ.device_orientation = tb_options[:orientation] if tb_options.key?(:orientation)
544
+ Environ.device = :simulator
545
+ end
468
546
  @capabilities
469
547
  end
470
- register_remote_driver(:testingbot, browser, options)
548
+ register_remote_driver(browser, options)
471
549
  # configure file_detector for remote uploads if target is desktop web browser
472
- config_file_uploads unless ENV['TB_PLATFORM']
550
+ config_file_uploads if Environ.platform == :desktop
473
551
  end
474
552
 
475
553
  # :nocov:
554
+ def self.initialize_saucelabs
555
+ # determine browser type
556
+ Environ.browser = if @capabilities.nil?
557
+ ENV['SL_BROWSER'] if ENV['SL_BROWSER']
558
+ else
559
+ @capabilities[:browserName]
560
+ end
561
+ browser = Environ.browser
562
+ Environ.grid = :saucelabs
563
+
564
+ if ENV['SL_PLATFORM']
565
+ Environ.device_name = ENV['SL_DEVICE']
566
+ Environ.platform = :mobile
567
+ Environ.device = :simulator
568
+ elsif ENV['SL_OS']
569
+ Environ.platform = :desktop
570
+ Environ.os = ENV['SL_OS']
571
+ end
572
+ # specify endpoint url
573
+ if @endpoint.nil?
574
+ @endpoint = "https://#{ENV['SL_USERNAME']}:#{ENV['SL_AUTHKEY']}@ondemand.#{ENV['DATA_CENTER']}.saucelabs.com:443/wd/hub"
575
+ end
576
+ # define SauceLab options
577
+ options = if @capabilities.nil?
578
+ # define the required set of SauceLab options
579
+ sl_options = {
580
+ username: ENV['SL_USERNAME'],
581
+ access_key: ENV['SL_AUTHKEY'],
582
+ build: test_context_message
583
+ }
584
+ # define the optional SauceLab options
585
+ sl_options[:name] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
586
+ sl_options[:recordVideo] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
587
+ sl_options[:recordScreenshots] = ENV['SCREENSHOTS'] if ENV['SCREENSHOTS']
588
+ # define mobile device options
589
+ if ENV['SL_PLATFORM']
590
+ sl_options[:deviceOrientation] = ENV['ORIENTATION'].upcase if ENV['ORIENTATION']
591
+ sl_options[:appium_version] = '1.22.3'
592
+ {
593
+ browserName: browser,
594
+ platform_name: ENV['SL_PLATFORM'],
595
+ 'appium:deviceName': ENV['SL_DEVICE'],
596
+ 'appium:platformVersion': ENV['SL_VERSION'],
597
+ 'appium:automationName': ENV['AUTOMATION_ENGINE'],
598
+ 'sauce:options': sl_options
599
+ }
600
+ else
601
+ # define desktop browser options
602
+ sl_options[:screenResolution] = ENV['RESOLUTION'] if ENV['RESOLUTION']
603
+ {
604
+ browserName: browser,
605
+ browser_version: ENV['SL_VERSION'],
606
+ platform_name: ENV['SL_OS'],
607
+ 'sauce:options': sl_options
608
+ }
609
+ end
610
+ else
611
+ sl_options = @capabilities[:'sauce:options']
612
+ Environ.os = @capabilities[:platform_name]
613
+ if @capabilities.key?(:'appium:deviceName')
614
+ Environ.platform = :mobile
615
+ Environ.device_name = @capabilities[:'appium:deviceName']
616
+ Environ.device_os = @capabilities[:'appium:platformVersion']
617
+ Environ.device = :simulator
618
+ Environ.device_orientation = sl_options[:deviceOrientation] if sl_options.key?(:deviceOrientation)
619
+ end
620
+ @capabilities
621
+ end
622
+ register_remote_driver(browser, options)
623
+ # configure file_detector for remote uploads
624
+ config_file_uploads if Environ.platform == :desktop
625
+ end
626
+
476
627
  def self.initialize_lambdatest
477
- browser = ENV['LT_BROWSER']
628
+ # determine browser type
629
+ Environ.browser = if @capabilities.nil?
630
+ ENV['LT_BROWSER'] if ENV['LT_BROWSER']
631
+ else
632
+ @capabilities[:browserName]
633
+ end
634
+ browser = Environ.browser
478
635
  Environ.grid = :lambdatest
479
- Environ.os = ENV['LT_OS']
480
636
  Environ.platform = :desktop
481
637
  Environ.tunneling = ENV['TUNNELING'] if ENV['TUNNELING']
482
638
  # specify endpoint url
483
639
  @endpoint = "https://#{ENV['LT_USERNAME']}:#{ENV['LT_AUTHKEY']}@hub.lambdatest.com/wd/hub" if @endpoint.nil?
484
640
  # define LambdaTest options
485
641
  options = if @capabilities.nil?
642
+ Environ.os = ENV['LT_OS']
486
643
  # define the required set of LambdaTest options
487
644
  lt_options = {
488
645
  user: ENV['LT_USERNAME'],
@@ -490,7 +647,7 @@ module TestCentricity
490
647
  build: test_context_message,
491
648
  platformName: ENV['LT_OS'],
492
649
  resolution: ENV['RESOLUTION'],
493
- selenium_version: '4.0.0',
650
+ selenium_version: '4.13.0',
494
651
  }
495
652
  # define the optional LambdaTest options
496
653
  lt_options[:name] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
@@ -517,76 +674,23 @@ module TestCentricity
517
674
  'LT:Options': lt_options
518
675
  }
519
676
  else
677
+ Environ.os = @capabilities[:platform_name]
520
678
  @capabilities
521
679
  end
522
- register_remote_driver(:lambdatest, browser, options)
523
- # configure file_detector for remote uploads
524
- config_file_uploads
525
- end
526
-
527
- def self.initialize_saucelabs
528
- browser = ENV['SL_BROWSER']
529
- Environ.grid = :saucelabs
530
-
531
- if ENV['SL_OS']
532
- Environ.platform = :desktop
533
- Environ.os = ENV['SL_OS']
534
- elsif ENV['SL_PLATFORM']
535
- Environ.device_name = ENV['SL_DEVICE']
536
- Environ.platform = :mobile
537
- Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
538
- Environ.device = :simulator
539
- end
540
- # specify endpoint url
541
- @endpoint = "https://#{ENV['SL_USERNAME']}:#{ENV['SL_AUTHKEY']}@ondemand.#{ENV['DATA_CENTER']}.saucelabs.com/wd/hub" if @endpoint.nil?
542
- # define SauceLab options
543
- options = if @capabilities.nil?
544
- # define the required set of SauceLab options
545
- sl_options = {
546
- userName: ENV['SL_USERNAME'],
547
- accessKey: ENV['SL_AUTHKEY'],
548
- build: test_context_message
549
- }
550
- # define the optional SauceLab options
551
- sl_options[:name] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
552
- sl_options[:recordVideo] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
553
- sl_options[:recordScreenshots] = ENV['SCREENSHOTS'] if ENV['SCREENSHOTS']
554
- # define mobile device options
555
- if ENV['SL_PLATFORM']
556
- sl_options[:deviceOrientation] = ENV['ORIENTATION'].upcase if ENV['ORIENTATION']
557
- sl_options[:appiumVersion] = '1.22.3'
558
- {
559
- browserName: browser,
560
- platformName: ENV['SL_PLATFORM'],
561
- 'appium:deviceName': ENV['SL_DEVICE'],
562
- 'appium:platformVersion': ENV['SL_VERSION'],
563
- 'sauce:options': sl_options
564
- }
565
- else
566
- # define desktop browser options
567
- sl_options[:screenResolution] = ENV['RESOLUTION'] if ENV['RESOLUTION']
568
- {
569
- browserName: browser,
570
- browserVersion: ENV['SL_VERSION'],
571
- platformName: ENV['SL_OS'],
572
- 'sauce:options': sl_options
573
- }
574
- end
575
- else
576
- @capabilities
577
- end
578
- register_remote_driver(:saucelabs, browser, options)
680
+ register_remote_driver(browser, options)
579
681
  # configure file_detector for remote uploads
580
- config_file_uploads
682
+ config_file_uploads if Environ.platform == :desktop
581
683
  end
582
684
  # :nocov:
583
685
 
584
686
  def self.chrome_edge_options(browser)
585
687
  options = case browser
586
688
  when :chrome, :chrome_headless
587
- Selenium::WebDriver::Chrome::Options.new
689
+ Selenium::WebDriver::Chrome::Options.new(exclude_switches: ['enable-automation'])
588
690
  when :edge, :edge_headless
589
- Selenium::WebDriver::Edge::Options.new
691
+ Selenium::WebDriver::Edge::Options.new(exclude_switches: ['enable-automation'])
692
+ else
693
+ raise "#{browser} is not a valid selector"
590
694
  end
591
695
  prefs = {
592
696
  prompt_for_download: false,
@@ -594,12 +698,15 @@ module TestCentricity
594
698
  default_directory: @downloads_path
595
699
  }
596
700
  options.add_preference(:download, prefs)
701
+ options.add_argument('--force-device-scale-factor=1')
702
+ options.add_argument('--disable-geolocation')
597
703
  options.add_argument('--disable-dev-shm-usage')
704
+ options.add_argument('--no-sandbox')
598
705
  options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
599
706
  if browser == :chrome_headless || browser == :edge_headless
707
+ Environ.headless = true
600
708
  options.add_argument('--headless')
601
709
  options.add_argument('--disable-gpu')
602
- options.add_argument('--no-sandbox')
603
710
  end
604
711
  options
605
712
  end
@@ -621,7 +728,10 @@ module TestCentricity
621
728
 
622
729
  profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
623
730
  options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
624
- options.args << '--headless' if browser == :firefox_headless
731
+ if browser == :firefox_headless
732
+ Environ.headless = true
733
+ options.args << '--headless'
734
+ end
625
735
  options
626
736
  end
627
737
 
@@ -631,7 +741,7 @@ module TestCentricity
631
741
  else
632
742
  Environ.test_environment.to_s.upcase
633
743
  end
634
- if ENV['PARALLEL']
744
+ if Environ.parallel
635
745
  thread_num = ENV['TEST_ENV_NUMBER']
636
746
  thread_num = 1 if thread_num.blank?
637
747
  context_message = "#{context_message} - Thread ##{thread_num}"
@@ -639,9 +749,25 @@ module TestCentricity
639
749
  context_message
640
750
  end
641
751
 
642
- def self.register_remote_driver(driver, browser, options)
643
- Capybara.register_driver driver do |app|
644
- capabilities = Selenium::WebDriver::Remote::Capabilities.send(browser.gsub(/\s+/, '_').downcase.to_sym, options)
752
+ def self.driver_name
753
+ unless Environ.driver_name
754
+ driver = case Environ.driver
755
+ when :webdriver
756
+ :local
757
+ when :selenium_grid, :grid
758
+ :remote
759
+ else
760
+ Environ.driver
761
+ end
762
+ Environ.driver_name = "#{driver}_#{Environ.browser}".downcase.to_sym unless driver.nil?
763
+ end
764
+ Environ.driver_name
765
+ end
766
+
767
+ def self.register_remote_driver(browser, options)
768
+ Capybara.register_driver driver_name do |app|
769
+ browser = browser.gsub(/\s+/, '_').downcase.to_sym if browser.is_a?(String)
770
+ capabilities = Selenium::WebDriver::Remote::Capabilities.new(options)
645
771
  Capybara::Selenium::Driver.new(app,
646
772
  browser: :remote,
647
773
  url: @endpoint,
@@ -650,7 +776,8 @@ module TestCentricity
650
776
 
651
777
  Environ.browser = browser
652
778
 
653
- Capybara.default_driver = driver
779
+ Capybara.default_driver = Environ.driver_name
780
+ Capybara.current_driver = Environ.driver_name
654
781
  Capybara.run_server = false
655
782
  end
656
783