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.
- checksums.yaml +5 -5
- data/.gitignore +29 -0
- data/.rspec +2 -1
- data/.rubocop.yml +38 -0
- data/.ruby-version +1 -1
- data/.simplecov +9 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +282 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/{LICENSE.txt → LICENSE.md} +3 -4
- data/README.md +938 -1384
- data/Rakefile +63 -1
- data/config/cucumber.yml +145 -0
- data/config/locales/en-US.yml +56 -0
- data/config/test_data/LOCAL_data.yml +11 -0
- data/config/test_data/data.yml +10 -0
- data/features/deep_links.feature +26 -0
- data/features/login.feature +30 -0
- data/features/navigation.feature +31 -0
- data/features/step_definitions/generic_steps.rb +72 -0
- data/features/support/android/screens/about_screen.rb +11 -0
- data/features/support/android/screens/base_app_screen.rb +29 -0
- data/features/support/android/screens/checkout_address_screen.rb +17 -0
- data/features/support/android/screens/checkout_payment_screen.rb +22 -0
- data/features/support/android/screens/login_screen.rb +18 -0
- data/features/support/android/screens/products_screen.rb +13 -0
- data/features/support/android/screens/saucebot_screen.rb +16 -0
- data/features/support/android/screens/webview_screen.rb +13 -0
- data/features/support/android/sections/nav_widgets/nav_menu.rb +39 -0
- data/features/support/env.rb +61 -0
- data/features/support/hooks.rb +135 -0
- data/features/support/ios/screens/about_screen.rb +11 -0
- data/features/support/ios/screens/base_app_screen.rb +19 -0
- data/features/support/ios/screens/checkout_address_screen.rb +17 -0
- data/features/support/ios/screens/checkout_payment_screen.rb +22 -0
- data/features/support/ios/screens/login_screen.rb +18 -0
- data/features/support/ios/screens/products_screen.rb +13 -0
- data/features/support/ios/screens/saucebot_screen.rb +16 -0
- data/features/support/ios/screens/webview_screen.rb +13 -0
- data/features/support/ios/sections/list_items/product_cell_item.rb +13 -0
- data/features/support/ios/sections/modals/base_modal.rb +23 -0
- data/features/support/ios/sections/modals/logout_modal.rb +6 -0
- data/features/support/ios/sections/modals/reset_app_state_modal.rb +6 -0
- data/features/support/ios/sections/nav_widgets/nav_bar.rb +31 -0
- data/features/support/ios/sections/nav_widgets/nav_menu.rb +41 -0
- data/features/support/shared_components/screens/base_app_screen.rb +31 -0
- data/features/support/shared_components/screens/checkout_address_screen.rb +17 -0
- data/features/support/shared_components/screens/checkout_payment_screen.rb +22 -0
- data/features/support/shared_components/screens/login_screen.rb +39 -0
- data/features/support/shared_components/screens/saucebot_screen.rb +17 -0
- data/features/support/shared_components/screens/webview_screen.rb +12 -0
- data/features/support/shared_components/sections/nav_menu.rb +58 -0
- data/features/support/world_data.rb +12 -0
- data/features/support/world_pages.rb +26 -0
- data/lib/testcentricity/app_core/appium_connect_helper.rb +343 -111
- data/lib/testcentricity/app_core/screen_object.rb +252 -0
- data/lib/testcentricity/app_core/screen_objects_helper.rb +29 -201
- data/lib/testcentricity/app_core/{screen_sections_helper.rb → screen_section.rb} +40 -105
- data/lib/testcentricity/app_elements/app_element_helper.rb +17 -8
- data/lib/testcentricity/app_elements/checkbox.rb +3 -3
- data/lib/testcentricity/data_objects/environment.rb +133 -39
- data/lib/testcentricity/version.rb +1 -1
- data/lib/testcentricity.rb +4 -129
- data/reports/.keep +1 -0
- data/spec/fixtures/page_object.rb +22 -0
- data/spec/fixtures/page_section_object.rb +21 -0
- data/spec/fixtures/screen_object.rb +16 -0
- data/spec/fixtures/screen_section_object.rb +16 -0
- data/spec/spec_helper.rb +28 -9
- data/spec/testcentricity/elements/button_spec.rb +18 -0
- data/spec/testcentricity/elements/checkbox_spec.rb +28 -0
- data/spec/testcentricity/elements/image_spec.rb +13 -0
- data/spec/testcentricity/elements/label_spec.rb +18 -0
- data/spec/testcentricity/elements/list_spec.rb +13 -0
- data/spec/testcentricity/elements/ui_element_spec.rb +72 -0
- data/spec/testcentricity/mobile/appium_connect_spec.rb +117 -0
- data/spec/testcentricity/mobile/screen_object_spec.rb +63 -0
- data/spec/testcentricity/mobile/screen_section_object_spec.rb +56 -0
- data/spec/testcentricity/version_spec.rb +7 -0
- data/spec/testcentricity/web/browser_spec.rb +41 -0
- data/spec/testcentricity/web/local_webdriver_spec.rb +86 -0
- data/spec/testcentricity/web/mobile_webdriver_spec.rb +123 -0
- data/spec/testcentricity/web/page_object_spec.rb +85 -0
- data/spec/testcentricity/web/page_section_object_spec.rb +72 -0
- data/testcentricity.gemspec +30 -27
- metadata +216 -119
- data/.ruby-gemset +0 -1
- data/Gemfile.lock +0 -93
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/lib/devices/devices.yml +0 -352
- data/lib/testcentricity/app_core/appium_server.rb +0 -69
- data/lib/testcentricity/browser_helper.rb +0 -174
- data/lib/testcentricity/data_objects/data_objects_helper.rb +0 -78
- data/lib/testcentricity/data_objects/excel_helper.rb +0 -242
- data/lib/testcentricity/exception_queue_helper.rb +0 -111
- data/lib/testcentricity/utility_helpers.rb +0 -32
- data/lib/testcentricity/web_core/drag_drop_helper.rb +0 -15
- data/lib/testcentricity/web_core/page_objects_helper.rb +0 -677
- data/lib/testcentricity/web_core/page_sections_helper.rb +0 -895
- data/lib/testcentricity/web_core/webdriver_helper.rb +0 -588
- data/lib/testcentricity/web_elements/button.rb +0 -8
- data/lib/testcentricity/web_elements/cell_button.rb +0 -8
- data/lib/testcentricity/web_elements/cell_checkbox.rb +0 -38
- data/lib/testcentricity/web_elements/cell_element.rb +0 -69
- data/lib/testcentricity/web_elements/cell_image.rb +0 -8
- data/lib/testcentricity/web_elements/cell_radio.rb +0 -31
- data/lib/testcentricity/web_elements/checkbox.rb +0 -100
- data/lib/testcentricity/web_elements/file_field.rb +0 -45
- data/lib/testcentricity/web_elements/image.rb +0 -34
- data/lib/testcentricity/web_elements/label.rb +0 -8
- data/lib/testcentricity/web_elements/link.rb +0 -8
- data/lib/testcentricity/web_elements/list.rb +0 -100
- data/lib/testcentricity/web_elements/list_button.rb +0 -8
- data/lib/testcentricity/web_elements/list_checkbox.rb +0 -38
- data/lib/testcentricity/web_elements/list_element.rb +0 -61
- data/lib/testcentricity/web_elements/list_radio.rb +0 -31
- data/lib/testcentricity/web_elements/radio.rb +0 -74
- data/lib/testcentricity/web_elements/select_list.rb +0 -208
- data/lib/testcentricity/web_elements/siebel_open_ui_helper.rb +0 -15
- data/lib/testcentricity/web_elements/table.rb +0 -612
- data/lib/testcentricity/web_elements/textfield.rb +0 -114
- data/lib/testcentricity/web_elements/ui_elements_helper.rb +0 -532
- data/lib/testcentricity/world_extensions.rb +0 -26
- data/my_templates/default/method_details/setup.rb +0 -3
- data/spec/testcentricity_spec.rb +0 -9
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'test/unit'
|
|
2
2
|
|
|
3
3
|
module TestCentricity
|
|
4
|
-
class ScreenSection
|
|
4
|
+
class ScreenSection < BaseScreenSectionObject
|
|
5
5
|
include Test::Unit::Assertions
|
|
6
6
|
|
|
7
7
|
attr_reader :context, :name
|
|
@@ -81,7 +81,7 @@ module TestCentricity
|
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def self.element(element_name, locator)
|
|
84
|
-
|
|
84
|
+
define_section_element(element_name, TestCentricity::AppUIElement, locator)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def self.elements(element_hash)
|
|
@@ -91,7 +91,7 @@ module TestCentricity
|
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
def self.button(element_name, locator)
|
|
94
|
-
|
|
94
|
+
define_section_element(element_name, TestCentricity::AppButton, locator)
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def self.buttons(element_hash)
|
|
@@ -101,7 +101,7 @@ module TestCentricity
|
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
def self.textfield(element_name, locator)
|
|
104
|
-
|
|
104
|
+
define_section_element(element_name, TestCentricity::AppTextField, locator)
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
def self.textfields(element_hash)
|
|
@@ -111,7 +111,7 @@ module TestCentricity
|
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
def self.switch(element_name, locator)
|
|
114
|
-
|
|
114
|
+
define_section_element(element_name, TestCentricity::AppSwitch, locator)
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
def self.switches(element_hash)
|
|
@@ -121,7 +121,7 @@ module TestCentricity
|
|
|
121
121
|
end
|
|
122
122
|
|
|
123
123
|
def self.checkbox(element_name, locator)
|
|
124
|
-
|
|
124
|
+
define_section_element(element_name, TestCentricity::AppCheckBox, locator)
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def self.checkboxes(element_hash)
|
|
@@ -131,7 +131,7 @@ module TestCentricity
|
|
|
131
131
|
end
|
|
132
132
|
|
|
133
133
|
def self.label(element_name, locator)
|
|
134
|
-
|
|
134
|
+
define_section_element(element_name, TestCentricity::AppLabel, locator)
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
def self.labels(element_hash)
|
|
@@ -141,7 +141,7 @@ module TestCentricity
|
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
def self.list(element_name, locator)
|
|
144
|
-
|
|
144
|
+
define_section_element(element_name, TestCentricity::AppList, locator)
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
def self.lists(element_hash)
|
|
@@ -151,7 +151,7 @@ module TestCentricity
|
|
|
151
151
|
end
|
|
152
152
|
|
|
153
153
|
def self.selectlist(element_name, locator)
|
|
154
|
-
|
|
154
|
+
define_section_element(element_name, TestCentricity::AppSelectList, locator)
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
def self.selectlists(element_hash)
|
|
@@ -161,7 +161,7 @@ module TestCentricity
|
|
|
161
161
|
end
|
|
162
162
|
|
|
163
163
|
def self.image(element_name, locator)
|
|
164
|
-
|
|
164
|
+
define_section_element(element_name, TestCentricity::AppImage, locator)
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
def self.images(element_hash)
|
|
@@ -180,7 +180,7 @@ module TestCentricity
|
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
def self.section(section_name, obj, locator = 0)
|
|
183
|
-
|
|
183
|
+
define_section_element(section_name, obj, locator)
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
def self.sections(section_hash)
|
|
@@ -232,47 +232,62 @@ module TestCentricity
|
|
|
232
232
|
end
|
|
233
233
|
|
|
234
234
|
def visible?
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
end
|
|
235
|
+
section = find_section
|
|
236
|
+
return false if section.nil?
|
|
237
|
+
|
|
238
|
+
section.displayed?
|
|
240
239
|
end
|
|
241
240
|
|
|
242
241
|
def hidden?
|
|
243
242
|
!visible?
|
|
244
243
|
end
|
|
245
244
|
|
|
246
|
-
def wait_until_exists(seconds = nil)
|
|
245
|
+
def wait_until_exists(seconds = nil, post_exception = true)
|
|
247
246
|
timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
|
|
248
247
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
|
249
248
|
wait.until { exists? }
|
|
250
249
|
rescue
|
|
251
|
-
|
|
250
|
+
if post_exception
|
|
251
|
+
raise "Could not find Section object '#{get_name}' (#{get_locator}) after #{timeout} seconds" unless exists?
|
|
252
|
+
else
|
|
253
|
+
exists?
|
|
254
|
+
end
|
|
252
255
|
end
|
|
253
256
|
|
|
254
|
-
def wait_until_gone(seconds = nil)
|
|
257
|
+
def wait_until_gone(seconds = nil, post_exception = true)
|
|
255
258
|
timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
|
|
256
259
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
|
257
260
|
wait.until { !exists? }
|
|
258
261
|
rescue
|
|
259
|
-
|
|
262
|
+
if post_exception
|
|
263
|
+
raise "Section object '#{get_name}' (#{get_locator}) remained visible after #{timeout} seconds" if exists?
|
|
264
|
+
else
|
|
265
|
+
exists?
|
|
266
|
+
end
|
|
260
267
|
end
|
|
261
268
|
|
|
262
|
-
def wait_until_visible(seconds = nil)
|
|
269
|
+
def wait_until_visible(seconds = nil, post_exception = true)
|
|
263
270
|
timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
|
|
264
271
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
|
265
272
|
wait.until { visible? }
|
|
266
273
|
rescue
|
|
267
|
-
|
|
274
|
+
if post_exception
|
|
275
|
+
raise "Could not find Section object '#{get_name}' (#{get_locator}) after #{timeout} seconds" unless visible?
|
|
276
|
+
else
|
|
277
|
+
visible?
|
|
278
|
+
end
|
|
268
279
|
end
|
|
269
280
|
|
|
270
|
-
def wait_until_hidden(seconds = nil)
|
|
281
|
+
def wait_until_hidden(seconds = nil, post_exception = true)
|
|
271
282
|
timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
|
|
272
283
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
|
273
284
|
wait.until { hidden? }
|
|
274
285
|
rescue
|
|
275
|
-
|
|
286
|
+
if post_exception
|
|
287
|
+
raise "Section object '#{get_name}' (#{get_locator}) remained visible after #{timeout} seconds" if visible?
|
|
288
|
+
else
|
|
289
|
+
visible?
|
|
290
|
+
end
|
|
276
291
|
end
|
|
277
292
|
|
|
278
293
|
|
|
@@ -300,86 +315,6 @@ module TestCentricity
|
|
|
300
315
|
section.location.y
|
|
301
316
|
end
|
|
302
317
|
|
|
303
|
-
|
|
304
|
-
def verify_ui_states(ui_states)
|
|
305
|
-
ui_states.each do |ui_object, object_states|
|
|
306
|
-
object_states.each do |property, state|
|
|
307
|
-
|
|
308
|
-
puts "#{ui_object.get_name} - #{property} = #{state}" if ENV['DEBUG']
|
|
309
|
-
|
|
310
|
-
case property
|
|
311
|
-
when :class
|
|
312
|
-
actual = ui_object.get_attribute(:class)
|
|
313
|
-
when :exists
|
|
314
|
-
actual = ui_object.exists?
|
|
315
|
-
when :enabled
|
|
316
|
-
actual = ui_object.enabled?
|
|
317
|
-
when :disabled
|
|
318
|
-
actual = ui_object.disabled?
|
|
319
|
-
when :visible
|
|
320
|
-
actual = ui_object.visible?
|
|
321
|
-
when :hidden
|
|
322
|
-
actual = ui_object.hidden?
|
|
323
|
-
when :checked
|
|
324
|
-
actual = ui_object.checked?
|
|
325
|
-
when :selected
|
|
326
|
-
actual = ui_object.selected?
|
|
327
|
-
when :value
|
|
328
|
-
actual = ui_object.get_value
|
|
329
|
-
when :caption
|
|
330
|
-
actual = ui_object.get_caption
|
|
331
|
-
when :name
|
|
332
|
-
actual = ui_object.tag_name
|
|
333
|
-
when :placeholder
|
|
334
|
-
actual = ui_object.get_placeholder
|
|
335
|
-
when :readonly
|
|
336
|
-
actual = ui_object.read_only?
|
|
337
|
-
when :maxlength
|
|
338
|
-
actual = ui_object.get_max_length
|
|
339
|
-
when :items
|
|
340
|
-
actual = ui_object.get_list_items
|
|
341
|
-
when :itemcount
|
|
342
|
-
actual = ui_object.get_item_count
|
|
343
|
-
when :width
|
|
344
|
-
actual = ui_object.width
|
|
345
|
-
when :height
|
|
346
|
-
actual = ui_object.height
|
|
347
|
-
when :x
|
|
348
|
-
actual = ui_object.x_loc
|
|
349
|
-
when :y
|
|
350
|
-
actual = ui_object.y_loc
|
|
351
|
-
end
|
|
352
|
-
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
|
353
|
-
ExceptionQueue.enqueue_comparison(state, actual, error_msg)
|
|
354
|
-
end
|
|
355
|
-
end
|
|
356
|
-
rescue ObjectNotFoundError => e
|
|
357
|
-
ExceptionQueue.enqueue_exception(e.message)
|
|
358
|
-
ensure
|
|
359
|
-
ExceptionQueue.post_exceptions
|
|
360
|
-
end
|
|
361
|
-
|
|
362
|
-
def populate_data_fields(data, wait_time = nil)
|
|
363
|
-
timeout = wait_time.nil? ? 5 : wait_time
|
|
364
|
-
data.each do |data_field, data_param|
|
|
365
|
-
unless data_param.blank?
|
|
366
|
-
# make sure the intended UI target element is visible before trying to set its value
|
|
367
|
-
data_field.wait_until_visible(timeout)
|
|
368
|
-
if data_param == '!DELETE'
|
|
369
|
-
data_field.clear
|
|
370
|
-
else
|
|
371
|
-
case data_field.get_object_type
|
|
372
|
-
when :checkbox
|
|
373
|
-
data_field.set_checkbox_state(data_param.to_bool)
|
|
374
|
-
when :textfield
|
|
375
|
-
data_field.clear
|
|
376
|
-
data_field.set("#{data_param}\t")
|
|
377
|
-
end
|
|
378
|
-
end
|
|
379
|
-
end
|
|
380
|
-
end
|
|
381
|
-
end
|
|
382
|
-
|
|
383
318
|
private
|
|
384
319
|
|
|
385
320
|
def find_section
|
|
@@ -403,7 +338,7 @@ module TestCentricity
|
|
|
403
338
|
raise ObjectNotFoundError.new("Section object '#{get_name}' (#{get_locator}) not found") unless obj
|
|
404
339
|
end
|
|
405
340
|
|
|
406
|
-
def self.
|
|
341
|
+
def self.define_section_element(element_name, obj, locator)
|
|
407
342
|
define_method(element_name) do
|
|
408
343
|
ivar_name = "@#{element_name}"
|
|
409
344
|
ivar = instance_variable_get(ivar_name)
|
|
@@ -88,6 +88,8 @@ module TestCentricity
|
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
+
alias value get_value
|
|
92
|
+
|
|
91
93
|
def get_caption
|
|
92
94
|
obj = element
|
|
93
95
|
object_not_found_exception(obj)
|
|
@@ -98,18 +100,25 @@ module TestCentricity
|
|
|
98
100
|
else
|
|
99
101
|
obj.text
|
|
100
102
|
end
|
|
101
|
-
elsif Environ.
|
|
103
|
+
elsif Environ.is_ios?
|
|
102
104
|
case obj.tag_name
|
|
103
105
|
when 'XCUIElementTypeNavigationBar'
|
|
104
|
-
obj.attribute(
|
|
106
|
+
obj.attribute(:name)
|
|
105
107
|
else
|
|
106
|
-
obj.attribute(
|
|
108
|
+
obj.attribute(:label)
|
|
107
109
|
end
|
|
108
110
|
else
|
|
109
|
-
obj.text
|
|
111
|
+
caption = obj.text
|
|
112
|
+
if caption.blank? && obj.attribute(:class) == 'android.view.ViewGroup'
|
|
113
|
+
caption_obj = obj.find_element(:xpath, '//android.widget.TextView')
|
|
114
|
+
caption = caption_obj.text
|
|
115
|
+
end
|
|
116
|
+
caption
|
|
110
117
|
end
|
|
111
118
|
end
|
|
112
119
|
|
|
120
|
+
alias caption get_caption
|
|
121
|
+
|
|
113
122
|
def exists?
|
|
114
123
|
begin
|
|
115
124
|
element.displayed?
|
|
@@ -297,8 +306,8 @@ module TestCentricity
|
|
|
297
306
|
def scroll(direction)
|
|
298
307
|
obj = element
|
|
299
308
|
object_not_found_exception(obj)
|
|
300
|
-
if Environ.
|
|
301
|
-
execute_script('mobile: scroll', direction: direction.to_s, element: obj)
|
|
309
|
+
if Environ.is_ios?
|
|
310
|
+
$driver.execute_script('mobile: scroll', direction: direction.to_s, element: obj)
|
|
302
311
|
else
|
|
303
312
|
case direction
|
|
304
313
|
when :down
|
|
@@ -323,8 +332,8 @@ module TestCentricity
|
|
|
323
332
|
def swipe(direction)
|
|
324
333
|
obj = element
|
|
325
334
|
object_not_found_exception(obj)
|
|
326
|
-
if Environ.
|
|
327
|
-
execute_script('mobile: swipe', direction: direction.to_s, element: obj)
|
|
335
|
+
if Environ.is_ios?
|
|
336
|
+
$driver.execute_script('mobile: swipe', direction: direction.to_s, element: obj)
|
|
328
337
|
else
|
|
329
338
|
actions = Appium::TouchAction.new
|
|
330
339
|
actions.scroll(element: obj).perform
|
|
@@ -8,7 +8,7 @@ module TestCentricity
|
|
|
8
8
|
def checked?
|
|
9
9
|
obj = element
|
|
10
10
|
object_not_found_exception(obj)
|
|
11
|
-
obj.
|
|
11
|
+
obj.selected?
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
# Set the check state of a checkbox object.
|
|
@@ -33,9 +33,9 @@ module TestCentricity
|
|
|
33
33
|
obj = element
|
|
34
34
|
object_not_found_exception(obj)
|
|
35
35
|
if state
|
|
36
|
-
obj.click unless obj.
|
|
36
|
+
obj.click unless obj.selected?
|
|
37
37
|
else
|
|
38
|
-
obj.click if obj.
|
|
38
|
+
obj.click if obj.selected?
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -1,52 +1,44 @@
|
|
|
1
1
|
module TestCentricity
|
|
2
|
-
class EnvironData < TestCentricity::ExcelDataSource
|
|
3
|
-
attr_accessor :current
|
|
4
|
-
|
|
5
|
-
WKS_ENVIRONS ||= 'Environments'
|
|
6
|
-
|
|
7
|
-
def find_environ(environ_name, source_type = :excel)
|
|
8
|
-
case source_type
|
|
9
|
-
when :excel
|
|
10
|
-
data = ExcelData.read_row_data(XL_PRIMARY_DATA_FILE, WKS_ENVIRONS, environ_name)
|
|
11
|
-
when :yaml
|
|
12
|
-
data = read_yaml_node_data('environments.yml', environ_name)
|
|
13
|
-
when :json
|
|
14
|
-
data = read_json_node_data('environments.json', environ_name)
|
|
15
|
-
end
|
|
16
|
-
@current = Environ.new(data)
|
|
17
|
-
Environ.current = @current
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
|
|
22
2
|
class Environ < TestCentricity::DataObject
|
|
23
3
|
@session_id = Time.now.strftime('%d%H%M%S%L')
|
|
24
4
|
@session_time_stamp = Time.now.strftime('%Y%m%d%H%M%S')
|
|
25
|
-
@session_code
|
|
26
5
|
@test_environment = ENV['TEST_ENVIRONMENT']
|
|
6
|
+
@a11y_standard = ENV['ACCESSIBILITY_STANDARD'] || 'best-practice'
|
|
7
|
+
@locale = ENV['LOCALE'] || 'en'
|
|
8
|
+
@language = ENV['LANGUAGE'] || 'English'
|
|
27
9
|
@screen_shots = []
|
|
28
10
|
|
|
29
11
|
attr_accessor :test_environment
|
|
12
|
+
attr_accessor :app_host
|
|
30
13
|
attr_accessor :browser
|
|
31
14
|
attr_accessor :browser_size
|
|
15
|
+
attr_accessor :headless
|
|
32
16
|
attr_accessor :session_state
|
|
17
|
+
attr_accessor :session_code
|
|
33
18
|
attr_accessor :os
|
|
34
19
|
attr_accessor :device
|
|
35
20
|
attr_accessor :device_name
|
|
36
21
|
attr_accessor :device_type
|
|
37
22
|
attr_accessor :device_os
|
|
23
|
+
attr_accessor :device_os_version
|
|
38
24
|
attr_accessor :device_orientation
|
|
39
25
|
attr_accessor :screen_size
|
|
40
26
|
attr_accessor :platform
|
|
41
27
|
attr_accessor :driver
|
|
28
|
+
attr_accessor :grid
|
|
42
29
|
attr_accessor :tunneling
|
|
30
|
+
attr_accessor :locale
|
|
31
|
+
attr_accessor :language
|
|
32
|
+
|
|
33
|
+
attr_accessor :parallel
|
|
34
|
+
attr_accessor :process_num
|
|
43
35
|
|
|
44
36
|
attr_accessor :signed_in
|
|
45
37
|
attr_accessor :portal_status
|
|
46
38
|
attr_accessor :portal_context
|
|
47
39
|
attr_accessor :external_page
|
|
48
40
|
|
|
49
|
-
attr_accessor :
|
|
41
|
+
attr_accessor :a11y_standard
|
|
50
42
|
|
|
51
43
|
attr_accessor :protocol
|
|
52
44
|
attr_accessor :hostname
|
|
@@ -54,33 +46,60 @@ module TestCentricity
|
|
|
54
46
|
attr_accessor :user_id
|
|
55
47
|
attr_accessor :password
|
|
56
48
|
attr_accessor :append
|
|
49
|
+
attr_accessor :app_id
|
|
50
|
+
attr_accessor :api_key
|
|
57
51
|
attr_accessor :option1
|
|
58
52
|
attr_accessor :option2
|
|
53
|
+
attr_accessor :option3
|
|
54
|
+
attr_accessor :option4
|
|
59
55
|
attr_accessor :dns
|
|
60
56
|
attr_accessor :db_username
|
|
61
57
|
attr_accessor :db_password
|
|
62
58
|
attr_accessor :ios_app_path
|
|
63
59
|
attr_accessor :ios_ipa_path
|
|
64
60
|
attr_accessor :android_apk_path
|
|
61
|
+
attr_accessor :default_max_wait_time
|
|
62
|
+
attr_accessor :deep_link_prefix
|
|
63
|
+
attr_accessor :ios_bundle_id
|
|
64
|
+
attr_accessor :android_app_id
|
|
65
65
|
|
|
66
66
|
def initialize(data)
|
|
67
|
-
@protocol
|
|
68
|
-
@hostname
|
|
69
|
-
@base_url
|
|
70
|
-
@user_id
|
|
71
|
-
@password
|
|
72
|
-
@append
|
|
73
|
-
@
|
|
74
|
-
@
|
|
75
|
-
@
|
|
76
|
-
@
|
|
77
|
-
@
|
|
78
|
-
@
|
|
79
|
-
@
|
|
67
|
+
@protocol = data['PROTOCOL']
|
|
68
|
+
@hostname = data['HOST_NAME']
|
|
69
|
+
@base_url = data['BASE_URL']
|
|
70
|
+
@user_id = data['USER_ID']
|
|
71
|
+
@password = data['PASSWORD']
|
|
72
|
+
@append = data['APPEND']
|
|
73
|
+
@app_id = data['APP_ID']
|
|
74
|
+
@api_key = data['API_KEY']
|
|
75
|
+
@option1 = data['OPTIONAL_1']
|
|
76
|
+
@option2 = data['OPTIONAL_2']
|
|
77
|
+
@option3 = data['OPTIONAL_3']
|
|
78
|
+
@option4 = data['OPTIONAL_4']
|
|
79
|
+
@dns = data['DNS']
|
|
80
|
+
@db_username = data['DB_USERNAME']
|
|
81
|
+
@db_password = data['DB_PASSWORD']
|
|
82
|
+
@ios_app_path = data['IOS_APP_PATH']
|
|
83
|
+
@ios_ipa_path = data['IOS_IPA_PATH']
|
|
80
84
|
@android_apk_path = data['ANDROID_APK_PATH']
|
|
85
|
+
@deep_link_prefix = data['DEEP_LINK_PREFIX']
|
|
86
|
+
@ios_bundle_id = data['IOS_BUNDLE_ID']
|
|
87
|
+
@android_app_id = data['ANDROID_APP_ID']
|
|
88
|
+
|
|
89
|
+
url = @hostname.blank? ? "#{@base_url}#{@append}" : "#{@hostname}/#{@base_url}#{@append}"
|
|
90
|
+
@app_host = if @user_id.blank? || @password.blank?
|
|
91
|
+
"#{@protocol}://#{url}"
|
|
92
|
+
else
|
|
93
|
+
"#{@protocol}://#{@user_id}:#{@password}@#{url}"
|
|
94
|
+
end
|
|
95
|
+
|
|
81
96
|
super
|
|
82
97
|
end
|
|
83
98
|
|
|
99
|
+
def self.app_host
|
|
100
|
+
@app_host
|
|
101
|
+
end
|
|
102
|
+
|
|
84
103
|
def self.session_code
|
|
85
104
|
if @session_code.nil?
|
|
86
105
|
characters = ('a'..'z').to_a
|
|
@@ -97,6 +116,22 @@ module TestCentricity
|
|
|
97
116
|
@session_time_stamp
|
|
98
117
|
end
|
|
99
118
|
|
|
119
|
+
def self.parallel=(state)
|
|
120
|
+
@parallel = state
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def self.parallel
|
|
124
|
+
@parallel
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def self.process_num=(num)
|
|
128
|
+
@process_num = num
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def self.process_num
|
|
132
|
+
@process_num
|
|
133
|
+
end
|
|
134
|
+
|
|
100
135
|
def self.test_environment
|
|
101
136
|
if @test_environment.blank?
|
|
102
137
|
nil
|
|
@@ -131,12 +166,12 @@ module TestCentricity
|
|
|
131
166
|
@browser_size
|
|
132
167
|
end
|
|
133
168
|
|
|
134
|
-
def self.
|
|
135
|
-
@
|
|
169
|
+
def self.headless=(state)
|
|
170
|
+
@headless = state
|
|
136
171
|
end
|
|
137
172
|
|
|
138
|
-
def self.
|
|
139
|
-
@
|
|
173
|
+
def self.headless
|
|
174
|
+
@headless
|
|
140
175
|
end
|
|
141
176
|
|
|
142
177
|
def self.session_state=(session_state)
|
|
@@ -199,6 +234,14 @@ module TestCentricity
|
|
|
199
234
|
@device_os
|
|
200
235
|
end
|
|
201
236
|
|
|
237
|
+
def self.device_os_version=(version)
|
|
238
|
+
@device_os_version = version
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def self.device_os_version
|
|
242
|
+
@device_os_version
|
|
243
|
+
end
|
|
244
|
+
|
|
202
245
|
def self.is_ios?
|
|
203
246
|
@device_os == :ios
|
|
204
247
|
end
|
|
@@ -215,6 +258,14 @@ module TestCentricity
|
|
|
215
258
|
@device_orientation
|
|
216
259
|
end
|
|
217
260
|
|
|
261
|
+
def self.screen_size=(size)
|
|
262
|
+
@screen_size = size
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def self.screen_size
|
|
266
|
+
@screen_size
|
|
267
|
+
end
|
|
268
|
+
|
|
218
269
|
def self.driver=(type)
|
|
219
270
|
@driver = type
|
|
220
271
|
end
|
|
@@ -223,6 +274,14 @@ module TestCentricity
|
|
|
223
274
|
@driver
|
|
224
275
|
end
|
|
225
276
|
|
|
277
|
+
def self.grid=(type)
|
|
278
|
+
@grid = type
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def self.grid
|
|
282
|
+
@grid
|
|
283
|
+
end
|
|
284
|
+
|
|
226
285
|
def self.tunneling=(state)
|
|
227
286
|
@tunneling = state
|
|
228
287
|
end
|
|
@@ -231,10 +290,30 @@ module TestCentricity
|
|
|
231
290
|
@tunneling
|
|
232
291
|
end
|
|
233
292
|
|
|
293
|
+
def self.language=(language)
|
|
294
|
+
@language = language
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def self.language
|
|
298
|
+
@language
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def self.locale=(locale)
|
|
302
|
+
@locale = locale
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def self.locale
|
|
306
|
+
@locale
|
|
307
|
+
end
|
|
308
|
+
|
|
234
309
|
def self.platform=(platform)
|
|
235
310
|
@platform = platform
|
|
236
311
|
end
|
|
237
312
|
|
|
313
|
+
def self.platform
|
|
314
|
+
@platform
|
|
315
|
+
end
|
|
316
|
+
|
|
238
317
|
def self.is_mobile?
|
|
239
318
|
@platform == :mobile
|
|
240
319
|
end
|
|
@@ -286,5 +365,20 @@ module TestCentricity
|
|
|
286
365
|
def self.reset_contexts
|
|
287
366
|
@screen_shots = []
|
|
288
367
|
end
|
|
368
|
+
|
|
369
|
+
# :nocov:
|
|
370
|
+
def self.report_header
|
|
371
|
+
report_header = "\n<b><u>TEST ENVIRONMENT</u>:</b> #{ENV['TEST_ENVIRONMENT']}\n"\
|
|
372
|
+
" <b>Target:</b>\t #{Environ.browser.capitalize}\n"
|
|
373
|
+
report_header = "#{report_header} <b>Device:</b>\t #{Environ.device_name}\n" if Environ.device_name
|
|
374
|
+
report_header = "#{report_header} <b>Device OS:</b>\t #{Environ.device_os} #{Environ.device_os_version}\n" if Environ.device_os
|
|
375
|
+
report_header = "#{report_header} <b>Device type:</b>\t #{Environ.device_type}\n" if Environ.device_type
|
|
376
|
+
report_header = "#{report_header} <b>OS:</b>\t\t #{Environ.os}\n" if Environ.os
|
|
377
|
+
report_header = "#{report_header} <b>Locale:</b>\t #{Environ.locale}\n" if Environ.locale
|
|
378
|
+
report_header = "#{report_header} <b>Language:</b>\t #{Environ.language}\n" if Environ.language
|
|
379
|
+
report_header = "#{report_header} <b>Country:</b>\t #{ENV['COUNTRY']}\n" if ENV['COUNTRY']
|
|
380
|
+
"#{report_header}\n\n"
|
|
381
|
+
end
|
|
382
|
+
# :nocov:
|
|
289
383
|
end
|
|
290
384
|
end
|