testcentricity_web 4.1.0 → 4.1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/Gemfile.lock +112 -0
- data/README.md +548 -606
- data/lib/devices/devices.yml +0 -16
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/page_object.rb +12 -12
- data/lib/testcentricity_web/web_core/page_section.rb +14 -14
- data/lib/testcentricity_web/web_core/webdriver_helper.rb +194 -237
- data/test_site/test_page.html +11 -0
- data/testcentricity_web.gemspec +4 -5
- metadata +15 -9
- data/my_templates/default/method_details/setup.rb +0 -3
@@ -11,14 +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
|
-
|
18
|
+
@endpoint = nil
|
19
|
+
@capabilities = nil
|
17
20
|
if options.is_a?(String)
|
18
21
|
Capybara.app_host = options
|
19
22
|
elsif options.is_a?(Hash)
|
20
23
|
Capybara.app_host = options[:app_host] if options.key?(:app_host)
|
21
|
-
|
24
|
+
@endpoint = options[:endpoint] if options.key?(:endpoint)
|
25
|
+
@capabilities = options[:desired_capabilities] if options.key?(:desired_capabilities)
|
22
26
|
end
|
23
27
|
|
24
28
|
browser = ENV['WEB_BROWSER']
|
@@ -44,25 +48,19 @@ module TestCentricity
|
|
44
48
|
|
45
49
|
context = case browser.downcase.to_sym
|
46
50
|
when :appium
|
47
|
-
initialize_appium
|
51
|
+
initialize_appium
|
48
52
|
'mobile device emulator'
|
49
53
|
when :browserstack
|
50
|
-
initialize_browserstack
|
54
|
+
initialize_browserstack
|
51
55
|
'Browserstack cloud service'
|
52
|
-
when :crossbrowser
|
53
|
-
initialize_crossbrowser(desired_caps)
|
54
|
-
'CrossBrowserTesting cloud service'
|
55
|
-
when :gridlastic
|
56
|
-
initialize_gridlastic(desired_caps)
|
57
|
-
'Gridlastic cloud service'
|
58
56
|
when :lambdatest
|
59
|
-
initialize_lambdatest
|
57
|
+
initialize_lambdatest
|
60
58
|
'LambdaTest cloud service'
|
61
59
|
when :saucelabs
|
62
|
-
initialize_saucelabs
|
60
|
+
initialize_saucelabs
|
63
61
|
'Sauce Labs cloud service'
|
64
62
|
when :testingbot
|
65
|
-
initialize_testingbot
|
63
|
+
initialize_testingbot
|
66
64
|
'TestingBot cloud service'
|
67
65
|
else
|
68
66
|
if ENV['SELENIUM'] == 'remote'
|
@@ -75,7 +73,7 @@ module TestCentricity
|
|
75
73
|
end
|
76
74
|
|
77
75
|
# set browser window size only if testing with a desktop web browser
|
78
|
-
unless Environ.is_device? || Capybara.current_driver == :appium
|
76
|
+
unless Environ.is_device? || Environ.is_simulator? || Capybara.current_driver == :appium
|
79
77
|
initialize_browser_size
|
80
78
|
end
|
81
79
|
|
@@ -131,7 +129,7 @@ module TestCentricity
|
|
131
129
|
|
132
130
|
private
|
133
131
|
|
134
|
-
def self.initialize_appium
|
132
|
+
def self.initialize_appium
|
135
133
|
Environ.platform = :mobile
|
136
134
|
Environ.device_name = ENV['APP_DEVICE']
|
137
135
|
Environ.device_os = ENV['APP_PLATFORM_NAME'].downcase.to_sym
|
@@ -139,7 +137,7 @@ module TestCentricity
|
|
139
137
|
Environ.device_os_version = ENV['APP_VERSION']
|
140
138
|
Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
141
139
|
Capybara.default_driver = :appium
|
142
|
-
endpoint = 'http://localhost:4723/wd/hub'
|
140
|
+
@endpoint = 'http://localhost:4723/wd/hub' if @endpoint.nil?
|
143
141
|
desired_capabilities = {
|
144
142
|
platformName: Environ.device_os,
|
145
143
|
platformVersion: Environ.device_os_version,
|
@@ -191,12 +189,12 @@ module TestCentricity
|
|
191
189
|
desired_capabilities[:systemPort] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
|
192
190
|
end
|
193
191
|
|
194
|
-
unless
|
195
|
-
desired_capabilities =
|
192
|
+
unless @capabilities.nil?
|
193
|
+
desired_capabilities = @capabilities
|
196
194
|
end
|
197
195
|
|
198
196
|
Capybara.register_driver :appium do |app|
|
199
|
-
appium_lib_options = { server_url: endpoint }
|
197
|
+
appium_lib_options = { server_url: @endpoint }
|
200
198
|
all_options = {
|
201
199
|
appium_lib: appium_lib_options,
|
202
200
|
caps: desired_capabilities
|
@@ -231,9 +229,7 @@ module TestCentricity
|
|
231
229
|
|
232
230
|
Capybara.register_driver :selenium do |app|
|
233
231
|
case browser
|
234
|
-
when :safari
|
235
|
-
Capybara::Selenium::Driver.new(app, browser: browser)
|
236
|
-
when :ie
|
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
|
@@ -291,7 +287,7 @@ module TestCentricity
|
|
291
287
|
else
|
292
288
|
if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
|
293
289
|
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
294
|
-
options = Selenium::WebDriver::Chrome::Options.new
|
290
|
+
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
295
291
|
options.add_argument('--disable-infobars')
|
296
292
|
options.add_argument('--disable-dev-shm-usage')
|
297
293
|
options.add_argument("--user-agent='#{user_agent}'")
|
@@ -305,7 +301,7 @@ module TestCentricity
|
|
305
301
|
Capybara.default_driver = :selenium
|
306
302
|
end
|
307
303
|
|
308
|
-
def self.initialize_browserstack
|
304
|
+
def self.initialize_browserstack
|
309
305
|
browser = ENV['BS_BROWSER']
|
310
306
|
Environ.grid = :browserstack
|
311
307
|
|
@@ -323,7 +319,7 @@ module TestCentricity
|
|
323
319
|
Environ.os = "#{ENV['BS_OS']} #{ENV['BS_OS_VERSION']}"
|
324
320
|
end
|
325
321
|
# specify endpoint url
|
326
|
-
endpoint = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub-cloud.browserstack.com/wd/hub"
|
322
|
+
@endpoint = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub-cloud.browserstack.com/wd/hub" if @endpoint.nil?
|
327
323
|
# enable tunneling if specified
|
328
324
|
if ENV['TUNNELING']
|
329
325
|
@bs_local = BrowserStack::Local.new
|
@@ -336,7 +332,7 @@ module TestCentricity
|
|
336
332
|
end
|
337
333
|
end
|
338
334
|
# define BrowserStack options
|
339
|
-
options = if
|
335
|
+
options = if @capabilities.nil?
|
340
336
|
browser_options = {}
|
341
337
|
# define the required set of BrowserStack options
|
342
338
|
bs_options = {
|
@@ -372,6 +368,7 @@ module TestCentricity
|
|
372
368
|
bs_options[:deviceOrientation] = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
373
369
|
bs_options[:appiumLogs] = ENV['APPIUM_LOGS'] if ENV['APPIUM_LOGS']
|
374
370
|
bs_options[:realMobile] = ENV['BS_REAL_MOBILE'] if ENV['BS_REAL_MOBILE']
|
371
|
+
# define mobile device options
|
375
372
|
if ENV['BS_DEVICE']
|
376
373
|
bs_options[:deviceName] = ENV['BS_DEVICE']
|
377
374
|
bs_options[:appiumVersion] = '1.22.0'
|
@@ -380,6 +377,7 @@ module TestCentricity
|
|
380
377
|
'bstack:options': bs_options
|
381
378
|
}
|
382
379
|
else
|
380
|
+
# define desktop browser options
|
383
381
|
bs_options[:resolution] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
384
382
|
bs_options[:seleniumVersion] = '4.1.0'
|
385
383
|
{
|
@@ -389,123 +387,25 @@ module TestCentricity
|
|
389
387
|
}
|
390
388
|
end
|
391
389
|
else
|
392
|
-
|
390
|
+
@capabilities
|
393
391
|
end
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
end
|
398
|
-
|
399
|
-
Environ.browser = browser
|
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)
|
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 = 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
|
-
end
|
459
|
-
|
460
|
-
def self.initialize_gridlastic(desired_caps = nil)
|
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 = 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
397
|
end
|
498
398
|
|
499
|
-
def self.initialize_lambdatest
|
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
405
|
# specify endpoint url
|
506
|
-
endpoint = "https://#{ENV['LT_USERNAME']}:#{ENV['LT_AUTHKEY']}@hub.lambdatest.com/wd/hub"
|
406
|
+
@endpoint = "https://#{ENV['LT_USERNAME']}:#{ENV['LT_AUTHKEY']}@hub.lambdatest.com/wd/hub" if @endpoint.nil?
|
507
407
|
# define LambdaTest options
|
508
|
-
options = if
|
408
|
+
options = if @capabilities.nil?
|
509
409
|
# define the required set of LambdaTest options
|
510
410
|
lt_options = {
|
511
411
|
user: ENV['LT_USERNAME'],
|
@@ -540,62 +440,89 @@ module TestCentricity
|
|
540
440
|
'LT:Options': lt_options
|
541
441
|
}
|
542
442
|
else
|
543
|
-
|
443
|
+
@capabilities
|
544
444
|
end
|
545
|
-
|
546
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.send(browser.gsub(/\s+/, '_').downcase.to_sym, options)
|
547
|
-
Capybara::Selenium::Driver.new(app, browser: :remote, url: endpoint, capabilities: capabilities)
|
548
|
-
end
|
549
|
-
|
550
|
-
Environ.browser = browser
|
551
|
-
|
552
|
-
Capybara.default_driver = :lambdatest
|
553
|
-
Capybara.run_server = false
|
445
|
+
register_remote_driver(:lambdatest, browser, options)
|
554
446
|
# configure file_detector for remote uploads
|
555
|
-
|
556
|
-
selenium.file_detector = lambda do |args|
|
557
|
-
str = args.first.to_s
|
558
|
-
str if File.exist?(str)
|
559
|
-
end
|
447
|
+
config_file_uploads
|
560
448
|
end
|
561
449
|
|
562
450
|
def self.initialize_remote
|
563
451
|
Environ.grid = :selenium_grid
|
564
452
|
browser = ENV['WEB_BROWSER'].downcase.to_sym
|
565
|
-
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?
|
566
454
|
Capybara.register_driver :remote_browser do |app|
|
567
455
|
case browser
|
568
|
-
when :
|
569
|
-
|
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
|
570
478
|
when :chrome, :chrome_headless
|
571
|
-
options =
|
572
|
-
|
573
|
-
|
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']
|
574
488
|
if browser == :chrome_headless
|
575
|
-
|
576
|
-
options.
|
577
|
-
options.
|
578
|
-
|
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')
|
579
507
|
end
|
580
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome('goog:chromeOptions' => { args: options })
|
581
508
|
else
|
582
509
|
if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
|
583
510
|
Environ.platform = :mobile
|
584
511
|
Environ.device_name = Browsers.mobile_device_name(ENV['WEB_BROWSER'])
|
585
512
|
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
586
|
-
options =
|
587
|
-
options.
|
588
|
-
options.
|
589
|
-
options.
|
590
|
-
|
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']
|
591
518
|
else
|
592
519
|
raise "Requested browser '#{browser}' is not supported on Selenium Grid"
|
593
520
|
end
|
594
521
|
end
|
595
522
|
Capybara::Selenium::Driver.new(app,
|
596
523
|
browser: :remote,
|
597
|
-
url: endpoint,
|
598
|
-
|
524
|
+
url: @endpoint,
|
525
|
+
capabilities: [options]).tap do |driver|
|
599
526
|
# configure file_detector for remote uploads
|
600
527
|
driver.browser.file_detector = lambda do |args|
|
601
528
|
str = args.first.to_s
|
@@ -607,7 +534,7 @@ module TestCentricity
|
|
607
534
|
Capybara.default_driver = :remote_browser
|
608
535
|
end
|
609
536
|
|
610
|
-
def self.initialize_saucelabs
|
537
|
+
def self.initialize_saucelabs
|
611
538
|
browser = ENV['SL_BROWSER']
|
612
539
|
Environ.grid = :saucelabs
|
613
540
|
|
@@ -616,47 +543,54 @@ module TestCentricity
|
|
616
543
|
Environ.os = ENV['SL_OS']
|
617
544
|
elsif ENV['SL_PLATFORM']
|
618
545
|
Environ.device_name = ENV['SL_DEVICE']
|
619
|
-
Environ.platform
|
620
|
-
|
621
|
-
|
622
|
-
endpoint = "http://#{ENV['SL_USERNAME']}:#{ENV['SL_AUTHKEY']}@ondemand.saucelabs.com:80/wd/hub"
|
623
|
-
Capybara.register_driver :saucelabs do |app|
|
624
|
-
capabilities = Selenium::WebDriver::Remote::Capabilities.new
|
625
|
-
capabilities['name'] = ENV['AUTOMATE_PROJECT'] if ENV['AUTOMATE_PROJECT']
|
626
|
-
capabilities['build'] = ENV['AUTOMATE_BUILD'] if ENV['AUTOMATE_BUILD']
|
627
|
-
capabilities['browserName'] = browser
|
628
|
-
capabilities['version'] = ENV['SL_VERSION'] if ENV['SL_VERSION']
|
629
|
-
capabilities['screenResolution'] = ENV['RESOLUTION'] if ENV['RESOLUTION']
|
630
|
-
capabilities['recordVideo'] = ENV['RECORD_VIDEO'] if ENV['RECORD_VIDEO']
|
631
|
-
if ENV['SL_OS']
|
632
|
-
capabilities['platform'] = ENV['SL_OS']
|
633
|
-
elsif ENV['SL_PLATFORM']
|
634
|
-
capabilities['platform'] = ENV['SL_PLATFORM']
|
635
|
-
capabilities['deviceName'] = ENV['SL_DEVICE']
|
636
|
-
capabilities['deviceType'] = ENV['SL_DEVICE_TYPE'] if ENV['SL_DEVICE_TYPE']
|
637
|
-
capabilities['deviceOrientation'] = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
638
|
-
end
|
639
|
-
|
640
|
-
unless desired_caps.nil?
|
641
|
-
capabilities = desired_caps
|
642
|
-
end
|
643
|
-
|
644
|
-
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
|
645
549
|
end
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
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)
|
651
589
|
# configure file_detector for remote uploads
|
652
|
-
|
653
|
-
selenium.file_detector = lambda do |args|
|
654
|
-
str = args.first.to_s
|
655
|
-
str if File.exist?(str)
|
656
|
-
end
|
590
|
+
config_file_uploads
|
657
591
|
end
|
658
592
|
|
659
|
-
def self.initialize_testingbot
|
593
|
+
def self.initialize_testingbot
|
660
594
|
browser = ENV['TB_BROWSER']
|
661
595
|
Environ.grid = :testingbot
|
662
596
|
|
@@ -671,41 +605,43 @@ module TestCentricity
|
|
671
605
|
else
|
672
606
|
Environ.platform = :desktop
|
673
607
|
end
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
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']
|
709
645
|
end
|
710
646
|
|
711
647
|
def self.test_context_message
|
@@ -721,5 +657,26 @@ module TestCentricity
|
|
721
657
|
end
|
722
658
|
context_message
|
723
659
|
end
|
660
|
+
|
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)
|
665
|
+
end
|
666
|
+
|
667
|
+
Environ.browser = browser
|
668
|
+
|
669
|
+
Capybara.default_driver = driver
|
670
|
+
Capybara.run_server = false
|
671
|
+
end
|
672
|
+
|
673
|
+
def self.config_file_uploads
|
674
|
+
# configure file_detector for remote uploads
|
675
|
+
selenium = Capybara.page.driver.browser
|
676
|
+
selenium.file_detector = lambda do |args|
|
677
|
+
str = args.first.to_s
|
678
|
+
str if File.exist?(str)
|
679
|
+
end
|
680
|
+
end
|
724
681
|
end
|
725
682
|
end
|
data/testcentricity_web.gemspec
CHANGED
@@ -13,12 +13,11 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.summary = 'A Page Object and Data Object Model Framework for desktop and mobile web testing'
|
14
14
|
spec.description = '
|
15
15
|
The TestCentricity™ Web core generic framework for desktop and mobile web browser-based app testing implements
|
16
|
-
a Page Object Model DSL for use with Cucumber, Capybara, and Selenium-Webdriver. The gem provides support for running
|
16
|
+
a Page Object Model DSL for use with Cucumber, Capybara, and Selenium-Webdriver v4.x. The gem provides support for running
|
17
17
|
automated tests against locally hosted desktop browsers, locally hosted emulated mobile browsers (iOS, Android, Windows
|
18
18
|
Phone, Blackberry, Kindle Fire) running within a local instance of Chrome, mobile Safari browsers on iOS device simulators
|
19
|
-
|
20
|
-
|
21
|
-
BrowserStack, Sauce Labs, CrossBrowserTesting, TestingBot, Gridlastic, or LambdaTest services).'
|
19
|
+
or physical iOS devices, mobile Chrome or Android browsers on Android Studio virtual device emulators, or cloud hosted
|
20
|
+
desktop or mobile web browsers (using the BrowserStack, Sauce Labs, TestingBot, or LambdaTest services).'
|
22
21
|
spec.homepage = ''
|
23
22
|
spec.license = 'BSD-3-Clause'
|
24
23
|
|
@@ -39,7 +38,7 @@ Gem::Specification.new do |spec|
|
|
39
38
|
spec.add_runtime_dependency 'faker'
|
40
39
|
spec.add_runtime_dependency 'i18n'
|
41
40
|
spec.add_runtime_dependency 'os', '~> 1.0'
|
42
|
-
spec.add_runtime_dependency 'selenium-webdriver'
|
41
|
+
spec.add_runtime_dependency 'selenium-webdriver', '>= 4.0', '< 5'
|
43
42
|
spec.add_runtime_dependency 'spreadsheet', '1.1.7'
|
44
43
|
spec.add_runtime_dependency 'test-unit'
|
45
44
|
spec.add_runtime_dependency 'webdrivers', '~> 5.0'
|