testcentricity_web 4.0.2 → 4.1.1

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.
@@ -26,7 +26,7 @@ module TestCentricity
26
26
  puts 'Appium Server is starting'
27
27
  end
28
28
  # start new Appium Server
29
- @process = ChildProcess.build(*parameters)
29
+ @process = ChildProcess.build
30
30
  process.start
31
31
  # wait until confirmation that Appium Server is running
32
32
  wait = Selenium::WebDriver::Wait.new(timeout: 30)
@@ -5,6 +5,8 @@ module TestCentricity
5
5
  attr_accessor :environ_specific_data
6
6
 
7
7
  def self.find_environ(environ_name, source_type = :excel)
8
+ raise 'No environment specified' if environ_name.nil?
9
+
8
10
  data = case source_type
9
11
  when :excel
10
12
  ExcelData.read_row_data(XL_PRIMARY_DATA_FILE, 'Environments', environ_name)
@@ -13,11 +15,27 @@ module TestCentricity
13
15
  @generic_data ||= YAML.load_file(YML_PRIMARY_DATA_FILE)
14
16
  # read environment specific test data
15
17
  data_file = "#{PRIMARY_DATA_PATH}#{environ_name}_data.yml"
16
- @environ_specific_data ||= YAML.load_file(data_file)
18
+ @environ_specific_data = if File.exist?(data_file)
19
+ YAML.load_file(data_file)
20
+ else
21
+ {}
22
+ end
17
23
 
18
24
  read('Environments', environ_name)
19
25
  when :json
20
- read_json_node_data('environments.json', environ_name)
26
+ # read generic test data from data.json file
27
+ raw_data = File.read(JSON_PRIMARY_DATA_FILE)
28
+ @generic_data = JSON.parse(raw_data)
29
+ # read environment specific test data
30
+ data_file = "#{PRIMARY_DATA_PATH}#{environ_name}_data.json"
31
+ @environ_specific_data = if File.exist?(data_file)
32
+ raw_data = File.read(data_file)
33
+ JSON.parse(raw_data)
34
+ else
35
+ {}
36
+ end
37
+
38
+ read('Environments', environ_name)
21
39
  end
22
40
  @current = Environ.new(data)
23
41
  Environ.current = @current
@@ -47,6 +65,9 @@ module TestCentricity
47
65
  @session_id = Time.now.strftime('%d%H%M%S%L')
48
66
  @session_time_stamp = Time.now.strftime('%Y%m%d%H%M%S')
49
67
  @test_environment = ENV['TEST_ENVIRONMENT']
68
+ @a11y_standard = ENV['ACCESSIBILITY_STANDARD'] || 'best-practice'
69
+ @locale = ENV['LOCALE'] || 'en'
70
+ @language = ENV['LANGUAGE'] || 'English'
50
71
  @screen_shots = []
51
72
 
52
73
  attr_accessor :test_environment
@@ -111,9 +132,6 @@ module TestCentricity
111
132
  @dns = data['DNS']
112
133
  @db_username = data['DB_USERNAME']
113
134
  @db_password = data['DB_PASSWORD']
114
- @a11y_standard = ENV['ACCESSIBILITY_STANDARD'] || 'best-practice'
115
- @locale = ENV['LOCALE'] || 'en'
116
- @language = ENV['LANGUAGE'] || 'English'
117
135
 
118
136
  super
119
137
  end
@@ -365,13 +383,13 @@ module TestCentricity
365
383
  def self.report_header
366
384
  report_header = "\n<b><u>TEST ENVIRONMENT</u>:</b> #{ENV['TEST_ENVIRONMENT']}\n"\
367
385
  " <b>Browser:</b>\t #{Environ.browser.capitalize}\n"
368
- report_header = "#{report_header} <b>Device:</b>\t\t #{Environ.device_name}\n" if Environ.device_name
386
+ report_header = "#{report_header} <b>Device:</b>\t #{Environ.device_name}\n" if Environ.device_name
369
387
  report_header = "#{report_header} <b>Device OS:</b>\t #{Environ.device_os} #{Environ.device_os_version}\n" if Environ.device_os
370
388
  report_header = "#{report_header} <b>Device type:</b>\t #{Environ.device_type}\n" if Environ.device_type
371
- report_header = "#{report_header} <b>Driver:</b>\t\t #{Environ.driver}\n" if Environ.driver
389
+ report_header = "#{report_header} <b>Driver:</b>\t #{Environ.driver}\n" if Environ.driver
372
390
  report_header = "#{report_header} <b>Grid:</b>\t\t #{Environ.grid}\n" if Environ.grid
373
- report_header = "#{report_header} <b>OS:</b>\t\t\t #{Environ.os}\n" if Environ.os
374
- report_header = "#{report_header} <b>Locale:</b>\t\t #{Environ.locale}\n" if Environ.locale
391
+ report_header = "#{report_header} <b>OS:</b>\t\t #{Environ.os}\n" if Environ.os
392
+ report_header = "#{report_header} <b>Locale:</b>\t #{Environ.locale}\n" if Environ.locale
375
393
  report_header = "#{report_header} <b>Language:</b>\t #{Environ.language}\n" if Environ.language
376
394
  report_header = "#{report_header} <b>Country:</b>\t #{ENV['COUNTRY']}\n" if ENV['COUNTRY']
377
395
  report_header = "#{report_header} <b>WCAG Accessibility Standard:</b>\t #{ENV['ACCESSIBILITY_STANDARD']}\n" if ENV['ACCESSIBILITY_STANDARD']
@@ -116,8 +116,8 @@ module TestCentricity
116
116
  end
117
117
 
118
118
  def self.enqueue_screenshot
119
- timestamp = Time.now.strftime('%Y%m%d%H%M%S')
120
- filename = "Screenshot-#{timestamp}"
119
+ timestamp = Time.now.strftime('%Y%m%d%H%M%S%L')
120
+ filename = "Screenshot-#{timestamp}.png"
121
121
  path = File.join Dir.pwd, 'reports/screenshots/', filename
122
122
  # highlight the active UI element prior to taking a screenshot
123
123
  unless @active_ui_element.nil? || @mru_ui_element == @active_ui_element
@@ -126,14 +126,14 @@ module TestCentricity
126
126
  end
127
127
  # take screenshot
128
128
  if Environ.driver == :appium
129
- AppiumConnect.take_screenshot("#{path}.png")
129
+ AppiumConnect.take_screenshot(path)
130
130
  else
131
- Capybara.save_screenshot "#{path}.png"
131
+ Capybara.save_screenshot path
132
132
  end
133
133
  # unhighlight the active UI element
134
134
  @mru_ui_element.unhighlight unless @mru_ui_element.blank?
135
135
  # add screenshot to queue
136
- puts "Screenshot saved at #{path}.png"
136
+ puts "Screenshot saved at #{path}"
137
137
  screen_shot = {path: path, filename: filename}
138
138
  Environ.save_screen_shot(screen_shot)
139
139
  end
@@ -1,3 +1,3 @@
1
1
  module TestCentricityWeb
2
- VERSION = '4.0.2'
2
+ VERSION = '4.1.1'
3
3
  end
@@ -39,9 +39,9 @@ module TestCentricity
39
39
  #
40
40
  # @param element_hash [Hash] names of buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies buttons
41
41
  # @example
42
- # buttons new_account_button: 'button#new-account',
43
- # save_button: 'button#save',
44
- # cancel_button: 'button#cancel'
42
+ # buttons new_account_button: 'button#new-account',
43
+ # save_button: 'button#save',
44
+ # cancel_button: 'button#cancel'
45
45
  #
46
46
  def self.buttons(element_hash)
47
47
  element_hash.each(&method(:button))
@@ -63,11 +63,11 @@ module TestCentricity
63
63
  #
64
64
  # @param element_hash [Hash] names of text fields (as a symbol) and CSS selectors or XPath expressions that uniquely identifies text fields
65
65
  # @example
66
- # textfields name_field: 'input#Name',
67
- # title_field: 'input#Title',
68
- # phone_field: 'input#PhoneNumber',
69
- # fax_field: 'input#FaxNumber',
70
- # email_field: 'input#Email'
66
+ # textfields name_field: 'input#Name',
67
+ # title_field: 'input#Title',
68
+ # phone_field: 'input#PhoneNumber',
69
+ # fax_field: 'input#FaxNumber',
70
+ # email_field: 'input#Email'
71
71
  #
72
72
  def self.textfields(element_hash)
73
73
  element_hash.each(&method(:textfield))
@@ -100,23 +100,22 @@ module TestCentricity
100
100
  #
101
101
  # @param element_name [Symbol] name of checkbox object (as a symbol)
102
102
  # @param locator [String] CSS selector or XPath expression that uniquely identifies object
103
- # @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
104
103
  # @example
105
104
  # checkbox :remember_checkbox, "//input[@id='RememberUser']"
106
- # checkbox :accept_terms_checkbox, 'input#accept_terms_conditions', :accept_terms_label
105
+ # checkbox :accept_terms_checkbox, 'input#accept_terms_conditions'
107
106
  #
108
- def self.checkbox(element_name, locator, proxy = nil)
109
- class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CheckBox.new("#{element_name}", self, "#{locator}", :page, #{proxy});end))
107
+ def self.checkbox(element_name, locator)
108
+ define_page_element(element_name, TestCentricity::CheckBox, locator)
110
109
  end
111
110
 
112
111
  # Declare and instantiate a collection of checkboxes for this page object.
113
112
  #
114
113
  # @param element_hash [Hash] names of checkboxes (as a symbol) and CSS selectors or XPath expressions that uniquely identifies checkboxes
115
114
  # @example
116
- # checkboxes hazmat_certified_check: 'input#hazmatCertified',
117
- # epa_certified_check: 'input#epaCertified',
118
- # dhs_certified_check: 'input#homelandSecurityCertified',
119
- # carb_compliant_check: 'input#carbCompliant'
115
+ # checkboxes hazmat_certified_check: 'input#hazmatCertified',
116
+ # epa_certified_check: 'input#epaCertified',
117
+ # dhs_certified_check: 'input#homelandSecurityCertified',
118
+ # carb_compliant_check: 'input#carbCompliant'
120
119
  #
121
120
  def self.checkboxes(element_hash)
122
121
  element_hash.each(&method(:checkbox))
@@ -126,13 +125,12 @@ module TestCentricity
126
125
  #
127
126
  # @param element_name [Symbol] name of radio object (as a symbol)
128
127
  # @param locator [String] CSS selector or XPath expression that uniquely identifies object
129
- # @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
130
128
  # @example
131
129
  # radio :accept_terms_radio, "//input[@id='Accept_Terms']"
132
- # radio :decline_terms_radio, '#decline_terms_conditions', :decline_terms_label
130
+ # radio :decline_terms_radio, '#decline_terms_conditions'
133
131
  #
134
- def self.radio(element_name, locator, proxy = nil)
135
- class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Radio.new("#{element_name}", self, "#{locator}", :page, #{proxy});end))
132
+ def self.radio(element_name, locator)
133
+ define_page_element(element_name, TestCentricity::Radio, locator)
136
134
  end
137
135
 
138
136
  # Declare and instantiate a collection of radio buttons for this page object.
@@ -124,8 +124,8 @@ module TestCentricity
124
124
  # @param element_name [Symbol] name of UI object (as a symbol)
125
125
  # @param locator [String] CSS selector or XPath expression that uniquely identifies object
126
126
  # @example
127
- # element :undo_record_item, "//li[@rn='Undo Record']/a"
128
- # element :basket_header, 'div.basket_header'
127
+ # element :undo_record_item, "//li[@rn='Undo Record']/a"
128
+ # element :basket_header, 'div.basket_header'
129
129
  #
130
130
  def self.element(element_name, locator)
131
131
  define_element(element_name, TestCentricity::UIElement, locator)
@@ -159,9 +159,9 @@ module TestCentricity
159
159
  #
160
160
  # @param element_hash [Hash] names of buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies buttons
161
161
  # @example
162
- # buttons new_account_button: 'button#new-account',
163
- # save_button: 'button#save',
164
- # cancel_button: 'button#cancel'
162
+ # buttons new_account_button: 'button#new-account',
163
+ # save_button: 'button#save',
164
+ # cancel_button: 'button#cancel'
165
165
  #
166
166
  def self.buttons(element_hash)
167
167
  element_hash.each(&method(:button))
@@ -183,11 +183,11 @@ module TestCentricity
183
183
  #
184
184
  # @param element_hash [Hash] names of text fields (as a symbol) and CSS selectors or XPath expressions that uniquely identifies text fields
185
185
  # @example
186
- # textfields name_field: 'input#Name',
187
- # title_field: 'input#Title',
188
- # phone_field: 'input#PhoneNumber',
189
- # fax_field: 'input#FaxNumber',
190
- # email_field: 'input#Email'
186
+ # textfields name_field: 'input#Name',
187
+ # title_field: 'input#Title',
188
+ # phone_field: 'input#PhoneNumber',
189
+ # fax_field: 'input#FaxNumber',
190
+ # email_field: 'input#Email'
191
191
  #
192
192
  def self.textfields(element_hash)
193
193
  element_hash.each(&method(:textfield))
@@ -220,23 +220,22 @@ module TestCentricity
220
220
  #
221
221
  # @param element_name [Symbol] name of checkbox object (as a symbol)
222
222
  # @param locator [String] CSS selector or XPath expression that uniquely identifies object
223
- # @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
224
223
  # @example
225
224
  # checkbox :remember_checkbox, "//input[@id='RememberUser']"
226
- # checkbox :accept_terms_checkbox, 'input#accept_terms_conditions', :accept_terms_label
225
+ # checkbox :accept_terms_checkbox, 'input#accept_terms_conditions'
227
226
  #
228
- def self.checkbox(element_name, locator, proxy = nil)
229
- class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::CheckBox.new("#{element_name}", self, "#{locator}", :section, #{proxy});end))
227
+ def self.checkbox(element_name, locator)
228
+ define_element(element_name, TestCentricity::CheckBox, locator)
230
229
  end
231
230
 
232
231
  # Declare and instantiate a collection of checkboxes for this page section.
233
232
  #
234
233
  # @param element_hash [Hash] names of checkboxes (as a symbol) and CSS selectors or XPath expressions that uniquely identifies checkboxes
235
234
  # @example
236
- # checkboxes hazmat_certified_check: 'input#hazmatCertified',
237
- # epa_certified_check: 'input#epaCertified',
238
- # dhs_certified_check: 'input#homelandSecurityCertified',
239
- # carb_compliant_check: 'input#carbCompliant'
235
+ # checkboxes hazmat_certified_check: 'input#hazmatCertified',
236
+ # epa_certified_check: 'input#epaCertified',
237
+ # dhs_certified_check: 'input#homelandSecurityCertified',
238
+ # carb_compliant_check: 'input#carbCompliant'
240
239
  #
241
240
  def self.checkboxes(element_hash)
242
241
  element_hash.each(&method(:checkbox))
@@ -246,13 +245,12 @@ module TestCentricity
246
245
  #
247
246
  # @param element_name [Symbol] name of radio object (as a symbol)
248
247
  # @param locator [String] CSS selector or XPath expression that uniquely identifies object
249
- # @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
250
248
  # @example
251
249
  # radio :accept_terms_radio, "//input[@id='Accept_Terms']"
252
- # radio :decline_terms_radio, 'input#decline_terms_conditions', :decline_terms_label
250
+ # radio :decline_terms_radio, 'input#decline_terms_conditions'
253
251
  #
254
252
  def self.radio(element_name, locator, proxy = nil)
255
- class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::Radio.new("#{element_name}", self, "#{locator}", :section, #{proxy});end))
253
+ define_element(element_name, TestCentricity::Radio, locator)
256
254
  end
257
255
 
258
256
  # Declare and instantiate a collection of radio buttons for this page section.