testcentricity_web 4.1.3 → 4.1.6
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 +30 -1
- data/Gemfile.lock +170 -0
- data/README.md +287 -102
- data/Rakefile +37 -1
- data/config/cucumber.yml +150 -0
- data/docker-compose-v3.yml +48 -0
- data/features/basic_test_page_css.feature +24 -0
- data/features/basic_test_page_xpath.feature +24 -0
- data/features/step_definitions/generic_steps.rb.rb +37 -0
- data/features/support/env.rb +43 -0
- data/features/support/hooks.rb +245 -0
- data/features/support/pages/basic_css_test_page.rb +49 -0
- data/features/support/pages/basic_test_page.rb +238 -0
- data/features/support/pages/basic_xpath_test_page.rb +49 -0
- data/features/support/pages/media_page.rb +11 -0
- data/features/support/world_pages.rb +15 -0
- data/lib/testcentricity_web/data_objects/environment.rb +4 -0
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/page_object.rb +13 -6
- 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 +78 -120
- 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 +240 -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/media/MP4_small.mp4 +0 -0
- data/test_site/media/MPS_sample.mp3 +0 -0
- data/test_site/media_page.html +33 -0
- data/testcentricity_web.gemspec +5 -0
- metadata +105 -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'
|
@@ -137,7 +137,7 @@ module TestCentricity
|
|
137
137
|
Environ.device_os_version = ENV['APP_VERSION']
|
138
138
|
Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
139
139
|
Capybara.default_driver = :appium
|
140
|
-
|
140
|
+
Environ.driver = :appium
|
141
141
|
desired_capabilities = {
|
142
142
|
platformName: Environ.device_os,
|
143
143
|
platformVersion: Environ.device_os_version,
|
@@ -189,14 +189,13 @@ module TestCentricity
|
|
189
189
|
desired_capabilities[:systemPort] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
|
190
190
|
end
|
191
191
|
|
192
|
-
unless @capabilities.nil?
|
193
|
-
|
194
|
-
|
192
|
+
desired_capabilities = @capabilities unless @capabilities.nil?
|
193
|
+
# specify endpoint url
|
194
|
+
@endpoint = 'http://localhost:4723/wd/hub' if @endpoint.nil?
|
195
195
|
|
196
|
-
Capybara.register_driver
|
197
|
-
appium_lib_options = { server_url: @endpoint }
|
196
|
+
Capybara.register_driver(:appium) do |app|
|
198
197
|
all_options = {
|
199
|
-
appium_lib:
|
198
|
+
appium_lib: { server_url: @endpoint },
|
200
199
|
caps: desired_capabilities
|
201
200
|
}
|
202
201
|
Appium::Capybara::Driver.new(app, all_options)
|
@@ -232,63 +231,18 @@ module TestCentricity
|
|
232
231
|
when :safari, :ie
|
233
232
|
Capybara::Selenium::Driver.new(app, browser: browser)
|
234
233
|
when :firefox, :firefox_headless
|
235
|
-
|
236
|
-
profile['browser.download.dir'] = @downloads_path
|
237
|
-
profile['browser.download.folderList'] = 2
|
238
|
-
profile['browser.download.manager.showWhenStarting'] = false
|
239
|
-
profile['browser.download.manager.closeWhenDone'] = true
|
240
|
-
profile['browser.download.manager.showAlertOnComplete'] = false
|
241
|
-
profile['browser.download.manager.alertOnEXEOpen'] = false
|
242
|
-
profile['browser.download.manager.useWindow'] = false
|
243
|
-
profile['browser.helperApps.alwaysAsk.force'] = false
|
244
|
-
profile['pdfjs.disabled'] = true
|
245
|
-
|
246
|
-
mime_types = ENV['MIME_TYPES'] || 'images/jpeg, application/pdf, application/octet-stream'
|
247
|
-
profile['browser.helperApps.neverAsk.saveToDisk'] = mime_types
|
248
|
-
|
249
|
-
profile['intl.accept_languages'] = ENV['LOCALE'] if ENV['LOCALE']
|
250
|
-
options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
|
251
|
-
options.args << '--headless' if browser == :firefox_headless
|
234
|
+
options = firefox_options(browser)
|
252
235
|
Capybara::Selenium::Driver.new(app, browser: :firefox, capabilities: [options])
|
253
236
|
when :chrome, :chrome_headless
|
254
|
-
options =
|
255
|
-
prefs = {
|
256
|
-
prompt_for_download: false,
|
257
|
-
directory_upgrade: true,
|
258
|
-
default_directory: @downloads_path
|
259
|
-
}
|
260
|
-
options.add_preference(:download, prefs)
|
261
|
-
options.add_argument('--disable-dev-shm-usage')
|
262
|
-
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
263
|
-
if browser == :chrome_headless
|
264
|
-
options.add_argument('--headless')
|
265
|
-
options.add_argument('--disable-gpu')
|
266
|
-
options.add_argument('--no-sandbox')
|
267
|
-
end
|
268
|
-
|
237
|
+
options = chrome_edge_options(browser)
|
269
238
|
Capybara::Selenium::Driver.new(app, browser: :chrome, capabilities: [options])
|
270
239
|
when :edge, :edge_headless
|
271
|
-
options =
|
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
|
-
|
240
|
+
options = chrome_edge_options(browser)
|
286
241
|
Capybara::Selenium::Driver.new(app, browser: :edge, capabilities: [options])
|
287
242
|
else
|
288
243
|
if ENV['HOST_BROWSER'] && ENV['HOST_BROWSER'].downcase.to_sym == :chrome
|
289
244
|
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
290
245
|
options = Selenium::WebDriver::Chrome::Options.new(options: {'excludeSwitches' => ['enable-automation']})
|
291
|
-
options.add_argument('--disable-infobars')
|
292
246
|
options.add_argument('--disable-dev-shm-usage')
|
293
247
|
options.add_argument("--user-agent='#{user_agent}'")
|
294
248
|
options.add_argument("--lang=#{ENV['LOCALE']}") if ENV['LOCALE']
|
@@ -451,74 +405,31 @@ module TestCentricity
|
|
451
405
|
Environ.grid = :selenium_grid
|
452
406
|
browser = ENV['WEB_BROWSER'].downcase.to_sym
|
453
407
|
@endpoint = ENV['REMOTE_ENDPOINT'] || 'http://127.0.0.1:4444/wd/hub' if @endpoint.nil?
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
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
|
478
|
-
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'])
|
479
423
|
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']
|
488
|
-
if browser == :chrome_headless
|
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
424
|
options.add_argument('--disable-dev-shm-usage')
|
425
|
+
options.add_argument("--user-agent='#{user_agent}'")
|
502
426
|
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')
|
507
|
-
end
|
508
427
|
else
|
509
|
-
|
510
|
-
Environ.platform = :mobile
|
511
|
-
Environ.device_name = Browsers.mobile_device_name(ENV['WEB_BROWSER'])
|
512
|
-
user_agent = Browsers.mobile_device_agent(ENV['WEB_BROWSER'])
|
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']
|
518
|
-
else
|
519
|
-
raise "Requested browser '#{browser}' is not supported on Selenium Grid"
|
520
|
-
end
|
428
|
+
raise "Requested browser '#{browser}' is not supported on Selenium Grid"
|
521
429
|
end
|
430
|
+
end
|
431
|
+
|
432
|
+
Capybara.register_driver :remote_browser do |app|
|
522
433
|
Capybara::Selenium::Driver.new(app,
|
523
434
|
browser: :remote,
|
524
435
|
url: @endpoint,
|
@@ -644,6 +555,50 @@ module TestCentricity
|
|
644
555
|
config_file_uploads unless ENV['TB_PLATFORM']
|
645
556
|
end
|
646
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
|
+
|
647
602
|
def self.test_context_message
|
648
603
|
context_message = if ENV['TEST_CONTEXT']
|
649
604
|
"#{Environ.test_environment.to_s.upcase} - #{ENV['TEST_CONTEXT']}"
|
@@ -661,7 +616,10 @@ module TestCentricity
|
|
661
616
|
def self.register_remote_driver(driver, browser, options)
|
662
617
|
Capybara.register_driver driver do |app|
|
663
618
|
capabilities = Selenium::WebDriver::Remote::Capabilities.send(browser.gsub(/\s+/, '_').downcase.to_sym, options)
|
664
|
-
Capybara::Selenium::Driver.new(app,
|
619
|
+
Capybara::Selenium::Driver.new(app,
|
620
|
+
browser: :remote,
|
621
|
+
url: @endpoint,
|
622
|
+
capabilities: capabilities)
|
665
623
|
end
|
666
624
|
|
667
625
|
Environ.browser = browser
|
@@ -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.
|
@@ -0,0 +1,240 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<title>Basic HTML Form</title>
|
6
|
+
<style>
|
7
|
+
table {
|
8
|
+
font-family: arial, sans-serif;
|
9
|
+
font-size: 15px;
|
10
|
+
border-collapse: collapse;
|
11
|
+
width: 85%;
|
12
|
+
}
|
13
|
+
td, th {
|
14
|
+
border: 1px solid #dddddd;
|
15
|
+
text-align: left;
|
16
|
+
padding: 8px;
|
17
|
+
}
|
18
|
+
</style>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<div class="page-body">
|
22
|
+
<h1>Basic HTML Form Example</h1>
|
23
|
+
<div class="centered">
|
24
|
+
<form name="HTMLFormElements" id="HTMLFormElements">
|
25
|
+
<table border="1" cellpadding="5">
|
26
|
+
<tr>
|
27
|
+
<td>
|
28
|
+
<table>
|
29
|
+
<label id="inputs">Inputs:</label>
|
30
|
+
<tbody>
|
31
|
+
<tr>
|
32
|
+
<td>
|
33
|
+
<label for="username">Username:</label>
|
34
|
+
<input type="text" id="username" name="username" placeholder="User name" required>
|
35
|
+
</td>
|
36
|
+
<td>
|
37
|
+
<label for="password">Password:</label>
|
38
|
+
<input type="password" id="password" name="password" placeholder="Password" required>
|
39
|
+
</td>
|
40
|
+
<td>
|
41
|
+
<label for="maxlength">Max Length:</label>
|
42
|
+
<input type="text" id="maxlength" name="maxlength" placeholder="up to 64 characters" maxlength="64">
|
43
|
+
</td>
|
44
|
+
</tr>
|
45
|
+
<tr>
|
46
|
+
<td>
|
47
|
+
<label for="readonly">Read Only:</label>
|
48
|
+
<input type="text" id="readonly" name="readonly" value="I am a read only text field" readonly>
|
49
|
+
</td>
|
50
|
+
<td>
|
51
|
+
<label for="number-field">Number:</label>
|
52
|
+
<input id="number-field" type="number" name="number" min="10" max="1024" step="1" value="41">
|
53
|
+
</td>
|
54
|
+
<td>
|
55
|
+
<label for="color-picker">Color: </label>
|
56
|
+
<input id="color-picker" type="color" name="color">
|
57
|
+
</td>
|
58
|
+
</tr>
|
59
|
+
<tr>
|
60
|
+
<td>
|
61
|
+
<label for="slider">Range: </label>
|
62
|
+
<input id="slider" type="range" name="slider" min="0" max="50">
|
63
|
+
</td>
|
64
|
+
<td>
|
65
|
+
</td>
|
66
|
+
<td>
|
67
|
+
</td>
|
68
|
+
</tr>
|
69
|
+
</tbody>
|
70
|
+
</table>
|
71
|
+
</td>
|
72
|
+
</tr>
|
73
|
+
|
74
|
+
|
75
|
+
<tr>
|
76
|
+
<td>
|
77
|
+
<label for="comments">TextArea:</label>
|
78
|
+
<textarea id="comments" name="comments" cols="80" rows="3"></textarea>
|
79
|
+
</td>
|
80
|
+
</tr>
|
81
|
+
|
82
|
+
<tr>
|
83
|
+
<td>
|
84
|
+
<label for="filename">Filename:</label>
|
85
|
+
<input type="file" id="filename" name="filename" size="35">
|
86
|
+
</td>
|
87
|
+
</tr>
|
88
|
+
|
89
|
+
<tr>
|
90
|
+
<td>
|
91
|
+
<label id="checkboxes">Checkbox Items:</label>
|
92
|
+
<input type="checkbox" id="check1" name="checkboxes[]" value="cb1" />Checkbox 1
|
93
|
+
<input type="checkbox" id="check2" name="checkboxes[]" value="cb2" />Checkbox 2
|
94
|
+
<input type="checkbox" id="check3" name="checkboxes[]" value="cb3" />Checkbox 3
|
95
|
+
<input type="checkbox" id="check4" name="checkboxes[]" value="cb4" disabled/>Checkbox 4
|
96
|
+
</td>
|
97
|
+
</tr>
|
98
|
+
|
99
|
+
<tr>
|
100
|
+
<td>
|
101
|
+
<label id="radios">Radio Items:</label>
|
102
|
+
<input type="radio" id="radio1" name="radioval" value="rd1" />radio 1
|
103
|
+
<input type="radio" id="radio2" name="radioval" value="rd2" />radio 2
|
104
|
+
<input type="radio" id="radio3" name="radioval" value="rd3" />radio 3
|
105
|
+
<input type="radio" id="radio4" name="radioval" value="rd4" disabled/>radio 4
|
106
|
+
</td>
|
107
|
+
</tr>
|
108
|
+
|
109
|
+
<tr>
|
110
|
+
<td>
|
111
|
+
<label for="multipleselect">Multiple Select Values:</label>
|
112
|
+
<select multiple="multiple" id="multipleselect" name="multipleselect" size="4">
|
113
|
+
<option value="ms1">Selection Item 1</option>
|
114
|
+
<option value="ms2">Selection Item 2</option>
|
115
|
+
<option value="ms3">Selection Item 3</option>
|
116
|
+
<option value="ms4">Selection Item 4</option>
|
117
|
+
</select>
|
118
|
+
</td>
|
119
|
+
</tr>
|
120
|
+
|
121
|
+
<tr>
|
122
|
+
<td>
|
123
|
+
<label for="dropdown">Dropdown:</label>
|
124
|
+
<select id="dropdown" name="dropdown">
|
125
|
+
<option value="dd1">Drop Down Item 1</option>
|
126
|
+
<option value="dd2">Drop Down Item 2</option>
|
127
|
+
<option value="dd3">Drop Down Item 3</option>
|
128
|
+
<option value="dd4">Drop Down Item 4</option>
|
129
|
+
<option value="dd5">Drop Down Item 5</option>
|
130
|
+
<option value="dd6">Drop Down Item 6</option>
|
131
|
+
</select>
|
132
|
+
</td>
|
133
|
+
</tr>
|
134
|
+
|
135
|
+
<tr>
|
136
|
+
<td>
|
137
|
+
<label for="table">Table:</label>
|
138
|
+
<table id="table">
|
139
|
+
<thead>
|
140
|
+
<tr>
|
141
|
+
<th>Company</th>
|
142
|
+
<th>Contact</th>
|
143
|
+
<th>Country</th>
|
144
|
+
</tr>
|
145
|
+
</thead>
|
146
|
+
<tbody>
|
147
|
+
<tr>
|
148
|
+
<td>Alfreds Futterkiste</td>
|
149
|
+
<td>Maria Anders</td>
|
150
|
+
<td>Germany</td>
|
151
|
+
</tr>
|
152
|
+
<tr>
|
153
|
+
<td>Centro comercial Moctezuma</td>
|
154
|
+
<td>Francisco Chang</td>
|
155
|
+
<td>Mexico</td>
|
156
|
+
</tr>
|
157
|
+
<tr>
|
158
|
+
<td>Ernst Handel</td>
|
159
|
+
<td>Roland Mendel</td>
|
160
|
+
<td>Austria</td>
|
161
|
+
</tr>
|
162
|
+
<tr>
|
163
|
+
<td>Island Trading</td>
|
164
|
+
<td>Helen Bennett</td>
|
165
|
+
<td>UK</td>
|
166
|
+
</tr>
|
167
|
+
</tbody>
|
168
|
+
</table>
|
169
|
+
</td>
|
170
|
+
</tr>
|
171
|
+
|
172
|
+
<tr>
|
173
|
+
<td>
|
174
|
+
<table>
|
175
|
+
<label id="images">Images:</label>
|
176
|
+
<tbody>
|
177
|
+
<tr>
|
178
|
+
<td>
|
179
|
+
<img id="image1" src="images/Wilder.jpg" alt="It's alive" style="width:225px;height:225px;">
|
180
|
+
</td>
|
181
|
+
<td>
|
182
|
+
<img id="image2" src="images/You_Betcha.jpg" alt="You Betcha" style="width:225px;height:225px;">
|
183
|
+
</td>
|
184
|
+
<td>
|
185
|
+
<img id="image3" src="wrongname.gif" alt="A broken image" style="width:225px;height:225px;">
|
186
|
+
</td>
|
187
|
+
</tr>
|
188
|
+
</tbody>
|
189
|
+
</table>
|
190
|
+
</td>
|
191
|
+
</tr>
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
<!-- <tr>-->
|
196
|
+
<!-- <td>-->
|
197
|
+
<!-- <div class="form-label">-->
|
198
|
+
<!-- <label for="date-picker">Date: </label>-->
|
199
|
+
<!-- <input id="date-picker" type="date" name="date">-->
|
200
|
+
<!-- </div>-->
|
201
|
+
<!-- </td>-->
|
202
|
+
<!-- </tr>-->
|
203
|
+
<!-- <tr>-->
|
204
|
+
<!-- <td>-->
|
205
|
+
<!-- <div class="form-label">-->
|
206
|
+
<!-- <label for="date-time-picker">Local date time:</label>-->
|
207
|
+
<!-- <input id="date-time-picker" type="datetime-local" name="datetime" value="2018-01-01T01:01">-->
|
208
|
+
<!-- </div>-->
|
209
|
+
<!-- </td>-->
|
210
|
+
<!-- </tr>-->
|
211
|
+
<!-- <tr>-->
|
212
|
+
<!-- <td>-->
|
213
|
+
<!-- <div class="form-label">-->
|
214
|
+
<!-- <label for="email-field">Email: </label>-->
|
215
|
+
<!-- <input id="email-field" type="email" name="email" value="bob@mailinator.com">-->
|
216
|
+
<!-- </div>-->
|
217
|
+
<!-- </td>-->
|
218
|
+
<!-- </tr>-->
|
219
|
+
<!-- <tr>-->
|
220
|
+
<!-- <td>-->
|
221
|
+
<!-- <div class="form-label">-->
|
222
|
+
<!-- <label for="month-field">Month: </label>-->
|
223
|
+
<!-- <input id="month-field" type="month" name="month">-->
|
224
|
+
<!-- </div>-->
|
225
|
+
<!-- </td>-->
|
226
|
+
<!-- </tr>-->
|
227
|
+
|
228
|
+
|
229
|
+
<tr>
|
230
|
+
<td>
|
231
|
+
<input type="reset" id="cancel" name="cancel" value="Cancel" class="styled-click-button">
|
232
|
+
<input type="submit" id="submit" name="submit" value="Submit" class="styled-click-button">
|
233
|
+
</td>
|
234
|
+
</tr>
|
235
|
+
</table>
|
236
|
+
</form>
|
237
|
+
</div>
|
238
|
+
</div>
|
239
|
+
</body>
|
240
|
+
</html>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<title>Media Page</title>
|
6
|
+
<style>
|
7
|
+
table {
|
8
|
+
font-family: arial, sans-serif;
|
9
|
+
font-size: 15px;
|
10
|
+
border-collapse: collapse;
|
11
|
+
width: 85%;
|
12
|
+
}
|
13
|
+
td, th {
|
14
|
+
border: 1px solid #dddddd;
|
15
|
+
text-align: left;
|
16
|
+
padding: 8px;
|
17
|
+
}
|
18
|
+
</style>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<div class="media-page-body">
|
22
|
+
<h1>Media Page</h1>
|
23
|
+
<video id="video_player" width="400" controls>
|
24
|
+
<source src="media/MP4_small.mp4" type="video/mp4">
|
25
|
+
</video>
|
26
|
+
|
27
|
+
<audio id="audio_player" controls>
|
28
|
+
<source src="media/MPS_sample.mp3" type="audio/mp3">
|
29
|
+
</audio>
|
30
|
+
|
31
|
+
</div>
|
32
|
+
</body>
|
33
|
+
</html>
|
data/testcentricity_web.gemspec
CHANGED
@@ -29,6 +29,11 @@ Gem::Specification.new do |spec|
|
|
29
29
|
|
30
30
|
spec.add_development_dependency 'bundler'
|
31
31
|
spec.add_development_dependency 'rake'
|
32
|
+
spec.add_development_dependency 'cucumber'
|
33
|
+
spec.add_development_dependency 'appium_capybara'
|
34
|
+
spec.add_development_dependency 'parallel_tests'
|
35
|
+
spec.add_development_dependency 'require_all'
|
36
|
+
spec.add_development_dependency 'simplecov', ['~> 0.18']
|
32
37
|
|
33
38
|
spec.add_runtime_dependency 'appium_lib'
|
34
39
|
spec.add_runtime_dependency 'browserstack-local'
|