testcentricity_web 4.1.6 → 4.1.9

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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +2 -1
  4. data/.ruby-version +1 -0
  5. data/.simplecov +5 -1
  6. data/CHANGELOG.md +43 -0
  7. data/README.md +14 -13
  8. data/Rakefile +99 -21
  9. data/config/cucumber.yml +32 -11
  10. data/config/locales/en-US.yml +56 -0
  11. data/config/test_data/LOCAL_data.json +15 -0
  12. data/config/test_data/LOCAL_data.xls +0 -0
  13. data/config/test_data/LOCAL_data.yml +11 -0
  14. data/config/test_data/data.json +25 -0
  15. data/config/test_data/data.xls +0 -0
  16. data/config/test_data/data.yml +20 -0
  17. data/{docker-compose-v3.yml → docker-compose.yml} +2 -2
  18. data/features/basic_form_page_css.feature +54 -0
  19. data/features/basic_form_page_xpath.feature +26 -0
  20. data/features/custom_controls.feature +29 -0
  21. data/features/media_players.feature +67 -0
  22. data/features/step_definitions/generic_steps.rb.rb +87 -0
  23. data/features/step_definitions/media_steps.rb +30 -0
  24. data/features/support/data/form_data.rb +43 -0
  25. data/features/support/env.rb +18 -10
  26. data/features/support/hooks.rb +26 -1
  27. data/features/support/pages/base_test_page.rb +22 -0
  28. data/features/support/pages/{basic_css_test_page.rb → basic_css_form_page.rb} +12 -8
  29. data/features/support/pages/{basic_test_page.rb → basic_form_page.rb} +227 -36
  30. data/features/support/pages/{basic_xpath_test_page.rb → basic_xpath_form_page.rb} +12 -7
  31. data/features/support/pages/custom_controls_page.rb +263 -0
  32. data/features/support/pages/indexed_sections_page.rb +57 -0
  33. data/features/support/pages/media_test_page.rb +207 -0
  34. data/features/support/sections/header_nav.rb +48 -0
  35. data/features/support/sections/product_card.rb +39 -0
  36. data/features/support/world_data.rb +12 -0
  37. data/features/support/world_pages.rb +5 -2
  38. data/lib/testcentricity_web/appium_server.rb +5 -0
  39. data/lib/testcentricity_web/browser_helper.rb +0 -6
  40. data/lib/testcentricity_web/data_objects/data_objects_helper.rb +7 -0
  41. data/lib/testcentricity_web/data_objects/environment.rb +14 -0
  42. data/lib/testcentricity_web/data_objects/excel_helper.rb +60 -59
  43. data/lib/testcentricity_web/version.rb +1 -1
  44. data/lib/testcentricity_web/web_core/drag_drop_helper.rb +4 -0
  45. data/lib/testcentricity_web/web_core/page_object.rb +1 -8
  46. data/lib/testcentricity_web/web_core/page_objects_helper.rb +4 -2
  47. data/lib/testcentricity_web/web_core/page_section.rb +1 -1
  48. data/lib/testcentricity_web/web_core/webdriver_helper.rb +60 -44
  49. data/lib/testcentricity_web/web_elements/checkbox.rb +49 -19
  50. data/lib/testcentricity_web/web_elements/file_field.rb +9 -5
  51. data/lib/testcentricity_web/web_elements/image.rb +2 -1
  52. data/lib/testcentricity_web/web_elements/media.rb +46 -12
  53. data/lib/testcentricity_web/web_elements/radio.rb +51 -16
  54. data/lib/testcentricity_web/web_elements/select_list.rb +12 -12
  55. data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +22 -9
  56. data/lib/testcentricity_web/web_elements/video.rb +2 -2
  57. data/spec/fixtures/page_object.rb +22 -0
  58. data/spec/fixtures/section_object.rb +21 -0
  59. data/spec/spec_helper.rb +31 -0
  60. data/spec/testcentricity_web/browser_spec.rb +41 -0
  61. data/spec/testcentricity_web/elements/audio_spec.rb +68 -0
  62. data/spec/testcentricity_web/elements/button_spec.rb +18 -0
  63. data/spec/testcentricity_web/elements/checkbox_spec.rb +33 -0
  64. data/spec/testcentricity_web/elements/file_field_spec.rb +13 -0
  65. data/spec/testcentricity_web/elements/image_spec.rb +33 -0
  66. data/spec/testcentricity_web/elements/label_spec.rb +18 -0
  67. data/spec/testcentricity_web/elements/link_spec.rb +23 -0
  68. data/spec/testcentricity_web/elements/list_spec.rb +13 -0
  69. data/spec/testcentricity_web/elements/radio_spec.rb +28 -0
  70. data/spec/testcentricity_web/elements/ui_element_spec.rb +125 -0
  71. data/spec/testcentricity_web/elements/video_spec.rb +68 -0
  72. data/spec/testcentricity_web/helper_specs/object_helpers_spec.rb +39 -0
  73. data/spec/testcentricity_web/helper_specs/string_helpers_spec.rb +49 -0
  74. data/spec/testcentricity_web/page_object_spec.rb +90 -0
  75. data/spec/testcentricity_web/section_object_spec.rb +72 -0
  76. data/spec/testcentricity_web/version_spec.rb +7 -0
  77. data/spec/testcentricity_web/webdriver_connect/grid_webdriver_spec.rb +72 -0
  78. data/spec/testcentricity_web/webdriver_connect/local_webdriver_spec.rb +86 -0
  79. data/spec/testcentricity_web/webdriver_connect/mobile_webdriver_spec.rb +65 -0
  80. data/test_site/basic_test_page.html +51 -1
  81. data/test_site/chosen-sprite.png +0 -0
  82. data/test_site/chosen-sprite@2x.png +0 -0
  83. data/test_site/chosen.css +496 -0
  84. data/test_site/chosen.jquery.js +1359 -0
  85. data/test_site/chosen.jquery.min.js +3 -0
  86. data/test_site/chosen.min.css +11 -0
  87. data/test_site/chosen.proto.js +1399 -0
  88. data/test_site/chosen.proto.min.js +3 -0
  89. data/test_site/composer.json +36 -0
  90. data/test_site/custom_controls_page.html +629 -0
  91. data/test_site/docsupport/chosen.png +0 -0
  92. data/test_site/docsupport/init.js +11 -0
  93. data/test_site/docsupport/init.proto.js +16 -0
  94. data/test_site/docsupport/jquery-1.12.4.min.js +5 -0
  95. data/test_site/docsupport/jquery-3.2.1.min.js +4 -0
  96. data/test_site/docsupport/oss-credit.png +0 -0
  97. data/test_site/docsupport/prism.css +108 -0
  98. data/test_site/docsupport/prism.js +9 -0
  99. data/test_site/docsupport/prototype-1.7.0.0.js +6082 -0
  100. data/test_site/docsupport/style.css +219 -0
  101. data/test_site/images/Blouse_Black.jpg +0 -0
  102. data/test_site/images/Printed_Dress.jpg +0 -0
  103. data/test_site/images/T-shirt.jpg +0 -0
  104. data/test_site/images/jeans3.jpg +0 -0
  105. data/test_site/indexed_sections_page.html +215 -0
  106. data/test_site/media/MIB2-subtitles-pt-BR.vtt +49 -0
  107. data/test_site/media/MIB2.mp4 +0 -0
  108. data/test_site/media/bbc_scotland_report.mp3 +0 -0
  109. data/test_site/media/count_and_bars.mp4 +0 -0
  110. data/test_site/media_page.html +60 -7
  111. data/testcentricity_web.gemspec +14 -8
  112. metadata +197 -25
  113. data/Gemfile.lock +0 -170
  114. data/features/basic_test_page_css.feature +0 -24
  115. data/features/basic_test_page_xpath.feature +0 -24
  116. data/features/support/pages/media_page.rb +0 -11
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe TestCentricity::Video, required: true do
4
+ subject(:css_video) { described_class.new(:test_video, self, 'video#css_video', :page) }
5
+
6
+ it 'returns class' do
7
+ expect(css_video.class).to eql TestCentricity::Video
8
+ end
9
+
10
+ it 'registers with type video' do
11
+ expect(css_video.get_object_type).to eql :video
12
+ end
13
+
14
+ it 'returns autoplay' do
15
+ allow(css_video).to receive(:autoplay?).and_return(false)
16
+ expect(css_video.autoplay?).to eql false
17
+ end
18
+
19
+ it 'returns controls' do
20
+ allow(css_video).to receive(:controls?).and_return(true)
21
+ expect(css_video.controls?).to eql true
22
+ end
23
+
24
+ it 'returns ended' do
25
+ allow(css_video).to receive(:ended?).and_return(true)
26
+ expect(css_video.ended?).to eql true
27
+ end
28
+
29
+ it 'returns loop' do
30
+ allow(css_video).to receive(:loop?).and_return(false)
31
+ expect(css_video.loop?).to eql false
32
+ end
33
+
34
+ it 'returns muted' do
35
+ allow(css_video).to receive(:muted?).and_return(false)
36
+ expect(css_video.muted?).to eql false
37
+ end
38
+
39
+ it 'returns paused' do
40
+ allow(css_video).to receive(:paused?).and_return(true)
41
+ expect(css_video.paused?).to eql true
42
+ end
43
+
44
+ it 'returns seeking' do
45
+ allow(css_video).to receive(:seeking?).and_return(false)
46
+ expect(css_video.seeking?).to eql false
47
+ end
48
+
49
+ it 'should play the video' do
50
+ expect(css_video).to receive(:play)
51
+ css_video.play
52
+ end
53
+
54
+ it 'should pause the video' do
55
+ expect(css_video).to receive(:pause)
56
+ css_video.pause
57
+ end
58
+
59
+ it 'should mute the video' do
60
+ expect(css_video).to receive(:mute)
61
+ css_video.mute
62
+ end
63
+
64
+ it 'should unmute the video' do
65
+ expect(css_video).to receive(:unmute)
66
+ css_video.unmute
67
+ end
68
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Object, required: true do
4
+ it 'returns true when blank' do
5
+ [nil, {}, ''].each do |value|
6
+ expect(value.blank?).to eql true
7
+ end
8
+ end
9
+
10
+ it 'returns false when not blank' do
11
+ [0, 42, 'fred', ['Fred', 21], {a: 42}].each do |value|
12
+ expect(value.blank?).to eql false
13
+ end
14
+ end
15
+
16
+ it 'returns true when present' do
17
+ [0, 42, 'fred', ['Fred', 21], {a: 42}].each do |value|
18
+ expect(value.present?).to eql true
19
+ end
20
+ end
21
+
22
+ it 'returns false when not present' do
23
+ [nil, {}, ''].each do |value|
24
+ expect(value.present?).to eql false
25
+ end
26
+ end
27
+
28
+ it 'returns true when Boolean' do
29
+ [!nil?, nil?, 2 + 2 == 4].each do |value|
30
+ expect(value.boolean?).to eql true
31
+ end
32
+ end
33
+
34
+ it 'returns false when not a Boolean' do
35
+ [4, 'Ethel', [1, 'a']].each do |value|
36
+ expect(value.boolean?).to eql false
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe String, required: true do
4
+ it 'returns string between' do
5
+ expect('The rain in Spain'.string_between('The ', ' Spain')).to eql 'rain in'
6
+ end
7
+
8
+ it 'returns title case' do
9
+ expect('The rain in Spain'.titlecase).to eql 'The Rain In Spain'
10
+ end
11
+
12
+ it 'returns boolean value when true' do
13
+ %w[true t yes y x 1].each do |value|
14
+ expect(value.to_bool).to eql true
15
+ end
16
+ end
17
+
18
+ it 'returns boolean value when false' do
19
+ %w[false f no n 0].each do |value|
20
+ expect(value.to_bool).to eql false
21
+ end
22
+ end
23
+
24
+ it 'returns true when Integer' do
25
+ %w[26 3 10345].each do |value|
26
+ expect(value.is_int?).to eql true
27
+ end
28
+ end
29
+
30
+ it 'returns false when not an Integer' do
31
+ %w[271.234 0.1234 Fred].each do |value|
32
+ expect(value.is_int?).to eql false
33
+ end
34
+ end
35
+
36
+ it 'returns true when Float' do
37
+ %w[271.234 0.1234 21.4].each do |value|
38
+ expect(value.is_float?).to eql true
39
+ end
40
+ end
41
+
42
+ it 'returns formatted date' do
43
+ expect('04/06/2022'.format_date_time('%A, %d %b %Y')).to eql 'Saturday, 04 Jun 2022'
44
+ end
45
+
46
+ it 'returns translated formatted date' do
47
+ expect('04/06/2022'.format_date_time(:abbrev)).to eql 'Jun 04, 2022'
48
+ end
49
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe TestCentricity::PageObject, required: true do
4
+ before :context do
5
+ @test_page = TestPage.new
6
+ end
7
+
8
+ context 'page object traits' do
9
+ it 'returns page name' do
10
+ expect(@test_page.page_name).to eq('Basic Test Page')
11
+ end
12
+
13
+ it 'returns page url' do
14
+ expect(@test_page.page_url).to eq('/basic_test_page.html')
15
+ end
16
+
17
+ it 'returns page locator' do
18
+ expect(@test_page.page_locator).to eq('form#HTMLFormElements')
19
+ end
20
+
21
+ it 'determines if page is secure' do
22
+ allow(@test_page).to receive(:secure?).and_return(false)
23
+ expect(@test_page.secure?).to eq(false)
24
+ end
25
+
26
+ it 'should display the title of the page' do
27
+ allow(@test_page).to receive(:title).and_return('I am the title of a page')
28
+ expect(@test_page.title).to eql 'I am the title of a page'
29
+ end
30
+
31
+ it 'determines if page is secure' do
32
+ allow(@test_page).to receive(:secure?).and_return(false)
33
+ expect(@test_page.secure?).to eq(false)
34
+ end
35
+
36
+ it 'responds to open_portal' do
37
+ expect(@test_page).to respond_to(:open_portal)
38
+ end
39
+
40
+ it 'responds to load_page' do
41
+ expect(@test_page).to respond_to(:load_page)
42
+ end
43
+
44
+ it 'responds to verify_page_exists' do
45
+ expect(@test_page).to respond_to(:verify_page_exists)
46
+ end
47
+
48
+ it 'responds to exists?' do
49
+ expect(@test_page).to respond_to(:exists?)
50
+ end
51
+ end
52
+
53
+ context 'page object with UI elements' do
54
+ it 'responds to element' do
55
+ expect(@test_page).to respond_to(:element1)
56
+ end
57
+
58
+ it 'responds to button' do
59
+ expect(@test_page).to respond_to(:button1)
60
+ end
61
+
62
+ it 'responds to textfield' do
63
+ expect(@test_page).to respond_to(:field1)
64
+ end
65
+
66
+ it 'responds to link' do
67
+ expect(@test_page).to respond_to(:link1)
68
+ end
69
+
70
+ it 'responds to range' do
71
+ expect(@test_page).to respond_to(:range1)
72
+ end
73
+
74
+ it 'responds to image' do
75
+ expect(@test_page).to respond_to(:image1)
76
+ end
77
+
78
+ it 'responds to radio' do
79
+ expect(@test_page).to respond_to(:radio1)
80
+ end
81
+
82
+ it 'responds to checkbox' do
83
+ expect(@test_page).to respond_to(:check1)
84
+ end
85
+
86
+ it 'responds to section' do
87
+ expect(@test_page).to respond_to(:section1)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe TestCentricity::PageSection, required: true do
4
+ before :context do
5
+ @test_page = TestPage.new
6
+ @test_section = @test_page.section1
7
+ end
8
+
9
+ context 'section object traits' do
10
+ it 'returns section name' do
11
+ expect(@test_section.section_name).to eq('Basic Test Section')
12
+ end
13
+
14
+ it 'returns section locator' do
15
+ expect(@test_section.get_locator).to eq('div#section')
16
+ end
17
+
18
+ it 'returns class' do
19
+ expect(@test_section.class).to eql TestSection
20
+ end
21
+
22
+ it 'returns css locator type' do
23
+ expect(@test_section.get_locator_type).to eql :css
24
+ end
25
+
26
+ it 'registers with type section' do
27
+ expect(@test_section.get_object_type).to eql :section
28
+ end
29
+
30
+ it 'returns parent list object' do
31
+ expect(@test_section.get_parent_list).to eql nil
32
+ end
33
+ end
34
+
35
+ context 'section object with UI elements' do
36
+ it 'responds to element' do
37
+ expect(@test_section).to respond_to(:element1)
38
+ end
39
+
40
+ it 'responds to button' do
41
+ expect(@test_section).to respond_to(:button1)
42
+ end
43
+
44
+ it 'responds to textfield' do
45
+ expect(@test_section).to respond_to(:field1)
46
+ end
47
+
48
+ it 'responds to link' do
49
+ expect(@test_section).to respond_to(:link1)
50
+ end
51
+
52
+ it 'responds to range' do
53
+ expect(@test_section).to respond_to(:range1)
54
+ end
55
+
56
+ it 'responds to image' do
57
+ expect(@test_section).to respond_to(:image1)
58
+ end
59
+
60
+ it 'responds to radio' do
61
+ expect(@test_section).to respond_to(:radio1)
62
+ end
63
+
64
+ it 'responds to checkbox' do
65
+ expect(@test_section).to respond_to(:check1)
66
+ end
67
+
68
+ it 'responds to section' do
69
+ expect(@test_section).to respond_to(:section2)
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'TestCentricityWeb::VERSION', required: true do
4
+ subject { TestCentricityWeb::VERSION }
5
+
6
+ it { is_expected.to be_truthy }
7
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe TestCentricity::WebDriverConnect, grid: true do
4
+ before(:context) do
5
+ # instantiate remote test environment
6
+ @environs ||= EnvironData
7
+ @environs.find_environ('REMOTE', :yaml)
8
+ ENV['SELENIUM'] = 'remote'
9
+ endpoint = 'http://localhost:4444/wd/hub'
10
+ ENV['REMOTE_ENDPOINT'] = endpoint
11
+ # wait for Dockerized Selenium grid to be running
12
+ 20.downto(0) do |interval|
13
+ begin
14
+ response = HTTParty.get("#{endpoint}/status")
15
+ break if response.body.include?('Selenium Grid ready')
16
+ rescue
17
+ if interval == 0
18
+ raise 'Selenium Grid is not running.'
19
+ else
20
+ sleep(1)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ context 'grid web browser instances' do
27
+ it 'connects to a grid hosted Firefox browser' do
28
+ ENV['WEB_BROWSER'] = 'firefox'
29
+ WebDriverConnect.initialize_web_driver
30
+ verify_grid_browser(browser = :firefox, platform = :desktop)
31
+ end
32
+
33
+ it 'connects to a grid hosted Chrome browser' do
34
+ ENV['WEB_BROWSER'] = 'chrome'
35
+ WebDriverConnect.initialize_web_driver
36
+ Browsers.suppress_js_leave_page_modal
37
+ verify_grid_browser(browser = :chrome, platform = :desktop)
38
+ end
39
+
40
+ it 'connects to a grid hosted Edge browser' do
41
+ ENV['WEB_BROWSER'] = 'edge'
42
+ WebDriverConnect.initialize_web_driver
43
+ Browsers.suppress_js_alerts
44
+ verify_grid_browser(browser = :edge, platform = :desktop)
45
+ end
46
+
47
+ it 'connects to a grid hosted emulated mobile web browser' do
48
+ ENV['WEB_BROWSER'] = 'ipad_pro_12_9'
49
+ ENV['HOST_BROWSER'] = 'chrome'
50
+ ENV['ORIENTATION'] = 'portrait'
51
+ WebDriverConnect.initialize_web_driver
52
+ Browsers.set_device_orientation('landscape')
53
+ verify_grid_browser(browser = :ipad_pro_12_9, platform = :mobile)
54
+ end
55
+ end
56
+
57
+ after(:each) do
58
+ $server.stop if Environ.driver == :appium && $server.running?
59
+ Capybara.current_session.quit
60
+ Environ.session_state = :quit
61
+ end
62
+
63
+ def verify_grid_browser(browser, platform)
64
+ expect(Environ.browser).to eq(browser)
65
+ expect(Environ.platform).to eq(platform)
66
+ expect(Environ.headless).to eq(false)
67
+ expect(Environ.session_state).to eq(:running)
68
+ expect(Environ.driver).to eq(:webdriver)
69
+ expect(Environ.device).to eq(:web)
70
+ expect(Environ.grid).to eq(:selenium_grid)
71
+ end
72
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe TestCentricity::WebDriverConnect, required: true do
4
+ before(:context) do
5
+ # instantiate local test environment
6
+ @environs ||= EnvironData
7
+ @environs.find_environ('LOCAL', :yaml)
8
+ ENV['SELENIUM'] = ''
9
+ end
10
+
11
+ context 'local web browser instances' do
12
+ it 'connects to a local Firefox browser' do
13
+ ENV['WEB_BROWSER'] = 'firefox'
14
+ WebDriverConnect.initialize_web_driver
15
+ verify_local_browser(browser = :firefox, platform = :desktop, headless = false)
16
+ end
17
+
18
+ it 'connects to a local Safari browser' do
19
+ ENV['WEB_BROWSER'] = 'safari'
20
+ WebDriverConnect.initialize_web_driver
21
+ verify_local_browser(browser = :safari, platform = :desktop, headless = false)
22
+ end
23
+
24
+ it 'connects to a local Chrome browser' do
25
+ ENV['WEB_BROWSER'] = 'chrome'
26
+ WebDriverConnect.initialize_web_driver
27
+ Browsers.suppress_js_leave_page_modal
28
+ verify_local_browser(browser = :chrome, platform = :desktop, headless = false)
29
+ end
30
+
31
+ it 'connects to a local Edge browser' do
32
+ ENV['WEB_BROWSER'] = 'edge'
33
+ WebDriverConnect.initialize_web_driver
34
+ Browsers.suppress_js_alerts
35
+ verify_local_browser(browser = :edge, platform = :desktop, headless = false)
36
+ end
37
+
38
+ it 'connects to a local emulated mobile web browser' do
39
+ ENV['WEB_BROWSER'] = 'ipad_pro_12_9'
40
+ ENV['HOST_BROWSER'] = 'chrome'
41
+ ENV['ORIENTATION'] = 'portrait'
42
+ WebDriverConnect.initialize_web_driver
43
+ Browsers.set_device_orientation('landscape')
44
+ verify_local_browser(browser = :ipad_pro_12_9, platform = :mobile, headless = false)
45
+ expect(Environ.browser_size).to eq([1366, 1024])
46
+ end
47
+ end
48
+
49
+ context 'local headless browser instances' do
50
+ it 'connects to a local headless Chrome browser' do
51
+ ENV['WEB_BROWSER'] = 'chrome_headless'
52
+ WebDriverConnect.initialize_web_driver
53
+ Browsers.maximize_browser
54
+ verify_local_browser(browser = :chrome_headless, platform = :desktop, headless = true)
55
+ end
56
+
57
+ it 'connects to a local headless Edge browser' do
58
+ ENV['WEB_BROWSER'] = 'edge_headless'
59
+ WebDriverConnect.initialize_web_driver
60
+ Browsers.refresh_browser
61
+ verify_local_browser(browser = :edge_headless, platform = :desktop, headless = true)
62
+ end
63
+
64
+ it 'connects to a local headless Firefox browser' do
65
+ ENV['WEB_BROWSER'] = 'firefox_headless'
66
+ WebDriverConnect.initialize_web_driver
67
+ Browsers.delete_all_cookies
68
+ verify_local_browser(browser = :firefox_headless, platform = :desktop, headless = true)
69
+ end
70
+ end
71
+
72
+ after(:each) do
73
+ Capybara.current_session.quit
74
+ Environ.session_state = :quit
75
+ end
76
+
77
+ def verify_local_browser(browser, platform, headless)
78
+ expect(Environ.browser).to eq(browser)
79
+ expect(Environ.platform).to eq(platform)
80
+ expect(Environ.headless).to eq(headless)
81
+ expect(Environ.session_state).to eq(:running)
82
+ expect(Environ.driver).to eq(:webdriver)
83
+ expect(Environ.device).to eq(:web)
84
+ expect(Environ.is_web?).to eq(true)
85
+ end
86
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe TestCentricity::WebDriverConnect, mobile: true do
4
+ before(:context) do
5
+ # instantiate local test environment
6
+ @environs ||= EnvironData
7
+ @environs.find_environ('LOCAL', :yaml)
8
+ ENV['SELENIUM'] = ''
9
+ ENV['WEB_BROWSER'] = 'appium'
10
+ ENV['DEVICE_TYPE'] = 'tablet'
11
+ # start Appium server
12
+ $server = TestCentricity::AppiumServer.new
13
+ $server.start
14
+ end
15
+
16
+ context 'Mobile device simulator' do
17
+ it 'connects to iOS Simulator' do
18
+ ENV['AUTOMATION_ENGINE'] = 'XCUITest'
19
+ ENV['APP_PLATFORM_NAME'] = 'ios'
20
+ ENV['APP_BROWSER'] = 'Safari'
21
+ ENV['APP_VERSION'] = '15.4'
22
+ ENV['APP_DEVICE'] = 'iPad Pro (12.9-inch) (5th generation)'
23
+ WebDriverConnect.initialize_web_driver
24
+ expect(Environ.browser).to eq(:appium)
25
+ expect(Environ.platform).to eq(:mobile)
26
+ expect(Environ.headless).to eq(false)
27
+ expect(Environ.session_state).to eq(:running)
28
+ expect(Environ.driver).to eq(:appium)
29
+ expect(Environ.device).to eq(:simulator)
30
+ expect(Environ.device_name).to eq('iPad Pro (12.9-inch) (5th generation)')
31
+ expect(Environ.device_os).to eq(:ios)
32
+ expect(Environ.device_type).to eq(:tablet)
33
+ expect(Environ.device_os_version).to eq('15.4')
34
+ expect(Environ.is_ios?).to eq(true)
35
+ end
36
+
37
+ it 'connects to Android Simulator' do
38
+ ENV['APP_PLATFORM_NAME'] = 'Android'
39
+ ENV['APP_BROWSER'] = 'Chrome'
40
+ ENV['APP_VERSION'] = '12.0'
41
+ ENV['APP_DEVICE'] = 'Pixel_C_API_31'
42
+ WebDriverConnect.initialize_web_driver
43
+ expect(Environ.browser).to eq(:appium)
44
+ expect(Environ.platform).to eq(:mobile)
45
+ expect(Environ.headless).to eq(false)
46
+ expect(Environ.session_state).to eq(:running)
47
+ expect(Environ.driver).to eq(:appium)
48
+ expect(Environ.device).to eq(:simulator)
49
+ expect(Environ.device_name).to eq('Pixel_C_API_31')
50
+ expect(Environ.device_os).to eq(:android)
51
+ expect(Environ.device_type).to eq(:tablet)
52
+ expect(Environ.device_os_version).to eq('12.0')
53
+ expect(Environ.is_android?).to eq(true)
54
+ end
55
+ end
56
+
57
+ after(:each) do
58
+ Capybara.current_session.quit
59
+ Environ.session_state = :quit
60
+ end
61
+
62
+ after(:context) do
63
+ $server.stop if Environ.driver == :appium && $server.running?
64
+ end
65
+ end
@@ -15,11 +15,44 @@
15
15
  text-align: left;
16
16
  padding: 8px;
17
17
  }
18
+ body {
19
+ margin: 0;
20
+ font-family: Arial, Helvetica, sans-serif;
21
+ }
22
+ .topnav {
23
+ overflow: hidden;
24
+ background-color: #333;
25
+ }
26
+ .topnav a {
27
+ float: left;
28
+ color: #f2f2f2;
29
+ text-align: center;
30
+ padding: 12px 14px;
31
+ text-decoration: none;
32
+ font-size: 15px;
33
+ }
34
+ .topnav a:hover {
35
+ background-color: #ddd;
36
+ color: black;
37
+ }
38
+ .topnav a.active {
39
+ background-color: #04AA6D;
40
+ color: white;
41
+ }
18
42
  </style>
19
43
  </head>
20
44
  <body>
21
45
  <div class="page-body">
22
- <h1>Basic HTML Form Example</h1>
46
+ <h2 id="header">Basic HTML Form</h2>
47
+
48
+ <div id="nav_bar" class="topnav">
49
+ <a id="form_link" class="active" href="#">Basic HTML Form</a>
50
+ <a id="media_link" href="media_page.html">Media</a>
51
+ <a id="indexed_sections_link" href="indexed_sections_page.html">Indexed Sections</a>
52
+ <a id="custom_controls_link" href="custom_controls_page.html">Custom Controls</a>
53
+ </div>
54
+
55
+
23
56
  <div class="centered">
24
57
  <form name="HTMLFormElements" id="HTMLFormElements">
25
58
  <table border="1" cellpadding="5">
@@ -132,6 +165,23 @@
132
165
  </td>
133
166
  </tr>
134
167
 
168
+ <tr>
169
+ <td>
170
+ <label id="links">Links:</label>
171
+ <ul id="links_list">
172
+ <li>
173
+ <a id="link1" href="media_page.html">Open Media Page in same window/tab</a>
174
+ </li>
175
+ <li>
176
+ <a id="link2" href="media_page.html" target="_blank">Open Media Page in a new window/tab</a>
177
+ </li>
178
+ <li>
179
+ <a id="link3" role="link" aria-disabled="true">Disabled Link</a>
180
+ </li>
181
+ </ul>
182
+ </td>
183
+ </tr>
184
+
135
185
  <tr>
136
186
  <td>
137
187
  <label for="table">Table:</label>
Binary file
Binary file