testcentricity_web 4.1.4 → 4.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +18 -0
- data/.simplecov +5 -0
- data/CHANGELOG.md +43 -1
- data/Gemfile.lock +60 -2
- data/README.md +166 -21
- data/Rakefile +60 -1
- data/config/cucumber.yml +163 -0
- data/config/test_data/data.json +12 -0
- data/config/test_data/data.xls +0 -0
- data/config/test_data/data.yml +12 -0
- data/docker-compose-v3.yml +48 -0
- data/features/basic_test_page_css.feature +35 -0
- data/features/basic_test_page_xpath.feature +27 -0
- data/features/media_players.feature +87 -0
- data/features/step_definitions/generic_steps.rb.rb +44 -0
- data/features/step_definitions/media_steps.rb +30 -0
- data/features/support/env.rb +50 -0
- data/features/support/hooks.rb +245 -0
- data/features/support/pages/base_test_page.rb +11 -0
- data/features/support/pages/basic_css_test_page.rb +52 -0
- data/features/support/pages/basic_test_page.rb +297 -0
- data/features/support/pages/basic_xpath_test_page.rb +53 -0
- data/features/support/pages/custom_controls_page.rb +16 -0
- data/features/support/pages/indexed_sections_page.rb +16 -0
- data/features/support/pages/media_test_page.rb +195 -0
- data/features/support/sections/header_nav.rb +28 -0
- data/features/support/world_data.rb +12 -0
- data/features/support/world_pages.rb +18 -0
- data/lib/testcentricity_web/data_objects/environment.rb +16 -0
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/page_object.rb +8 -8
- data/lib/testcentricity_web/web_core/page_objects_helper.rb +41 -8
- data/lib/testcentricity_web/web_core/page_section.rb +1 -16
- data/lib/testcentricity_web/web_core/webdriver_helper.rb +77 -120
- data/lib/testcentricity_web/web_elements/checkbox.rb +3 -4
- data/lib/testcentricity_web/web_elements/media.rb +50 -4
- data/lib/testcentricity_web/web_elements/radio.rb +5 -1
- data/lib/testcentricity_web/web_elements/select_list.rb +18 -7
- data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +13 -0
- data/reports/.keep +1 -0
- data/test_site/basic_test_page.html +290 -0
- data/test_site/custom_controls_page.html +58 -0
- data/test_site/images/Granny.jpg +0 -0
- data/test_site/images/Wilder.jpg +0 -0
- data/test_site/images/You_Betcha.jpg +0 -0
- data/test_site/indexed_sections_page.html +58 -0
- data/test_site/media/MIB2-subtitles-pt-BR.vtt +49 -0
- data/test_site/media/MIB2.mp4 +0 -0
- data/test_site/media/MP4_small.mp4 +0 -0
- data/test_site/media/MPS_sample.mp3 +0 -0
- data/test_site/media_page.html +86 -0
- data/testcentricity_web.gemspec +5 -0
- metadata +125 -4
- data/test_site/test_page.html +0 -11
@@ -49,7 +49,7 @@ module TestCentricity
|
|
49
49
|
context = case browser.downcase.to_sym
|
50
50
|
when :appium
|
51
51
|
initialize_appium
|
52
|
-
'
|
52
|
+
'Appium'
|
53
53
|
when :browserstack
|
54
54
|
initialize_browserstack
|
55
55
|
'Browserstack cloud service'
|
@@ -138,7 +138,6 @@ module TestCentricity
|
|
138
138
|
Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
139
139
|
Capybara.default_driver = :appium
|
140
140
|
Environ.driver = :appium
|
141
|
-
@endpoint = 'http://localhost:4723/wd/hub' if @endpoint.nil?
|
142
141
|
desired_capabilities = {
|
143
142
|
platformName: Environ.device_os,
|
144
143
|
platformVersion: Environ.device_os_version,
|
@@ -190,14 +189,13 @@ module TestCentricity
|
|
190
189
|
desired_capabilities[:systemPort] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
|
191
190
|
end
|
192
191
|
|
193
|
-
unless @capabilities.nil?
|
194
|
-
|
195
|
-
|
192
|
+
desired_capabilities = @capabilities unless @capabilities.nil?
|
193
|
+
# specify endpoint url
|
194
|
+
@endpoint = 'http://localhost:4723/wd/hub' if @endpoint.nil?
|
196
195
|
|
197
|
-
Capybara.register_driver
|
198
|
-
appium_lib_options = { server_url: @endpoint }
|
196
|
+
Capybara.register_driver(:appium) do |app|
|
199
197
|
all_options = {
|
200
|
-
appium_lib:
|
198
|
+
appium_lib: { server_url: @endpoint },
|
201
199
|
caps: desired_capabilities
|
202
200
|
}
|
203
201
|
Appium::Capybara::Driver.new(app, all_options)
|
@@ -233,63 +231,18 @@ module TestCentricity
|
|
233
231
|
when :safari, :ie
|
234
232
|
Capybara::Selenium::Driver.new(app, browser: browser)
|
235
233
|
when :firefox, :firefox_headless
|
236
|
-
|
237
|
-
profile['browser.download.dir'] = @downloads_path
|
238
|
-
profile['browser.download.folderList'] = 2
|
239
|
-
profile['browser.download.manager.showWhenStarting'] = false
|
240
|
-
profile['browser.download.manager.closeWhenDone'] = true
|
241
|
-
profile['browser.download.manager.showAlertOnComplete'] = false
|
242
|
-
profile['browser.download.manager.alertOnEXEOpen'] = false
|
243
|
-
profile['browser.download.manager.useWindow'] = false
|
244
|
-
profile['browser.helperApps.alwaysAsk.force'] = false
|
245
|
-
profile['pdfjs.disabled'] = true
|
246
|
-
|
247
|
-
mime_types = ENV['MIME_TYPES'] || 'images/jpeg, application/pdf, application/octet-stream'
|
248
|
-
profile['browser.helperApps.neverAsk.saveToDisk'] = mime_types
|
249
|
-
|
250
|
-
profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
|
251
|
-
options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
|
252
|
-
options.args << '--headless' if browser == :firefox_headless
|
234
|
+
options = firefox_options(browser)
|
253
235
|
Capybara::Selenium::Driver.new(app, browser: :firefox, capabilities: [options])
|
254
236
|
when :chrome, :chrome_headless
|
255
|
-
options =
|
256
|
-
prefs = {
|
257
|
-
prompt_for_download: false,
|
258
|
-
directory_upgrade: true,
|
259
|
-
default_directory: @downloads_path
|
260
|
-
}
|
261
|
-
options.add_preference(:download, prefs)
|
262
|
-
options.add_argument('--disable-dev-shm-usage')
|
263
|
-
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
264
|
-
if browser == :chrome_headless
|
265
|
-
options.add_argument('--headless')
|
266
|
-
options.add_argument('--disable-gpu')
|
267
|
-
options.add_argument('--no-sandbox')
|
268
|
-
end
|
269
|
-
|
237
|
+
options = chrome_edge_options(browser)
|
270
238
|
Capybara::Selenium::Driver.new(app, browser: :chrome, capabilities: [options])
|
271
239
|
when :edge, :edge_headless
|
272
|
-
options =
|
273
|
-
prefs = {
|
274
|
-
prompt_for_download: false,
|
275
|
-
directory_upgrade: true,
|
276
|
-
default_directory: @downloads_path
|
277
|
-
}
|
278
|
-
options.add_preference(:download, prefs)
|
279
|
-
options.add_argument('--disable-dev-shm-usage')
|
280
|
-
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
281
|
-
if browser == :edge_headless
|
282
|
-
options.add_argument('--headless')
|
283
|
-
options.add_argument('--disable-gpu')
|
284
|
-
options.add_argument('--no-sandbox')
|
285
|
-
end
|
286
|
-
|
240
|
+
options = chrome_edge_options(browser)
|
287
241
|
Capybara::Selenium::Driver.new(app, browser: :edge, capabilities: [options])
|
288
242
|
else
|
289
243
|
if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
|
290
244
|
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
291
245
|
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
292
|
-
options.add_argument('--disable-infobars')
|
293
246
|
options.add_argument('--disable-dev-shm-usage')
|
294
247
|
options.add_argument("--user-agent='#{user_agent}'")
|
295
248
|
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
@@ -452,74 +405,31 @@ module TestCentricity
|
|
452
405
|
Environ.grid = :selenium_grid
|
453
406
|
browser = ENV['WEB_BROWSER'].downcase.to_sym
|
454
407
|
@endpoint = ENV['REMOTE_ENDPOINT'] || 'http://127.0.0.1:4444/wd/hub' if @endpoint.nil?
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
profile['browser.helperApps.alwaysAsk.force'] = false
|
471
|
-
profile['pdfjs.disabled'] = true
|
472
|
-
|
473
|
-
mime_types = ENV['MIME_TYPES'] || 'images/jpeg, application/pdf, application/octet-stream'
|
474
|
-
profile['browser.helperApps.neverAsk.saveToDisk'] = mime_types
|
475
|
-
|
476
|
-
profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
|
477
|
-
options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
|
478
|
-
options.args << '--headless' if browser == :firefox_headless
|
479
|
-
when :chrome, :chrome_headless
|
408
|
+
|
409
|
+
case browser
|
410
|
+
when :safari
|
411
|
+
options = Selenium::WebDriver::Safari::Options.new
|
412
|
+
when :ie
|
413
|
+
options = Selenium::WebDriver::IE::Options.new
|
414
|
+
when :firefox, :firefox_headless
|
415
|
+
options = firefox_options(browser)
|
416
|
+
when :chrome, :chrome_headless, :edge, :edge_headless
|
417
|
+
options = chrome_edge_options(browser)
|
418
|
+
else
|
419
|
+
if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
|
420
|
+
Environ.platform = :mobile
|
421
|
+
Environ.device_name = Browsers.mobile_device_name(ENV['WEB_BROWSER'])
|
422
|
+
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
480
423
|
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
481
|
-
prefs = {
|
482
|
-
prompt_for_download: false,
|
483
|
-
directory_upgrade: true,
|
484
|
-
default_directory: @downloads_path
|
485
|
-
}
|
486
|
-
options.add_preference(:download, prefs)
|
487
|
-
options.add_argument('--disable-dev-shm-usage')
|
488
|
-
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
489
|
-
if browser == :chrome_headless
|
490
|
-
options.add_argument('--headless')
|
491
|
-
options.add_argument('--disable-gpu')
|
492
|
-
options.add_argument('--no-sandbox')
|
493
|
-
end
|
494
|
-
when :edge, :edge_headless
|
495
|
-
options = Selenium::WebDriver::Edge::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
496
|
-
prefs = {
|
497
|
-
prompt_for_download: false,
|
498
|
-
directory_upgrade: true,
|
499
|
-
default_directory: @downloads_path
|
500
|
-
}
|
501
|
-
options.add_preference(:download, prefs)
|
502
424
|
options.add_argument('--disable-dev-shm-usage')
|
425
|
+
options.add_argument("--user-agent='#{user_agent}'")
|
503
426
|
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
504
|
-
if browser == :edge_headless
|
505
|
-
options.add_argument('--headless')
|
506
|
-
options.add_argument('--disable-gpu')
|
507
|
-
options.add_argument('--no-sandbox')
|
508
|
-
end
|
509
427
|
else
|
510
|
-
|
511
|
-
Environ.platform = :mobile
|
512
|
-
Environ.device_name = Browsers.mobile_device_name(ENV['WEB_BROWSER'])
|
513
|
-
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
514
|
-
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
515
|
-
options.add_argument('--disable-infobars')
|
516
|
-
options.add_argument('--disable-dev-shm-usage')
|
517
|
-
options.add_argument("--user-agent='#{user_agent}'")
|
518
|
-
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
519
|
-
else
|
520
|
-
raise "Requested browser '#{browser}' is not supported on Selenium Grid"
|
521
|
-
end
|
428
|
+
raise "Requested browser '#{browser}' is not supported on Selenium Grid"
|
522
429
|
end
|
430
|
+
end
|
431
|
+
|
432
|
+
Capybara.register_driver :remote_browser do |app|
|
523
433
|
Capybara::Selenium::Driver.new(app,
|
524
434
|
browser: :remote,
|
525
435
|
url: @endpoint,
|
@@ -645,6 +555,50 @@ module TestCentricity
|
|
645
555
|
config_file_uploads unless ENV['TB_PLATFORM']
|
646
556
|
end
|
647
557
|
|
558
|
+
def self.chrome_edge_options(browser)
|
559
|
+
options = case browser
|
560
|
+
when :chrome, :chrome_headless
|
561
|
+
Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
562
|
+
when :edge, :edge_headless
|
563
|
+
Selenium::WebDriver::Edge::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
564
|
+
end
|
565
|
+
prefs = {
|
566
|
+
prompt_for_download: false,
|
567
|
+
directory_upgrade: true,
|
568
|
+
default_directory: @downloads_path
|
569
|
+
}
|
570
|
+
options.add_preference(:download, prefs)
|
571
|
+
options.add_argument('--disable-dev-shm-usage')
|
572
|
+
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
573
|
+
if browser == :chrome_headless || browser == :edge_headless
|
574
|
+
options.add_argument('--headless')
|
575
|
+
options.add_argument('--disable-gpu')
|
576
|
+
options.add_argument('--no-sandbox')
|
577
|
+
end
|
578
|
+
options
|
579
|
+
end
|
580
|
+
|
581
|
+
def self.firefox_options(browser)
|
582
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
583
|
+
profile['browser.download.dir'] = @downloads_path
|
584
|
+
profile['browser.download.folderList'] = 2
|
585
|
+
profile['browser.download.manager.showWhenStarting'] = false
|
586
|
+
profile['browser.download.manager.closeWhenDone'] = true
|
587
|
+
profile['browser.download.manager.showAlertOnComplete'] = false
|
588
|
+
profile['browser.download.manager.alertOnEXEOpen'] = false
|
589
|
+
profile['browser.download.manager.useWindow'] = false
|
590
|
+
profile['browser.helperApps.alwaysAsk.force'] = false
|
591
|
+
profile['pdfjs.disabled'] = true
|
592
|
+
|
593
|
+
mime_types = ENV['MIME_TYPES'] || 'images/jpeg, application/pdf, application/octet-stream'
|
594
|
+
profile['browser.helperApps.neverAsk.saveToDisk'] = mime_types
|
595
|
+
|
596
|
+
profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
|
597
|
+
options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
|
598
|
+
options.args << '--headless' if browser == :firefox_headless
|
599
|
+
options
|
600
|
+
end
|
601
|
+
|
648
602
|
def self.test_context_message
|
649
603
|
context_message = if ENV['TEST_CONTEXT']
|
650
604
|
"#{Environ.test_environment.to_s.upcase} - #{ENV['TEST_CONTEXT']}"
|
@@ -662,7 +616,10 @@ module TestCentricity
|
|
662
616
|
def self.register_remote_driver(driver, browser, options)
|
663
617
|
Capybara.register_driver driver do |app|
|
664
618
|
capabilities = Selenium::WebDriver::Remote::Capabilities.send(browser.gsub(/\s+/, '_').downcase.to_sym, options)
|
665
|
-
Capybara::Selenium::Driver.new(app,
|
619
|
+
Capybara::Selenium::Driver.new(app,
|
620
|
+
browser: :remote,
|
621
|
+
url: @endpoint,
|
622
|
+
capabilities: capabilities)
|
666
623
|
end
|
667
624
|
|
668
625
|
Environ.browser = browser
|
@@ -112,11 +112,10 @@ module TestCentricity
|
|
112
112
|
object_not_found_exception(obj, 'Checkbox')
|
113
113
|
invalid_object_type_exception(obj, 'checkbox')
|
114
114
|
if @proxy.nil?
|
115
|
-
|
116
|
-
expected = state.to_bool
|
117
|
-
obj.click unless expected == obj.checked?
|
118
|
-
else
|
115
|
+
begin
|
119
116
|
obj.set(state)
|
117
|
+
rescue
|
118
|
+
obj.click unless state == obj.checked?
|
120
119
|
end
|
121
120
|
else
|
122
121
|
page.find(:css, @proxy).click unless state == obj.checked?
|
@@ -125,7 +125,7 @@ module TestCentricity
|
|
125
125
|
def current_time
|
126
126
|
obj, = find_element(visible = :all)
|
127
127
|
object_not_found_exception(obj, @type)
|
128
|
-
obj.native.attribute('currentTime').to_f
|
128
|
+
obj.native.attribute('currentTime').to_f.round(2)
|
129
129
|
end
|
130
130
|
|
131
131
|
# Return media defaultPlaybackRate property
|
@@ -137,7 +137,7 @@ module TestCentricity
|
|
137
137
|
def default_playback_rate
|
138
138
|
obj, = find_element(visible = :all)
|
139
139
|
object_not_found_exception(obj, @type)
|
140
|
-
obj.native.attribute('defaultPlaybackRate')
|
140
|
+
obj.native.attribute('defaultPlaybackRate').to_f
|
141
141
|
end
|
142
142
|
|
143
143
|
# Return media duration property
|
@@ -149,7 +149,7 @@ module TestCentricity
|
|
149
149
|
def duration
|
150
150
|
obj, = find_element(visible = :all)
|
151
151
|
object_not_found_exception(obj, @type)
|
152
|
-
obj.native.attribute('duration').to_f
|
152
|
+
obj.native.attribute('duration').to_f.round(2)
|
153
153
|
end
|
154
154
|
|
155
155
|
# Return media playbackRate property
|
@@ -161,7 +161,7 @@ module TestCentricity
|
|
161
161
|
def playback_rate
|
162
162
|
obj, = find_element(visible = :all)
|
163
163
|
object_not_found_exception(obj, @type)
|
164
|
-
obj.native.attribute('playbackRate')
|
164
|
+
obj.native.attribute('playbackRate').to_f
|
165
165
|
end
|
166
166
|
|
167
167
|
# Return media readyState property
|
@@ -247,6 +247,52 @@ module TestCentricity
|
|
247
247
|
page.execute_script('arguments[0].pause()', obj)
|
248
248
|
end
|
249
249
|
|
250
|
+
# Mute the media's audio
|
251
|
+
#
|
252
|
+
# @example
|
253
|
+
# media_player.mute
|
254
|
+
#
|
255
|
+
def mute
|
256
|
+
obj, = find_element(visible = :all)
|
257
|
+
object_not_found_exception(obj, @type)
|
258
|
+
page.execute_script('arguments[0].muted = true;', obj)
|
259
|
+
end
|
260
|
+
|
261
|
+
# Unmute the media's audio
|
262
|
+
#
|
263
|
+
# @example
|
264
|
+
# media_player.unmute
|
265
|
+
#
|
266
|
+
def unmute
|
267
|
+
obj, = find_element(visible = :all)
|
268
|
+
object_not_found_exception(obj, @type)
|
269
|
+
page.execute_script('arguments[0].muted = false;', obj)
|
270
|
+
end
|
271
|
+
|
272
|
+
# Set the media playbackRate property
|
273
|
+
#
|
274
|
+
# @param value [Float]
|
275
|
+
# @example
|
276
|
+
# media_player.playback_rate = 1.5
|
277
|
+
#
|
278
|
+
def playback_rate=(value)
|
279
|
+
obj, = find_element(visible = :all)
|
280
|
+
object_not_found_exception(obj, @type)
|
281
|
+
page.execute_script('arguments[0].playbackRate = arguments[1]', obj, value)
|
282
|
+
end
|
283
|
+
|
284
|
+
# Set the media volume property
|
285
|
+
#
|
286
|
+
# @param value [Float] between 0 and 1
|
287
|
+
# @example
|
288
|
+
# media_player.volume = 0.5
|
289
|
+
#
|
290
|
+
def volume=(value)
|
291
|
+
obj, = find_element(visible = :all)
|
292
|
+
object_not_found_exception(obj, @type)
|
293
|
+
page.execute_script('arguments[0].volume = arguments[1]', obj, value)
|
294
|
+
end
|
295
|
+
|
250
296
|
# Return media crossorigin property
|
251
297
|
#
|
252
298
|
# @return crossorigin value
|
@@ -101,7 +101,11 @@ module TestCentricity
|
|
101
101
|
object_not_found_exception(obj, 'Radio')
|
102
102
|
invalid_object_type_exception(obj, 'radio')
|
103
103
|
if @proxy.nil?
|
104
|
-
|
104
|
+
begin
|
105
|
+
obj.set(state)
|
106
|
+
rescue
|
107
|
+
obj.click unless state == obj.checked?
|
108
|
+
end
|
105
109
|
else
|
106
110
|
page.find(:css, @proxy).click unless state == obj.checked?
|
107
111
|
end
|
@@ -246,13 +246,24 @@ module TestCentricity
|
|
246
246
|
def get_selected_option
|
247
247
|
@base_object, = find_element
|
248
248
|
object_not_found_exception(@base_object, nil)
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
249
|
+
trigger_list unless @options_list.nil?
|
250
|
+
selection = if @base_object.first(:css, @list_item, minimum: 0, wait: 1, visible: :all)
|
251
|
+
@base_object.first(:css, @selected_item, wait: 1, visible: :all).text
|
252
|
+
elsif @base_object.first(:css, @selected_item, minimum: 0, wait: 1, visible: :all)
|
253
|
+
@base_object.first(:css, @selected_item, visible: :all).text
|
254
|
+
elsif @base_object.first('option[selected]', minimum: 0, wait: 1, visible: :all)
|
255
|
+
@base_object.first('option[selected]', wait: 1, visible: :all).text
|
256
|
+
else
|
257
|
+
index = get_attribute(:selectedIndex).to_i
|
258
|
+
if index >= 0
|
259
|
+
options = get_options
|
260
|
+
options[index]
|
261
|
+
else
|
262
|
+
''
|
263
|
+
end
|
264
|
+
end
|
265
|
+
trigger_list unless @options_list.nil?
|
266
|
+
selection
|
256
267
|
end
|
257
268
|
|
258
269
|
alias selected? get_selected_option
|
@@ -264,6 +264,19 @@ module TestCentricity
|
|
264
264
|
obj.disabled?
|
265
265
|
end
|
266
266
|
|
267
|
+
# Is UI object's required attribute set?
|
268
|
+
#
|
269
|
+
# @return [Boolean]
|
270
|
+
# @example
|
271
|
+
# first_name_field.required?
|
272
|
+
#
|
273
|
+
def required?
|
274
|
+
obj, type = find_element
|
275
|
+
object_not_found_exception(obj, type)
|
276
|
+
state = get_attribute(:required)
|
277
|
+
state.boolean? ? state : state == 'true'
|
278
|
+
end
|
279
|
+
|
267
280
|
# Is UI object obscured (not currently in viewport and not clickable)?
|
268
281
|
#
|
269
282
|
# @return [Boolean]
|
data/reports/.keep
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Placeholder file to allow the reports folder to be saved to repository. This folder is required for Jenkins test jobs using the Cucumber Reporting plug-in.
|