testcentricity_web 4.0.3 → 4.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +64 -0
- data/Gemfile.lock +23 -21
- data/LICENSE.md +1 -1
- data/README.md +557 -611
- data/lib/devices/devices.yml +0 -16
- data/lib/testcentricity_web/appium_server.rb +1 -1
- data/lib/testcentricity_web/data_objects/environment.rb +27 -9
- data/lib/testcentricity_web/exception_queue_helper.rb +5 -5
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/page_object.rb +18 -20
- data/lib/testcentricity_web/web_core/page_section.rb +19 -21
- data/lib/testcentricity_web/web_core/webdriver_helper.rb +348 -372
- data/lib/testcentricity_web/web_elements/checkbox.rb +33 -32
- data/lib/testcentricity_web/web_elements/radio.rb +33 -32
- data/lib/testcentricity_web/web_elements/select_list.rb +0 -14
- data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +17 -1
- data/test_site/test_page.html +11 -0
- data/testcentricity_web.gemspec +7 -8
- metadata +22 -17
- data/my_templates/default/method_details/setup.rb +0 -3
@@ -11,16 +11,18 @@ module TestCentricity
|
|
11
11
|
|
12
12
|
attr_accessor :bs_local
|
13
13
|
attr_accessor :downloads_path
|
14
|
+
attr_accessor :endpoint
|
15
|
+
attr_accessor :capabilities
|
14
16
|
|
15
17
|
def self.initialize_web_driver(options = nil)
|
16
|
-
|
17
|
-
|
18
|
+
@endpoint = nil
|
19
|
+
@capabilities = nil
|
18
20
|
if options.is_a?(String)
|
19
21
|
Capybara.app_host = options
|
20
22
|
elsif options.is_a?(Hash)
|
21
23
|
Capybara.app_host = options[:app_host] if options.key?(:app_host)
|
22
|
-
|
23
|
-
|
24
|
+
@endpoint = options[:endpoint] if options.key?(:endpoint)
|
25
|
+
@capabilities = options[:desired_capabilities] if options.key?(:desired_capabilities)
|
24
26
|
end
|
25
27
|
|
26
28
|
browser = ENV['WEB_BROWSER']
|
@@ -46,25 +48,19 @@ module TestCentricity
|
|
46
48
|
|
47
49
|
context = case browser.downcase.to_sym
|
48
50
|
when :appium
|
49
|
-
initialize_appium
|
51
|
+
initialize_appium
|
50
52
|
'mobile device emulator'
|
51
53
|
when :browserstack
|
52
|
-
initialize_browserstack
|
54
|
+
initialize_browserstack
|
53
55
|
'Browserstack cloud service'
|
54
|
-
when :crossbrowser
|
55
|
-
initialize_crossbrowser(desired_caps, merge_caps)
|
56
|
-
'CrossBrowserTesting cloud service'
|
57
|
-
when :gridlastic
|
58
|
-
initialize_gridlastic(desired_caps, merge_caps)
|
59
|
-
'Gridlastic cloud service'
|
60
56
|
when :lambdatest
|
61
|
-
initialize_lambdatest
|
57
|
+
initialize_lambdatest
|
62
58
|
'LambdaTest cloud service'
|
63
59
|
when :saucelabs
|
64
|
-
initialize_saucelabs
|
60
|
+
initialize_saucelabs
|
65
61
|
'Sauce Labs cloud service'
|
66
62
|
when :testingbot
|
67
|
-
initialize_testingbot
|
63
|
+
initialize_testingbot
|
68
64
|
'TestingBot cloud service'
|
69
65
|
else
|
70
66
|
if ENV['SELENIUM'] == 'remote'
|
@@ -77,7 +73,7 @@ module TestCentricity
|
|
77
73
|
end
|
78
74
|
|
79
75
|
# set browser window size only if testing with a desktop web browser
|
80
|
-
unless Environ.is_device? || Capybara.current_driver == :appium
|
76
|
+
unless Environ.is_device? || Environ.is_simulator? || Capybara.current_driver == :appium
|
81
77
|
initialize_browser_size
|
82
78
|
end
|
83
79
|
|
@@ -133,7 +129,7 @@ module TestCentricity
|
|
133
129
|
|
134
130
|
private
|
135
131
|
|
136
|
-
def self.initialize_appium
|
132
|
+
def self.initialize_appium
|
137
133
|
Environ.platform = :mobile
|
138
134
|
Environ.device_name = ENV['APP_DEVICE']
|
139
135
|
Environ.device_os = ENV['APP_PLATFORM_NAME'].downcase.to_sym
|
@@ -141,7 +137,7 @@ module TestCentricity
|
|
141
137
|
Environ.device_os_version = ENV['APP_VERSION']
|
142
138
|
Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
143
139
|
Capybara.default_driver = :appium
|
144
|
-
endpoint = 'http://localhost:4723/wd/hub'
|
140
|
+
@endpoint = 'http://localhost:4723/wd/hub' if @endpoint.nil?
|
145
141
|
desired_capabilities = {
|
146
142
|
platformName: Environ.device_os,
|
147
143
|
platformVersion: Environ.device_os_version,
|
@@ -153,7 +149,6 @@ module TestCentricity
|
|
153
149
|
if ENV['UDID']
|
154
150
|
Environ.device = :device
|
155
151
|
desired_capabilities[:udid] = ENV['UDID']
|
156
|
-
desired_capabilities[:startIWDP] = true
|
157
152
|
desired_capabilities[:xcodeOrgId] = ENV['TEAM_ID'] if ENV['TEAM_ID']
|
158
153
|
desired_capabilities[:xcodeSigningId] = ENV['TEAM_NAME'] if ENV['TEAM_NAME']
|
159
154
|
else
|
@@ -161,24 +156,26 @@ module TestCentricity
|
|
161
156
|
desired_capabilities[:orientation] = Environ.device_orientation.upcase if Environ.device_orientation
|
162
157
|
if Environ.device_os == :ios
|
163
158
|
desired_capabilities[:language] = Environ.language if Environ.language
|
164
|
-
desired_capabilities[:locale]
|
159
|
+
desired_capabilities[:locale] = Environ.locale.gsub('-', '_') if Environ.locale
|
165
160
|
end
|
166
161
|
end
|
167
162
|
desired_capabilities[:safariIgnoreFraudWarning] = ENV['APP_IGNORE_FRAUD_WARNING'] if ENV['APP_IGNORE_FRAUD_WARNING']
|
168
|
-
desired_capabilities[:safariInitialUrl]
|
169
|
-
desired_capabilities[:safariAllowPopups]
|
170
|
-
|
171
|
-
desired_capabilities[:
|
172
|
-
|
173
|
-
desired_capabilities[:
|
174
|
-
|
175
|
-
desired_capabilities[:
|
176
|
-
|
177
|
-
desired_capabilities[:
|
178
|
-
desired_capabilities[:
|
179
|
-
desired_capabilities[:
|
180
|
-
desired_capabilities[:
|
181
|
-
desired_capabilities[:
|
163
|
+
desired_capabilities[:safariInitialUrl] = ENV['APP_INITIAL_URL'] if ENV['APP_INITIAL_URL']
|
164
|
+
desired_capabilities[:safariAllowPopups] = ENV['APP_ALLOW_POPUPS'] if ENV['APP_ALLOW_POPUPS']
|
165
|
+
desired_capabilities[:shutdownOtherSimulators] = ENV['SHUTDOWN_OTHER_SIMS'] if ENV['SHUTDOWN_OTHER_SIMS']
|
166
|
+
desired_capabilities[:forceSimulatorSoftwareKeyboardPresence] = ENV['SHOW_SIM_KEYBOARD'] if ENV['SHOW_SIM_KEYBOARD']
|
167
|
+
|
168
|
+
desired_capabilities[:autoAcceptAlerts] = ENV['AUTO_ACCEPT_ALERTS'] if ENV['AUTO_ACCEPT_ALERTS']
|
169
|
+
desired_capabilities[:autoDismissAlerts] = ENV['AUTO_DISMISS_ALERTS'] if ENV['AUTO_DISMISS_ALERTS']
|
170
|
+
desired_capabilities[:isHeadless] = ENV['HEADLESS'] if ENV['HEADLESS']
|
171
|
+
|
172
|
+
desired_capabilities[:newCommandTimeout] = ENV['NEW_COMMAND_TIMEOUT'] if ENV['NEW_COMMAND_TIMEOUT']
|
173
|
+
desired_capabilities[:noReset] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
|
174
|
+
desired_capabilities[:fullReset] = ENV['APP_FULL_RESET'] if ENV['APP_FULL_RESET']
|
175
|
+
desired_capabilities[:webkitDebugProxyPort] = ENV['WEBKIT_DEBUG_PROXY_PORT'] if ENV['WEBKIT_DEBUG_PROXY_PORT']
|
176
|
+
desired_capabilities[:webDriverAgentUrl] = ENV['WEBDRIVER_AGENT_URL'] if ENV['WEBDRIVER_AGENT_URL']
|
177
|
+
desired_capabilities[:usePrebuiltWDA] = ENV['USE_PREBUILT_WDA'] if ENV['USE_PREBUILT_WDA']
|
178
|
+
desired_capabilities[:useNewWDA] = ENV['USE_NEW_WDA'] if ENV['USE_NEW_WDA']
|
182
179
|
desired_capabilities[:chromedriverExecutable] = ENV['CHROMEDRIVER_EXECUTABLE'] if ENV['CHROMEDRIVER_EXECUTABLE']
|
183
180
|
# set wdaLocalPort (iOS) or systemPort (Android) if PARALLEL_PORT is true
|
184
181
|
if ENV['PARALLEL'] && ENV['PARALLEL_PORT']
|
@@ -192,35 +189,37 @@ module TestCentricity
|
|
192
189
|
desired_capabilities[:systemPort] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
|
193
190
|
end
|
194
191
|
|
195
|
-
unless
|
196
|
-
desired_capabilities =
|
192
|
+
unless @capabilities.nil?
|
193
|
+
desired_capabilities = @capabilities
|
197
194
|
end
|
198
195
|
|
199
196
|
Capybara.register_driver :appium do |app|
|
200
|
-
appium_lib_options = { server_url: endpoint }
|
197
|
+
appium_lib_options = { server_url: @endpoint }
|
201
198
|
all_options = {
|
202
199
|
appium_lib: appium_lib_options,
|
203
200
|
caps: desired_capabilities
|
204
201
|
}
|
205
|
-
Appium::Capybara::Driver.new
|
202
|
+
Appium::Capybara::Driver.new(app, all_options)
|
206
203
|
end
|
207
204
|
end
|
208
205
|
|
209
206
|
def self.initialize_local_browser
|
210
|
-
Environ.os =
|
207
|
+
Environ.os = case
|
208
|
+
when OS.osx?
|
211
209
|
'OS X'
|
212
|
-
|
210
|
+
when OS.windows?
|
213
211
|
'Windows'
|
214
|
-
|
212
|
+
when OS.linux?
|
215
213
|
'Linux'
|
214
|
+
else
|
215
|
+
'unknown'
|
216
216
|
end
|
217
|
-
|
218
217
|
browser = ENV['WEB_BROWSER'].downcase.to_sym
|
219
218
|
|
220
219
|
case browser
|
221
220
|
when :firefox, :chrome, :ie, :safari, :edge
|
222
221
|
Environ.platform = :desktop
|
223
|
-
when :chrome_headless, :firefox_headless
|
222
|
+
when :chrome_headless, :firefox_headless, :edge_headless
|
224
223
|
Environ.platform = :desktop
|
225
224
|
Environ.headless = true
|
226
225
|
else
|
@@ -230,10 +229,7 @@ module TestCentricity
|
|
230
229
|
|
231
230
|
Capybara.register_driver :selenium do |app|
|
232
231
|
case browser
|
233
|
-
when :safari
|
234
|
-
caps = Selenium::WebDriver::Remote::Capabilities.safari(cleanSession: true)
|
235
|
-
Capybara::Selenium::Driver.new(app, browser: browser, desired_capabilities: caps)
|
236
|
-
when :ie, :edge
|
232
|
+
when :safari, :ie
|
237
233
|
Capybara::Selenium::Driver.new(app, browser: browser)
|
238
234
|
when :firefox, :firefox_headless
|
239
235
|
profile = Selenium::WebDriver::Firefox::Profile.new
|
@@ -253,16 +249,15 @@ module TestCentricity
|
|
253
249
|
profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
|
254
250
|
options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
|
255
251
|
options.args << '--headless' if browser == :firefox_headless
|
256
|
-
Capybara::Selenium::Driver.new(app, browser: :firefox,
|
252
|
+
Capybara::Selenium::Driver.new(app, browser: :firefox, capabilities: [options])
|
257
253
|
when :chrome, :chrome_headless
|
258
|
-
options = Selenium::WebDriver::Chrome::Options.new
|
254
|
+
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
259
255
|
prefs = {
|
260
256
|
prompt_for_download: false,
|
261
257
|
directory_upgrade: true,
|
262
258
|
default_directory: @downloads_path
|
263
259
|
}
|
264
260
|
options.add_preference(:download, prefs)
|
265
|
-
options.add_argument('--disable-infobars')
|
266
261
|
options.add_argument('--disable-dev-shm-usage')
|
267
262
|
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
268
263
|
if browser == :chrome_headless
|
@@ -271,16 +266,33 @@ module TestCentricity
|
|
271
266
|
options.add_argument('--no-sandbox')
|
272
267
|
end
|
273
268
|
|
274
|
-
Capybara::Selenium::Driver.new(app, browser: :chrome,
|
269
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, capabilities: [options])
|
270
|
+
when :edge, :edge_headless
|
271
|
+
options = Selenium::WebDriver::Edge::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
272
|
+
prefs = {
|
273
|
+
prompt_for_download: false,
|
274
|
+
directory_upgrade: true,
|
275
|
+
default_directory: @downloads_path
|
276
|
+
}
|
277
|
+
options.add_preference(:download, prefs)
|
278
|
+
options.add_argument('--disable-dev-shm-usage')
|
279
|
+
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
280
|
+
if browser == :edge_headless
|
281
|
+
options.add_argument('--headless')
|
282
|
+
options.add_argument('--disable-gpu')
|
283
|
+
options.add_argument('--no-sandbox')
|
284
|
+
end
|
285
|
+
|
286
|
+
Capybara::Selenium::Driver.new(app, browser: :edge, capabilities: [options])
|
275
287
|
else
|
276
288
|
if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
|
277
289
|
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
278
|
-
options = Selenium::WebDriver::Chrome::Options.new
|
290
|
+
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
279
291
|
options.add_argument('--disable-infobars')
|
280
292
|
options.add_argument('--disable-dev-shm-usage')
|
281
293
|
options.add_argument("--user-agent='#{user_agent}'")
|
282
294
|
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
283
|
-
Capybara::Selenium::Driver.new(app, browser: :chrome,
|
295
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, capabilities: [options])
|
284
296
|
else
|
285
297
|
raise "Requested browser '#{browser}' is not supported"
|
286
298
|
end
|
@@ -289,308 +301,228 @@ module TestCentricity
|
|
289
301
|
Capybara.default_driver = :selenium
|
290
302
|
end
|
291
303
|
|
292
|
-
def self.initialize_browserstack
|
304
|
+
def self.initialize_browserstack
|
293
305
|
browser = ENV['BS_BROWSER']
|
294
306
|
Environ.grid = :browserstack
|
295
307
|
|
296
|
-
if ENV['BS_REAL_MOBILE'] || ENV['
|
308
|
+
if ENV['BS_REAL_MOBILE'] || ENV['BS_DEVICE']
|
297
309
|
Environ.platform = :mobile
|
298
310
|
Environ.device_name = ENV['BS_DEVICE']
|
299
311
|
Environ.device_os = ENV['BS_OS']
|
300
312
|
Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
313
|
+
Environ.device = if ENV['BS_REAL_MOBILE']
|
314
|
+
:device
|
315
|
+
else
|
316
|
+
:simulator
|
317
|
+
end
|
301
318
|
elsif ENV['BS_OS']
|
302
319
|
Environ.os = "#{ENV['BS_OS']} #{ENV['BS_OS_VERSION']}"
|
303
320
|
end
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
capabilities['device'] = ENV['BS_DEVICE']
|
316
|
-
capabilities['realMobile'] = true
|
317
|
-
capabilities['os_version'] = ENV['BS_OS_VERSION']
|
318
|
-
|
319
|
-
elsif ENV['BS_PLATFORM']
|
320
|
-
capabilities[:platform] = ENV['BS_PLATFORM']
|
321
|
-
capabilities[:browserName] = browser
|
322
|
-
capabilities['device'] = ENV['BS_DEVICE'] if ENV['BS_DEVICE']
|
323
|
-
capabilities['deviceOrientation'] = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
324
|
-
|
325
|
-
elsif ENV['BS_OS']
|
326
|
-
capabilities['os'] = ENV['BS_OS']
|
327
|
-
capabilities['os_version'] = ENV['BS_OS_VERSION']
|
328
|
-
capabilities['browser'] = browser || 'chrome'
|
329
|
-
capabilities['browser_version'] = ENV['BS_VERSION'] if ENV['BS_VERSION']
|
330
|
-
capabilities['resolution'] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
331
|
-
end
|
332
|
-
|
333
|
-
capabilities['browserstack.selenium_version'] = ENV['SELENIUM_VERSION'] if ENV['SELENIUM_VERSION']
|
334
|
-
capabilities['browserstack.console'] = ENV['CONSOLE_LOGS'] if ENV['CONSOLE_LOGS']
|
335
|
-
capabilities['browserstack.timezone'] = ENV['TIME_ZONE'] if ENV['TIME_ZONE']
|
336
|
-
capabilities['browserstack.geoLocation'] = ENV['IP_GEOLOCATION'] if ENV['IP_GEOLOCATION']
|
337
|
-
capabilities['browserstack.video'] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
|
338
|
-
capabilities['browserstack.debug'] = 'true'
|
339
|
-
capabilities['project'] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
340
|
-
capabilities['build'] = ENV['AUTOMATE_BUILD'] if ENV['AUTOMATE_BUILD']
|
341
|
-
|
342
|
-
context_message = ENV['TEST_CONTEXT'] ? "#{Environ.test_environment.upcase} - #{ENV['TEST_CONTEXT']}" : Environ.test_environment.upcase
|
343
|
-
if ENV['PARALLEL']
|
344
|
-
thread_num = ENV['TEST_ENV_NUMBER']
|
345
|
-
thread_num = 1 if thread_num.blank?
|
346
|
-
context_message = "#{context_message} - Thread ##{thread_num}"
|
347
|
-
end
|
348
|
-
capabilities['name'] = context_message
|
349
|
-
|
350
|
-
capabilities['acceptSslCerts'] = 'true'
|
351
|
-
capabilities['browserstack.localIdentifier'] = ENV['BS_LOCAL_ID'] if ENV['BS_LOCAL_ID']
|
352
|
-
capabilities['browserstack.local'] = 'true' if ENV['TUNNELING']
|
353
|
-
|
354
|
-
case browser.downcase.to_sym
|
355
|
-
when :ie
|
356
|
-
capabilities['ie.fileUploadDialogTimeout'] = 10000
|
357
|
-
capabilities['ie.ensureCleanSession'] = 'true'
|
358
|
-
capabilities['ie.browserCommandLineSwitches'] = 'true'
|
359
|
-
capabilities['nativeEvents'] = 'true'
|
360
|
-
capabilities['browserstack.ie.driver'] = ENV['WD_VERSION'] if ENV['WD_VERSION']
|
361
|
-
capabilities['browserstack.ie.enablePopups'] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
362
|
-
when :edge
|
363
|
-
capabilities['ie.fileUploadDialogTimeout'] = 10000
|
364
|
-
capabilities['ie.ensureCleanSession'] = 'true'
|
365
|
-
capabilities['ie.browserCommandLineSwitches'] = 'true'
|
366
|
-
capabilities['nativeEvents'] = 'true'
|
367
|
-
capabilities['browserstack.ie.driver'] = ENV['WD_VERSION'] if ENV['WD_VERSION']
|
368
|
-
capabilities['browserstack.edge.enablePopups'] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
369
|
-
when :firefox
|
370
|
-
capabilities['browserstack.geckodriver'] = ENV['WD_VERSION'] if ENV['WD_VERSION']
|
371
|
-
when :safari
|
372
|
-
capabilities['cleanSession'] = 'true'
|
373
|
-
capabilities['browserstack.safari.driver'] = ENV['WD_VERSION'] if ENV['WD_VERSION']
|
374
|
-
capabilities['browserstack.safari.enablePopups'] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
375
|
-
capabilities['browserstack.safari.allowAllCookies'] = ENV['ALLOW_COOKIES'] if ENV['ALLOW_COOKIES']
|
376
|
-
when :iphone, :ipad
|
377
|
-
capabilities['javascriptEnabled'] = 'true'
|
378
|
-
capabilities['cleanSession'] = 'true'
|
379
|
-
end
|
380
|
-
|
381
|
-
unless desired_caps.nil?
|
382
|
-
capabilities = merge_caps ? capabilities.merge(desired_caps) : desired_caps
|
383
|
-
end
|
384
|
-
|
385
|
-
if ENV['TUNNELING']
|
386
|
-
@bs_local = BrowserStack::Local.new
|
387
|
-
bs_local_args = {'key' => "#{ENV['BS_AUTHKEY']}"}
|
388
|
-
@bs_local.start(bs_local_args)
|
389
|
-
if @bs_local.isRunning
|
390
|
-
puts 'BrowserStack Local instance has been started'
|
391
|
-
else
|
392
|
-
puts 'BrowserStack Local instance failed to start'
|
393
|
-
end
|
321
|
+
# specify endpoint url
|
322
|
+
@endpoint = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub-cloud.browserstack.com/wd/hub" if @endpoint.nil?
|
323
|
+
# enable tunneling if specified
|
324
|
+
if ENV['TUNNELING']
|
325
|
+
@bs_local = BrowserStack::Local.new
|
326
|
+
bs_local_args = {'key' => "#{ENV['BS_AUTHKEY']}"}
|
327
|
+
@bs_local.start(bs_local_args)
|
328
|
+
if @bs_local.isRunning
|
329
|
+
puts 'BrowserStack Local instance has been started'
|
330
|
+
else
|
331
|
+
puts 'BrowserStack Local instance failed to start'
|
394
332
|
end
|
395
|
-
|
396
|
-
Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
|
397
333
|
end
|
398
|
-
|
399
|
-
|
334
|
+
# define BrowserStack options
|
335
|
+
options = if @capabilities.nil?
|
336
|
+
browser_options = {}
|
337
|
+
# define the required set of BrowserStack options
|
338
|
+
bs_options = {
|
339
|
+
userName: ENV['BS_USERNAME'],
|
340
|
+
accessKey: ENV['BS_AUTHKEY'],
|
341
|
+
sessionName: test_context_message,
|
342
|
+
os: ENV['BS_OS'],
|
343
|
+
osVersion: ENV['BS_OS_VERSION']
|
344
|
+
}
|
345
|
+
# define browser specific BrowserStack options
|
346
|
+
case browser.downcase.to_sym
|
347
|
+
when :safari
|
348
|
+
browser_options[:enablePopups] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
349
|
+
browser_options[:allowAllCookies] = ENV['ALLOW_COOKIES'] if ENV['ALLOW_COOKIES']
|
350
|
+
bs_options[:safari] = browser_options unless browser_options.empty?
|
351
|
+
when :ie
|
352
|
+
browser_options[:enablePopups] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
353
|
+
bs_options[:ie] = browser_options unless browser_options.empty?
|
354
|
+
when :edge
|
355
|
+
browser_options[:enablePopups] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
356
|
+
bs_options[:edge] = browser_options unless browser_options.empty?
|
357
|
+
end
|
358
|
+
# define the optional BrowserStack options
|
359
|
+
bs_options[:projectName] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
360
|
+
bs_options[:buildName] = ENV['AUTOMATE_BUILD'] if ENV['AUTOMATE_BUILD']
|
361
|
+
bs_options[:headless] = ENV['HEADLESS'] if ENV['HEADLESS']
|
362
|
+
bs_options[:timezone] = ENV['TIME_ZONE'] if ENV['TIME_ZONE']
|
363
|
+
bs_options[:geoLocation] = ENV['IP_GEOLOCATION'] if ENV['IP_GEOLOCATION']
|
364
|
+
bs_options[:video] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
|
365
|
+
bs_options[:debug] = ENV['SCREENSHOTS'] if ENV['SCREENSHOTS']
|
366
|
+
bs_options[:networkLogs] = ENV['NETWORK_LOGS'] if ENV['NETWORK_LOGS']
|
367
|
+
bs_options[:local] = ENV['TUNNELING'] if ENV['TUNNELING']
|
368
|
+
bs_options[:deviceOrientation] = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
369
|
+
bs_options[:appiumLogs] = ENV['APPIUM_LOGS'] if ENV['APPIUM_LOGS']
|
370
|
+
bs_options[:realMobile] = ENV['BS_REAL_MOBILE'] if ENV['BS_REAL_MOBILE']
|
371
|
+
# define mobile device options
|
372
|
+
if ENV['BS_DEVICE']
|
373
|
+
bs_options[:deviceName] = ENV['BS_DEVICE']
|
374
|
+
bs_options[:appiumVersion] = '1.22.0'
|
375
|
+
{
|
376
|
+
browserName: browser,
|
377
|
+
'bstack:options': bs_options
|
378
|
+
}
|
379
|
+
else
|
380
|
+
# define desktop browser options
|
381
|
+
bs_options[:resolution] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
382
|
+
bs_options[:seleniumVersion] = '4.1.0'
|
383
|
+
{
|
384
|
+
browserName: browser,
|
385
|
+
browserVersion: ENV['BS_VERSION'],
|
386
|
+
'bstack:options': bs_options
|
387
|
+
}
|
388
|
+
end
|
389
|
+
else
|
390
|
+
@capabilities
|
391
|
+
end
|
392
|
+
register_remote_driver(:browserstack, browser, options)
|
393
|
+
# configure file_detector for remote uploads
|
394
|
+
config_file_uploads
|
400
395
|
Environ.tunneling = ENV['TUNNELING'] if ENV['TUNNELING']
|
401
396
|
Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
|
402
|
-
|
403
|
-
Capybara.default_driver = :browserstack
|
404
|
-
Capybara.run_server = false
|
405
|
-
# configure file_detector for remote uploads
|
406
|
-
selenium = Capybara.page.driver.browser
|
407
|
-
selenium.file_detector = lambda do |args|
|
408
|
-
str = args.first.to_s
|
409
|
-
str if File.exist?(str)
|
410
|
-
end
|
411
|
-
end
|
412
|
-
|
413
|
-
def self.initialize_crossbrowser(desired_caps = nil, merge_caps = false)
|
414
|
-
browser = ENV['CB_BROWSER']
|
415
|
-
Environ.grid = :crossbrowser
|
416
|
-
|
417
|
-
if ENV['CB_OS']
|
418
|
-
Environ.os = ENV['CB_OS']
|
419
|
-
Environ.platform = :desktop
|
420
|
-
elsif ENV['CB_PLATFORM']
|
421
|
-
Environ.device_name = ENV['CB_PLATFORM']
|
422
|
-
Environ.device = :device
|
423
|
-
Environ.platform = :mobile
|
424
|
-
Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
|
425
|
-
end
|
426
|
-
|
427
|
-
endpoint = "http://#{ENV['CB_USERNAME']}:#{ENV['CB_AUTHKEY']}@hub.crossbrowsertesting.com:80/wd/hub"
|
428
|
-
Capybara.register_driver :crossbrowser do |app|
|
429
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.new
|
430
|
-
capabilities['name'] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
431
|
-
capabilities['build'] = ENV['AUTOMATE_BUILD'] if ENV['AUTOMATE_BUILD']
|
432
|
-
capabilities['browser_api_name'] = browser
|
433
|
-
capabilities['screen_resolution'] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
434
|
-
if ENV['CB_OS']
|
435
|
-
capabilities['os_api_name'] = ENV['CB_OS']
|
436
|
-
Environ.platform = :desktop
|
437
|
-
elsif ENV['CB_PLATFORM']
|
438
|
-
capabilities['os_api_name'] = ENV['CB_PLATFORM']
|
439
|
-
end
|
440
|
-
|
441
|
-
unless desired_caps.nil?
|
442
|
-
capabilities = merge_caps ? capabilities.merge(desired_caps) : desired_caps
|
443
|
-
end
|
444
|
-
|
445
|
-
Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
|
446
|
-
end
|
447
|
-
|
448
|
-
Environ.browser = browser
|
449
|
-
|
450
|
-
Capybara.default_driver = :crossbrowser
|
451
|
-
Capybara.run_server = false
|
452
|
-
# configure file_detector for remote uploads
|
453
|
-
selenium = Capybara.page.driver.browser
|
454
|
-
selenium.file_detector = lambda do |args|
|
455
|
-
str = args.first.to_s
|
456
|
-
str if File.exist?(str)
|
457
|
-
end
|
458
397
|
end
|
459
398
|
|
460
|
-
def self.
|
461
|
-
browser = ENV['GL_BROWSER']
|
462
|
-
Environ.grid = :gridlastic
|
463
|
-
Environ.os = ENV['GL_OS']
|
464
|
-
endpoint = "http://#{ENV['GL_USERNAME']}:#{ENV['GL_AUTHKEY']}@#{ENV['GL_SUBDOMAIN']}.gridlastic.com:80/wd/hub"
|
465
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.new
|
466
|
-
capabilities['browserName'] = browser
|
467
|
-
capabilities['version'] = ENV['GL_VERSION'] if ENV['GL_VERSION']
|
468
|
-
capabilities['platform'] = ENV['GL_OS']
|
469
|
-
capabilities['platformName'] = ENV['GL_PLATFORM']
|
470
|
-
capabilities['video'] = ENV['RECORD_VIDEO'].capitalize if ENV['RECORD_VIDEO']
|
471
|
-
|
472
|
-
unless desired_caps.nil?
|
473
|
-
capabilities = merge_caps ? capabilities.merge(desired_caps) : desired_caps
|
474
|
-
end
|
475
|
-
|
476
|
-
Capybara.register_driver :selenium do |app|
|
477
|
-
client = Selenium::WebDriver::Remote::Http::Default.new
|
478
|
-
client.timeout = 1200
|
479
|
-
Capybara::Selenium::Driver.new(app, http_client: client, browser: :remote, url: endpoint, desired_capabilities: capabilities)
|
480
|
-
end
|
481
|
-
|
482
|
-
Environ.browser = browser
|
483
|
-
|
484
|
-
Capybara.default_driver = :selenium
|
485
|
-
Capybara.run_server = false
|
486
|
-
|
487
|
-
if ENV['RECORD_VIDEO']
|
488
|
-
session_id = Capybara.current_session.driver.browser.instance_variable_get(:@bridge).session_id
|
489
|
-
puts "TEST VIDEO URL: #{ENV['VIDEO_URL']}#{session_id}"
|
490
|
-
end
|
491
|
-
# configure file_detector for remote uploads
|
492
|
-
selenium = Capybara.page.driver.browser
|
493
|
-
selenium.file_detector = lambda do |args|
|
494
|
-
str = args.first.to_s
|
495
|
-
str if File.exist?(str)
|
496
|
-
end
|
497
|
-
end
|
498
|
-
|
499
|
-
def self.initialize_lambdatest(desired_caps = nil, merge_caps = false)
|
399
|
+
def self.initialize_lambdatest
|
500
400
|
browser = ENV['LT_BROWSER']
|
501
401
|
Environ.grid = :lambdatest
|
502
402
|
Environ.os = ENV['LT_OS']
|
503
403
|
Environ.platform = :desktop
|
504
404
|
Environ.tunneling = ENV['TUNNELING'] if ENV['TUNNELING']
|
505
|
-
|
506
|
-
endpoint = "
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
Capybara.default_driver = :lambdatest
|
548
|
-
Capybara.run_server = false
|
405
|
+
# specify endpoint url
|
406
|
+
@endpoint = "https://#{ENV['LT_USERNAME']}:#{ENV['LT_AUTHKEY']}@hub.lambdatest.com/wd/hub" if @endpoint.nil?
|
407
|
+
# define LambdaTest options
|
408
|
+
options = if @capabilities.nil?
|
409
|
+
# define the required set of LambdaTest options
|
410
|
+
lt_options = {
|
411
|
+
user: ENV['LT_USERNAME'],
|
412
|
+
accessKey: ENV['LT_AUTHKEY'],
|
413
|
+
build: test_context_message,
|
414
|
+
platformName: ENV['LT_OS'],
|
415
|
+
resolution: ENV['RESOLUTION'],
|
416
|
+
selenium_version: '4.0.0',
|
417
|
+
}
|
418
|
+
# define the optional LambdaTest options
|
419
|
+
lt_options[:name] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
420
|
+
lt_options[:headless] = ENV['HEADLESS'] if ENV['HEADLESS']
|
421
|
+
lt_options[:timezone] = ENV['TIME_ZONE'] if ENV['TIME_ZONE']
|
422
|
+
lt_options[:geoLocation] = ENV['GEO_LOCATION'] if ENV['GEO_LOCATION']
|
423
|
+
lt_options[:video] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
|
424
|
+
lt_options[:visual] = ENV['SCREENSHOTS'] if ENV['SCREENSHOTS']
|
425
|
+
lt_options[:network] = ENV['NETWORK_LOGS'] if ENV['NETWORK_LOGS']
|
426
|
+
lt_options[:tunnel] = ENV['TUNNELING'] if ENV['TUNNELING']
|
427
|
+
# define browser specific LambdaTest options
|
428
|
+
case browser.downcase.to_sym
|
429
|
+
when :safari
|
430
|
+
lt_options['safari.popups'] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
431
|
+
lt_options['safari.cookies'] = ENV['ALLOW_COOKIES'] if ENV['ALLOW_COOKIES']
|
432
|
+
when :ie
|
433
|
+
lt_options['ie.popups'] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
434
|
+
when :microsoftedge
|
435
|
+
lt_options['edge.popups'] = ENV['ALLOW_POPUPS'] if ENV['ALLOW_POPUPS']
|
436
|
+
end
|
437
|
+
{
|
438
|
+
browserName: browser,
|
439
|
+
browserVersion: ENV['LT_VERSION'],
|
440
|
+
'LT:Options': lt_options
|
441
|
+
}
|
442
|
+
else
|
443
|
+
@capabilities
|
444
|
+
end
|
445
|
+
register_remote_driver(:lambdatest, browser, options)
|
549
446
|
# configure file_detector for remote uploads
|
550
|
-
|
551
|
-
selenium.file_detector = lambda do |args|
|
552
|
-
str = args.first.to_s
|
553
|
-
str if File.exist?(str)
|
554
|
-
end
|
447
|
+
config_file_uploads
|
555
448
|
end
|
556
449
|
|
557
450
|
def self.initialize_remote
|
558
451
|
Environ.grid = :selenium_grid
|
559
452
|
browser = ENV['WEB_BROWSER'].downcase.to_sym
|
560
|
-
endpoint = ENV['REMOTE_ENDPOINT'] || 'http://127.0.0.1:4444/wd/hub'
|
453
|
+
@endpoint = ENV['REMOTE_ENDPOINT'] || 'http://127.0.0.1:4444/wd/hub' if @endpoint.nil?
|
561
454
|
Capybara.register_driver :remote_browser do |app|
|
562
455
|
case browser
|
563
|
-
when :
|
564
|
-
|
456
|
+
when :safari
|
457
|
+
options = Selenium::WebDriver::Safari::Options.new
|
458
|
+
when :ie
|
459
|
+
options = Selenium::WebDriver::IE::Options.new
|
460
|
+
when :firefox, :firefox_headless
|
461
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
462
|
+
profile['browser.download.dir'] = @downloads_path
|
463
|
+
profile['browser.download.folderList'] = 2
|
464
|
+
profile['browser.download.manager.showWhenStarting'] = false
|
465
|
+
profile['browser.download.manager.closeWhenDone'] = true
|
466
|
+
profile['browser.download.manager.showAlertOnComplete'] = false
|
467
|
+
profile['browser.download.manager.alertOnEXEOpen'] = false
|
468
|
+
profile['browser.download.manager.useWindow'] = false
|
469
|
+
profile['browser.helperApps.alwaysAsk.force'] = false
|
470
|
+
profile['pdfjs.disabled'] = true
|
471
|
+
|
472
|
+
mime_types = ENV['MIME_TYPES'] || 'images/jpeg, application/pdf, application/octet-stream'
|
473
|
+
profile['browser.helperApps.neverAsk.saveToDisk'] = mime_types
|
474
|
+
|
475
|
+
profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
|
476
|
+
options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
|
477
|
+
options.args << '--headless' if browser == :firefox_headless
|
565
478
|
when :chrome, :chrome_headless
|
566
|
-
options =
|
567
|
-
|
568
|
-
|
479
|
+
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
480
|
+
prefs = {
|
481
|
+
prompt_for_download: false,
|
482
|
+
directory_upgrade: true,
|
483
|
+
default_directory: @downloads_path
|
484
|
+
}
|
485
|
+
options.add_preference(:download, prefs)
|
486
|
+
options.add_argument('--disable-dev-shm-usage')
|
487
|
+
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
569
488
|
if browser == :chrome_headless
|
570
|
-
|
571
|
-
options.
|
572
|
-
options.
|
573
|
-
|
489
|
+
options.add_argument('--headless')
|
490
|
+
options.add_argument('--disable-gpu')
|
491
|
+
options.add_argument('--no-sandbox')
|
492
|
+
end
|
493
|
+
when :edge, :edge_headless
|
494
|
+
options = Selenium::WebDriver::Edge::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
495
|
+
prefs = {
|
496
|
+
prompt_for_download: false,
|
497
|
+
directory_upgrade: true,
|
498
|
+
default_directory: @downloads_path
|
499
|
+
}
|
500
|
+
options.add_preference(:download, prefs)
|
501
|
+
options.add_argument('--disable-dev-shm-usage')
|
502
|
+
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
503
|
+
if browser == :edge_headless
|
504
|
+
options.add_argument('--headless')
|
505
|
+
options.add_argument('--disable-gpu')
|
506
|
+
options.add_argument('--no-sandbox')
|
574
507
|
end
|
575
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome('goog:chromeOptions' => { args: options })
|
576
508
|
else
|
577
509
|
if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
|
578
510
|
Environ.platform = :mobile
|
579
511
|
Environ.device_name = Browsers.mobile_device_name(ENV['WEB_BROWSER'])
|
580
512
|
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
581
|
-
options =
|
582
|
-
options.
|
583
|
-
options.
|
584
|
-
options.
|
585
|
-
|
513
|
+
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
514
|
+
options.add_argument('--disable-infobars')
|
515
|
+
options.add_argument('--disable-dev-shm-usage')
|
516
|
+
options.add_argument("--user-agent='#{user_agent}'")
|
517
|
+
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
586
518
|
else
|
587
519
|
raise "Requested browser '#{browser}' is not supported on Selenium Grid"
|
588
520
|
end
|
589
521
|
end
|
590
522
|
Capybara::Selenium::Driver.new(app,
|
591
523
|
browser: :remote,
|
592
|
-
url: endpoint,
|
593
|
-
|
524
|
+
url: @endpoint,
|
525
|
+
capabilities: [options]).tap do |driver|
|
594
526
|
# configure file_detector for remote uploads
|
595
527
|
driver.browser.file_detector = lambda do |args|
|
596
528
|
str = args.first.to_s
|
@@ -602,7 +534,7 @@ module TestCentricity
|
|
602
534
|
Capybara.default_driver = :remote_browser
|
603
535
|
end
|
604
536
|
|
605
|
-
def self.initialize_saucelabs
|
537
|
+
def self.initialize_saucelabs
|
606
538
|
browser = ENV['SL_BROWSER']
|
607
539
|
Environ.grid = :saucelabs
|
608
540
|
|
@@ -611,47 +543,54 @@ module TestCentricity
|
|
611
543
|
Environ.os = ENV['SL_OS']
|
612
544
|
elsif ENV['SL_PLATFORM']
|
613
545
|
Environ.device_name = ENV['SL_DEVICE']
|
614
|
-
Environ.platform
|
615
|
-
|
616
|
-
|
617
|
-
endpoint = "http://#{ENV['SL_USERNAME']}:#{ENV['SL_AUTHKEY']}@ondemand.saucelabs.com:80/wd/hub"
|
618
|
-
Capybara.register_driver :saucelabs do |app|
|
619
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.new
|
620
|
-
capabilities['name'] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
621
|
-
capabilities['build'] = ENV['AUTOMATE_BUILD'] if ENV['AUTOMATE_BUILD']
|
622
|
-
capabilities['browserName'] = browser
|
623
|
-
capabilities['version'] = ENV['SL_VERSION'] if ENV['SL_VERSION']
|
624
|
-
capabilities['screenResolution'] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
625
|
-
capabilities['recordVideo'] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
|
626
|
-
if ENV['SL_OS']
|
627
|
-
capabilities['platform'] = ENV['SL_OS']
|
628
|
-
elsif ENV['SL_PLATFORM']
|
629
|
-
capabilities['platform'] = ENV['SL_PLATFORM']
|
630
|
-
capabilities['deviceName'] = ENV['SL_DEVICE']
|
631
|
-
capabilities['deviceType'] = ENV['SL_DEVICE_TYPE'] if ENV['SL_DEVICE_TYPE']
|
632
|
-
capabilities['deviceOrientation'] = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
633
|
-
end
|
634
|
-
|
635
|
-
unless desired_caps.nil?
|
636
|
-
capabilities = merge_caps ? capabilities.merge(desired_caps) : desired_caps
|
637
|
-
end
|
638
|
-
|
639
|
-
Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, desired_capabilities: capabilities)
|
546
|
+
Environ.platform = :mobile
|
547
|
+
Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
548
|
+
Environ.device = :simulator
|
640
549
|
end
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
550
|
+
# specify endpoint url
|
551
|
+
@endpoint = "https://#{ENV['SL_USERNAME']}:#{ENV['SL_AUTHKEY']}@ondemand.#{ENV['DATA_CENTER']}.saucelabs.com/wd/hub" if @endpoint.nil?
|
552
|
+
# define SauceLab options
|
553
|
+
options = if @capabilities.nil?
|
554
|
+
# define the required set of SauceLab options
|
555
|
+
sl_options = {
|
556
|
+
userName: ENV['SL_USERNAME'],
|
557
|
+
accessKey: ENV['SL_AUTHKEY'],
|
558
|
+
build: test_context_message
|
559
|
+
}
|
560
|
+
# define the optional SauceLab options
|
561
|
+
sl_options[:name] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
562
|
+
sl_options[:recordVideo] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
|
563
|
+
sl_options[:recordScreenshots] = ENV['SCREENSHOTS'] if ENV['SCREENSHOTS']
|
564
|
+
# define mobile device options
|
565
|
+
if ENV['SL_PLATFORM']
|
566
|
+
sl_options[:deviceOrientation] = ENV['ORIENTATION'].upcase if ENV['ORIENTATION']
|
567
|
+
sl_options[:appiumVersion] = '1.22.0'
|
568
|
+
{
|
569
|
+
browserName: browser,
|
570
|
+
platformName: ENV['SL_PLATFORM'],
|
571
|
+
'appium:deviceName': ENV['SL_DEVICE'],
|
572
|
+
'appium:platformVersion': ENV['SL_VERSION'],
|
573
|
+
'sauce:options': sl_options
|
574
|
+
}
|
575
|
+
else
|
576
|
+
# define desktop browser options
|
577
|
+
sl_options[:screenResolution] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
578
|
+
{
|
579
|
+
browserName: browser,
|
580
|
+
browserVersion: ENV['SL_VERSION'],
|
581
|
+
platformName: ENV['SL_OS'],
|
582
|
+
'sauce:options': sl_options
|
583
|
+
}
|
584
|
+
end
|
585
|
+
else
|
586
|
+
@capabilities
|
587
|
+
end
|
588
|
+
register_remote_driver(:saucelabs, browser, options)
|
646
589
|
# configure file_detector for remote uploads
|
647
|
-
|
648
|
-
selenium.file_detector = lambda do |args|
|
649
|
-
str = args.first.to_s
|
650
|
-
str if File.exist?(str)
|
651
|
-
end
|
590
|
+
config_file_uploads
|
652
591
|
end
|
653
592
|
|
654
|
-
def self.initialize_testingbot
|
593
|
+
def self.initialize_testingbot
|
655
594
|
browser = ENV['TB_BROWSER']
|
656
595
|
Environ.grid = :testingbot
|
657
596
|
|
@@ -666,35 +605,72 @@ module TestCentricity
|
|
666
605
|
else
|
667
606
|
Environ.platform = :desktop
|
668
607
|
end
|
608
|
+
# specify endpoint url
|
609
|
+
if @endpoint.nil?
|
610
|
+
url = ENV['TUNNELING'] ? '@localhost:4445/wd/hub' : '@hub.testingbot.com/wd/hub'
|
611
|
+
@endpoint = "http://#{ENV['TB_USERNAME']}:#{ENV['TB_AUTHKEY']}#{url}"
|
612
|
+
end
|
613
|
+
# define TestingBot options
|
614
|
+
options = if @capabilities.nil?
|
615
|
+
# define the required set of TestingBot options
|
616
|
+
tb_options = { build: test_context_message }
|
617
|
+
# define the optional TestingBot options
|
618
|
+
tb_options[:name] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
619
|
+
tb_options[:timeZone] = ENV['TIME_ZONE'] if ENV['TIME_ZONE']
|
620
|
+
tb_options['testingbot.geoCountryCode'] = ENV['GEO_LOCATION'] if ENV['GEO_LOCATION']
|
621
|
+
tb_options[:screenrecorder] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
|
622
|
+
tb_options[:screenshot] = ENV['SCREENSHOTS'] if ENV['SCREENSHOTS']
|
623
|
+
# define mobile device options
|
624
|
+
if ENV['TB_PLATFORM']
|
625
|
+
tb_options[:platform] = ENV['TB_PLATFORM']
|
626
|
+
tb_options[:orientation] = ENV['ORIENTATION'].upcase if ENV['ORIENTATION']
|
627
|
+
tb_options[:deviceName] = ENV['TB_DEVICE'] if ENV['TB_DEVICE']
|
628
|
+
else
|
629
|
+
# define desktop browser options
|
630
|
+
tb_options['screen-resolution'] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
631
|
+
tb_options['selenium-version'] = '4.1.0'
|
632
|
+
end
|
633
|
+
{
|
634
|
+
browserName: browser,
|
635
|
+
browserVersion: ENV['TB_VERSION'],
|
636
|
+
platformName: ENV['TB_OS'],
|
637
|
+
'tb:options': tb_options
|
638
|
+
}
|
639
|
+
else
|
640
|
+
@capabilities
|
641
|
+
end
|
642
|
+
register_remote_driver(:testingbot, browser, options)
|
643
|
+
# configure file_detector for remote uploads if target is desktop web browser
|
644
|
+
config_file_uploads unless ENV['TB_PLATFORM']
|
645
|
+
end
|
669
646
|
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
capabilities['platformName'] = ENV['TB_PLATFORM']
|
684
|
-
capabilities['deviceName'] = ENV['TB_DEVICE']
|
685
|
-
end
|
686
|
-
|
687
|
-
unless desired_caps.nil?
|
688
|
-
capabilities = merge_caps ? capabilities.merge(desired_caps) : desired_caps
|
689
|
-
end
|
647
|
+
def self.test_context_message
|
648
|
+
context_message = if ENV['TEST_CONTEXT']
|
649
|
+
"#{Environ.test_environment.to_s.upcase} - #{ENV['TEST_CONTEXT']}"
|
650
|
+
else
|
651
|
+
Environ.test_environment.to_s.upcase
|
652
|
+
end
|
653
|
+
if ENV['PARALLEL']
|
654
|
+
thread_num = ENV['TEST_ENV_NUMBER']
|
655
|
+
thread_num = 1 if thread_num.blank?
|
656
|
+
context_message = "#{context_message} - Thread ##{thread_num}"
|
657
|
+
end
|
658
|
+
context_message
|
659
|
+
end
|
690
660
|
|
691
|
-
|
661
|
+
def self.register_remote_driver(driver, browser, options)
|
662
|
+
Capybara.register_driver driver do |app|
|
663
|
+
capabilities = Selenium::WebDriver::Remote::Capabilities.send(browser.gsub(/\s+/, '_').downcase.to_sym, options)
|
664
|
+
Capybara::Selenium::Driver.new(app, browser: :remote, url: @endpoint, capabilities: capabilities)
|
692
665
|
end
|
693
666
|
|
694
667
|
Environ.browser = browser
|
695
668
|
|
696
|
-
Capybara.default_driver =
|
669
|
+
Capybara.default_driver = driver
|
697
670
|
Capybara.run_server = false
|
671
|
+
end
|
672
|
+
|
673
|
+
def self.config_file_uploads
|
698
674
|
# configure file_detector for remote uploads
|
699
675
|
selenium = Capybara.page.driver.browser
|
700
676
|
selenium.file_detector = lambda do |args|
|