testcentricity 2.4.3 → 3.0.2

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 (126) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +29 -0
  3. data/.rspec +2 -1
  4. data/.rubocop.yml +38 -0
  5. data/.ruby-version +1 -1
  6. data/.simplecov +9 -0
  7. data/.yardopts +3 -0
  8. data/CHANGELOG.md +282 -0
  9. data/CODE_OF_CONDUCT.md +13 -0
  10. data/{LICENSE.txt → LICENSE.md} +3 -4
  11. data/README.md +938 -1384
  12. data/Rakefile +63 -1
  13. data/config/cucumber.yml +145 -0
  14. data/config/locales/en-US.yml +56 -0
  15. data/config/test_data/LOCAL_data.yml +11 -0
  16. data/config/test_data/data.yml +10 -0
  17. data/features/deep_links.feature +26 -0
  18. data/features/login.feature +30 -0
  19. data/features/navigation.feature +31 -0
  20. data/features/step_definitions/generic_steps.rb +72 -0
  21. data/features/support/android/screens/about_screen.rb +11 -0
  22. data/features/support/android/screens/base_app_screen.rb +29 -0
  23. data/features/support/android/screens/checkout_address_screen.rb +17 -0
  24. data/features/support/android/screens/checkout_payment_screen.rb +22 -0
  25. data/features/support/android/screens/login_screen.rb +18 -0
  26. data/features/support/android/screens/products_screen.rb +13 -0
  27. data/features/support/android/screens/saucebot_screen.rb +16 -0
  28. data/features/support/android/screens/webview_screen.rb +13 -0
  29. data/features/support/android/sections/nav_widgets/nav_menu.rb +39 -0
  30. data/features/support/env.rb +61 -0
  31. data/features/support/hooks.rb +135 -0
  32. data/features/support/ios/screens/about_screen.rb +11 -0
  33. data/features/support/ios/screens/base_app_screen.rb +19 -0
  34. data/features/support/ios/screens/checkout_address_screen.rb +17 -0
  35. data/features/support/ios/screens/checkout_payment_screen.rb +22 -0
  36. data/features/support/ios/screens/login_screen.rb +18 -0
  37. data/features/support/ios/screens/products_screen.rb +13 -0
  38. data/features/support/ios/screens/saucebot_screen.rb +16 -0
  39. data/features/support/ios/screens/webview_screen.rb +13 -0
  40. data/features/support/ios/sections/list_items/product_cell_item.rb +13 -0
  41. data/features/support/ios/sections/modals/base_modal.rb +23 -0
  42. data/features/support/ios/sections/modals/logout_modal.rb +6 -0
  43. data/features/support/ios/sections/modals/reset_app_state_modal.rb +6 -0
  44. data/features/support/ios/sections/nav_widgets/nav_bar.rb +31 -0
  45. data/features/support/ios/sections/nav_widgets/nav_menu.rb +41 -0
  46. data/features/support/shared_components/screens/base_app_screen.rb +31 -0
  47. data/features/support/shared_components/screens/checkout_address_screen.rb +17 -0
  48. data/features/support/shared_components/screens/checkout_payment_screen.rb +22 -0
  49. data/features/support/shared_components/screens/login_screen.rb +39 -0
  50. data/features/support/shared_components/screens/saucebot_screen.rb +17 -0
  51. data/features/support/shared_components/screens/webview_screen.rb +12 -0
  52. data/features/support/shared_components/sections/nav_menu.rb +58 -0
  53. data/features/support/world_data.rb +12 -0
  54. data/features/support/world_pages.rb +26 -0
  55. data/lib/testcentricity/app_core/appium_connect_helper.rb +343 -111
  56. data/lib/testcentricity/app_core/screen_object.rb +252 -0
  57. data/lib/testcentricity/app_core/screen_objects_helper.rb +29 -201
  58. data/lib/testcentricity/app_core/{screen_sections_helper.rb → screen_section.rb} +40 -105
  59. data/lib/testcentricity/app_elements/app_element_helper.rb +17 -8
  60. data/lib/testcentricity/app_elements/checkbox.rb +3 -3
  61. data/lib/testcentricity/data_objects/environment.rb +133 -39
  62. data/lib/testcentricity/version.rb +1 -1
  63. data/lib/testcentricity.rb +4 -129
  64. data/reports/.keep +1 -0
  65. data/spec/fixtures/page_object.rb +22 -0
  66. data/spec/fixtures/page_section_object.rb +21 -0
  67. data/spec/fixtures/screen_object.rb +16 -0
  68. data/spec/fixtures/screen_section_object.rb +16 -0
  69. data/spec/spec_helper.rb +28 -9
  70. data/spec/testcentricity/elements/button_spec.rb +18 -0
  71. data/spec/testcentricity/elements/checkbox_spec.rb +28 -0
  72. data/spec/testcentricity/elements/image_spec.rb +13 -0
  73. data/spec/testcentricity/elements/label_spec.rb +18 -0
  74. data/spec/testcentricity/elements/list_spec.rb +13 -0
  75. data/spec/testcentricity/elements/ui_element_spec.rb +72 -0
  76. data/spec/testcentricity/mobile/appium_connect_spec.rb +117 -0
  77. data/spec/testcentricity/mobile/screen_object_spec.rb +63 -0
  78. data/spec/testcentricity/mobile/screen_section_object_spec.rb +56 -0
  79. data/spec/testcentricity/version_spec.rb +7 -0
  80. data/spec/testcentricity/web/browser_spec.rb +41 -0
  81. data/spec/testcentricity/web/local_webdriver_spec.rb +86 -0
  82. data/spec/testcentricity/web/mobile_webdriver_spec.rb +123 -0
  83. data/spec/testcentricity/web/page_object_spec.rb +85 -0
  84. data/spec/testcentricity/web/page_section_object_spec.rb +72 -0
  85. data/testcentricity.gemspec +30 -27
  86. metadata +216 -119
  87. data/.ruby-gemset +0 -1
  88. data/Gemfile.lock +0 -93
  89. data/bin/console +0 -14
  90. data/bin/setup +0 -8
  91. data/lib/devices/devices.yml +0 -352
  92. data/lib/testcentricity/app_core/appium_server.rb +0 -69
  93. data/lib/testcentricity/browser_helper.rb +0 -174
  94. data/lib/testcentricity/data_objects/data_objects_helper.rb +0 -78
  95. data/lib/testcentricity/data_objects/excel_helper.rb +0 -242
  96. data/lib/testcentricity/exception_queue_helper.rb +0 -111
  97. data/lib/testcentricity/utility_helpers.rb +0 -32
  98. data/lib/testcentricity/web_core/drag_drop_helper.rb +0 -15
  99. data/lib/testcentricity/web_core/page_objects_helper.rb +0 -677
  100. data/lib/testcentricity/web_core/page_sections_helper.rb +0 -895
  101. data/lib/testcentricity/web_core/webdriver_helper.rb +0 -588
  102. data/lib/testcentricity/web_elements/button.rb +0 -8
  103. data/lib/testcentricity/web_elements/cell_button.rb +0 -8
  104. data/lib/testcentricity/web_elements/cell_checkbox.rb +0 -38
  105. data/lib/testcentricity/web_elements/cell_element.rb +0 -69
  106. data/lib/testcentricity/web_elements/cell_image.rb +0 -8
  107. data/lib/testcentricity/web_elements/cell_radio.rb +0 -31
  108. data/lib/testcentricity/web_elements/checkbox.rb +0 -100
  109. data/lib/testcentricity/web_elements/file_field.rb +0 -45
  110. data/lib/testcentricity/web_elements/image.rb +0 -34
  111. data/lib/testcentricity/web_elements/label.rb +0 -8
  112. data/lib/testcentricity/web_elements/link.rb +0 -8
  113. data/lib/testcentricity/web_elements/list.rb +0 -100
  114. data/lib/testcentricity/web_elements/list_button.rb +0 -8
  115. data/lib/testcentricity/web_elements/list_checkbox.rb +0 -38
  116. data/lib/testcentricity/web_elements/list_element.rb +0 -61
  117. data/lib/testcentricity/web_elements/list_radio.rb +0 -31
  118. data/lib/testcentricity/web_elements/radio.rb +0 -74
  119. data/lib/testcentricity/web_elements/select_list.rb +0 -208
  120. data/lib/testcentricity/web_elements/siebel_open_ui_helper.rb +0 -15
  121. data/lib/testcentricity/web_elements/table.rb +0 -612
  122. data/lib/testcentricity/web_elements/textfield.rb +0 -114
  123. data/lib/testcentricity/web_elements/ui_elements_helper.rb +0 -532
  124. data/lib/testcentricity/world_extensions.rb +0 -26
  125. data/my_templates/default/method_details/setup.rb +0 -3
  126. data/spec/testcentricity_spec.rb +0 -9
@@ -1,208 +0,0 @@
1
- module TestCentricity
2
- class SelectList < UIElement
3
- attr_accessor :list_item
4
- attr_accessor :selected_item
5
- attr_accessor :list_trigger
6
-
7
- def initialize(name, parent, locator, context)
8
- super
9
- @type = :selectlist
10
- list_spec = {
11
- :list_item => "li[class*='active-result']",
12
- :selected_item => "li[class*='result-selected']",
13
- :list_trigger => nil
14
- }
15
- define_list_elements(list_spec)
16
- end
17
-
18
- def define_list_elements(element_spec)
19
- element_spec.each do |element, value|
20
- case element
21
- when :list_item
22
- @list_item = value
23
- when :selected_item
24
- @selected_item = value
25
- when :list_trigger
26
- @list_trigger = value
27
- else
28
- raise "#{element} is not a recognized selectlist element"
29
- end
30
- end
31
- end
32
-
33
- # Select the specified option in a select box object. Accepts a String or Hash.
34
- # Supports standard HTML select objects and Chosen select objects.
35
- #
36
- # @param option [String] text of option to select
37
- # OR
38
- # @param option [Hash] :value, :index, or :text of option to select
39
- #
40
- # @example
41
- # province_select.choose_option('Alberta')
42
- # province_select.choose_option(:value => 'AB')
43
- # state_select.choose_option(:index => 24)
44
- # state_select.choose_option(:text => 'Maryland')
45
- #
46
- def choose_option(option)
47
- obj, = find_element
48
- object_not_found_exception(obj, nil)
49
- if @list_trigger.nil?
50
- obj.click
51
- else
52
- page.find(:css, @list_trigger).click
53
- sleep(1)
54
- end
55
- if first(:css, @list_item)
56
- if option.is_a?(Array)
57
- option.each do |item|
58
- page.find(:css, @list_item, text: item.strip).click
59
- end
60
- else
61
- if option.is_a?(Hash)
62
- page.find(:css, "#{@list_item}:nth-of-type(#{option[:index]})").click if option.has_key?(:index)
63
- page.find(:css, "#{@list_item}:nth-of-type(#{option[:value]})").click if option.has_key?(:value)
64
- page.find(:css, "#{@list_item}:nth-of-type(#{option[:text]})").click if option.has_key?(:text)
65
- else
66
- options = obj.all(@list_item).collect(&:text)
67
- sleep(2) unless options.include?(option)
68
- first(:css, @list_item, text: option).click
69
- end
70
- end
71
- else
72
- if option.is_a?(Array)
73
- option.each do |item|
74
- select_item(obj, item)
75
- end
76
- else
77
- select_item(obj, option)
78
- end
79
- end
80
- end
81
-
82
- # Return array of strings of all options in a select box object.
83
- # Supports standard HTML select objects and Chosen select objects.
84
- #
85
- # @return [Array]
86
- # @example
87
- # all_colors = color_select.get_options
88
- #
89
- def get_options
90
- obj, = find_element
91
- object_not_found_exception(obj, nil)
92
- if first(:css, @list_item)
93
- obj.all(@list_item).collect(&:text)
94
- else
95
- obj.all('option').collect(&:text)
96
- end
97
- end
98
-
99
- alias get_list_items get_options
100
-
101
- # Return the number of options in a select box object.
102
- # Supports standard HTML select objects and Chosen select objects.
103
- #
104
- # @return [Integer]
105
- # @example
106
- # num_colors = color_select.get_option_count
107
- #
108
- def get_option_count
109
- obj, = find_element
110
- object_not_found_exception(obj, nil)
111
- if first(:css, @list_item)
112
- obj.all(@list_item).count
113
- else
114
- obj.all('option').count
115
- end
116
- end
117
-
118
- alias get_item_count get_option_count
119
-
120
- def verify_options(expected, enqueue = false)
121
- actual = get_options
122
- enqueue ?
123
- ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected list of options in list #{object_ref_message}") :
124
- assert_equal(expected, actual, "Expected list of options in list #{object_ref_message} to be #{expected} but found #{actual}")
125
- end
126
-
127
- # Return text of first selected option in a select box object.
128
- # Supports standard HTML select objects and Chosen select objects.
129
- #
130
- # @return [String]
131
- # @example
132
- # current_color = color_select.get_selected_option
133
- #
134
- def get_selected_option
135
- obj, = find_element
136
- object_not_found_exception(obj, nil)
137
- if first(:css, @list_item)
138
- obj.first(:css, @selected_item).text
139
- else
140
- obj.first('option[selected]').text
141
- end
142
- end
143
-
144
- alias selected? get_selected_option
145
-
146
- # Select the specified option in a Siebel OUI select box object.
147
- #
148
- # @param option [String] text of option to select
149
- # @example
150
- # country_select.choose_siebel_option('Cayman Islands')
151
- #
152
- def choose_siebel_option(option)
153
- Capybara.wait_on_first_by_default = true
154
- invoke_siebel_popup
155
- first(:xpath, "//li[@class='ui-menu-item']", :exact => true, :match => :prefer_exact, text: option).click
156
- end
157
-
158
- # Return array of strings of all options in a Siebel OUI select box object.
159
- #
160
- # @return [Array]
161
- # @example
162
- # all_countries = country_select.get_siebel_options
163
- #
164
- def get_siebel_options
165
- invoke_siebel_popup
166
- sleep(0.5)
167
- options = page.all(:xpath, "//li[@class='ui-menu-item']").collect(&:text)
168
- obj, = find_element
169
- obj.native.send_keys(:escape)
170
- options
171
- end
172
-
173
- def verify_siebel_options(expected, enqueue = false)
174
- invoke_siebel_popup
175
- sleep(0.5)
176
- actual = page.all(:xpath, "//li[@class='ui-menu-item']").collect(&:text)
177
- enqueue ?
178
- ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected list of options in list #{object_ref_message}") :
179
- assert_equal(expected, actual, "Expected list of options in list #{object_ref_message} to be #{expected} but found #{actual}")
180
- obj, = find_element
181
- obj.native.send_keys(:escape)
182
- end
183
-
184
- # Is Siebel JComboBox set to read-only?
185
- #
186
- # @return [Boolean]
187
- # @example
188
- # country_select.read_only?
189
- #
190
- def read_only?
191
- obj, = find_element
192
- object_not_found_exception(obj, nil)
193
- !obj.native.attribute('readonly')
194
- end
195
-
196
- private
197
-
198
- def select_item(obj, option)
199
- if option.is_a?(Hash)
200
- obj.find("option[value='#{option[:value]}']").click if option.has_key?(:value)
201
- obj.find(:xpath, "option[#{option[:index]}]").select_option if option.has_key?(:index)
202
- obj.select option[:text] if option.has_key?(:text)
203
- else
204
- obj.select option
205
- end
206
- end
207
- end
208
- end
@@ -1,15 +0,0 @@
1
- module TestCentricity
2
- class UIElement
3
- def invoke_siebel_dialog(popup, seconds = nil)
4
- invoke_siebel_popup
5
- timeout = seconds.nil? ? 15 : seconds
6
- popup.wait_until_exists(timeout)
7
- end
8
-
9
- def get_siebel_object_type
10
- obj, = find_element
11
- object_not_found_exception(obj, 'Siebel object')
12
- obj.native.attribute('ot')
13
- end
14
- end
15
- end