itms_automation 1.4 → 1.5

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.
@@ -1,6 +1,7 @@
1
- require 'active_record'
1
+ # require "active_record"
2
2
 
3
- def create_database_connection config
3
+ def create_database_connection(config)
4
+ start = Time.now
4
5
  begin
5
6
  if config.class === "String"
6
7
  config = JSON.parse config
@@ -17,81 +18,108 @@ def create_database_connection config
17
18
  @connection = ActiveRecord::Base.establish_connection(config)
18
19
  ActiveRecord::Base.connection.active?
19
20
 
20
- if !@connection.connected?
21
+ if @connection.connected?
22
+ print_log("passed", start, __method__, config)
23
+ else
24
+ print_log("failed", start, __method__, config)
21
25
  raise "Error: Can't connect to database"
22
26
  end
23
27
  rescue JSON::ParserError
24
- raise "Create database connection error: Please check your connection configuration"
28
+ print_log("failed", start, __method__, config)
29
+ raise "Error: Please check your connection configuration"
25
30
  rescue Exception => e
26
- raise "Create database connection error: #{e.message}"
31
+ print_log("failed", start, __method__, config)
32
+ raise "Error: #{e.message}"
27
33
  end
28
34
  end
29
35
 
30
36
  def close_database_connection
37
+ start = Time.now
31
38
  begin
32
39
  @connection.disconnect!
40
+ print_log("passed", start, __method__)
33
41
  rescue Exception => e
34
- raise "Close database connection error: #{e.message}"
42
+ print_log("failed", start, __method__)
43
+ raise "Error: #{e.message}"
35
44
  end
36
45
  end
37
46
 
38
- def execute_query query
47
+ def execute_query(query)
48
+ start = Time.now
39
49
  begin
40
50
  if @connection.connected?
41
51
  @result = @connection.connection.exec_query(query).to_a
52
+ print_log("passed", start, __method__, query)
42
53
  else
54
+ print_log("failed", start, __method__, query)
43
55
  raise "Error: Create connection to database first!"
44
56
  end
45
57
  rescue Exception => e
46
- raise "Execute query error: #{e.message}"
58
+ print_log("failed", start, __method__, query)
59
+ raise "Error: #{e.message}"
47
60
  end
48
61
  end
49
62
 
50
63
  def print_sql_result
64
+ start = Time.now
51
65
  if @result.present?
52
- p "SQL result:"
53
- p @result.to_json
66
+ puts "SQL result:"
67
+ puts @result.to_json
54
68
  else
55
- p "WARNING: No result from SQL statement"
69
+ puts "WARNING: No result from SQL statement"
56
70
  end
57
71
  end
58
72
 
59
- def verify_sql_result_contain expected_string
73
+ def verify_sql_result_contain(expected_string)
74
+ start = Time.now
60
75
  begin
61
76
  @expected = JSON.parse(expected_string)
62
77
  is_contain = false
63
78
  if @expected.kind_of?(Array) && @expected.length > @result.length
64
- raise "Expected: #{@expected}\nGot: #{@result}\nQuery result not includes your expected"
79
+ print_log("failed", start, __method__, expected_string)
80
+ raise "Error: Expected: #{@expected}\nGot: #{@result}\nQuery result not includes your expected"
65
81
  end
66
82
  @result.each do |row|
67
83
  is_contain = do_assertion_json(@expected, row)
68
84
  break if !@expected.kind_of?(Array) && is_contain == true
69
85
  end
70
- unless is_contain
71
- raise "Expected: #{@expected}\nGot: #{@result}\nQuery result not includes your expected"
86
+ if is_contain
87
+ print_log("passed", start, __method__, expected_string)
88
+ else
89
+ print_log("failed", start, __method__, expected_string)
90
+ raise "Error: Expected: #{@expected}\nGot: #{@result}\nQuery result not includes your expected"
72
91
  end
73
92
  rescue JSON::ParserError
74
- raise "Verify SQL result contain error: Please check your expected"
93
+ print_log("failed", start, __method__, expected_string)
94
+ raise "Error: Please check your expected"
75
95
  rescue Exception => e
76
- raise "Verify SQL result contain error: #{e.message}"
96
+ print_log("failed", start, __method__, expected_string)
97
+ raise "Error: #{e.message}"
77
98
  end
78
99
  end
79
100
 
80
- def verify_sql_result_equal expected_string
101
+ def verify_sql_result_equal(expected_string)
102
+ start = Time.now
81
103
  begin
82
104
  @expected = JSON.parse(expected_string)
83
105
  if !@expected.kind_of?(Array) || @expected.length != @result.length
84
- raise "Expected: #{@expected}\nGot: #{@result}\nQuery result not equal with your expected"
106
+ print_log("failed", start, __method__, expected_string)
107
+ raise "Error: Expected: #{@expected}\nGot: #{@result}\nQuery result not equal with your expected"
85
108
  end
86
109
  @result.each_with_index do |row, index|
87
110
  is_contain = row.to_s == @expected[index].to_s
88
- unless is_contain
89
- raise "Expected: #{@expected}\nGot: #{@result}\nQuery result not equal with your expected"
111
+ if is_contain
112
+ print_log("passed", start, __method__, expected_string)
113
+ else
114
+ print_log("failed", start, __method__, expected_string)
115
+ raise "Error: Expected: #{@expected}\nGot: #{@result}\nQuery result not equal with your expected"
90
116
  end
91
117
  end
92
118
  rescue JSON::ParserError
93
- raise "Verify SQL result equal error: Please check your expected"
119
+ print_log("failed", start, __method__, expected_string)
120
+ raise "Error: Please check your expected"
94
121
  rescue Exception => e
95
- raise "Verify SQL result equal error: #{e.message}"
122
+ print_log("failed", start, __method__, expected_string)
123
+ raise "Error: #{e.message}"
96
124
  end
97
125
  end
@@ -1,3 +1,3 @@
1
1
  module ItmsAutomation
2
- VERSION = "1.4"
2
+ VERSION = "1.5"
3
3
  end
@@ -1,217 +1,284 @@
1
- require 'net/https'
2
- require 'rspec'
1
+ require "net/https"
2
+ require "rspec"
3
3
 
4
4
  def execute_openbrowser(url_site)
5
+ start = Time.now
5
6
  begin
6
7
  if url_site == ""
7
- raise "❌ Error: Null web page URL."
8
+ print_log("failed", start, __method__, url_site)
9
+ raise "Error: Null web page URL."
8
10
  end
9
11
  visit(url_site)
12
+ print_log("passed", start, __method__, url_site)
10
13
  rescue StandardError => e
11
- raise "❌ Error: #{e.message}"
14
+ print_log("failed", start, __method__, url_site)
15
+ raise "Error: #{e.message}"
12
16
  end
13
17
  end
14
18
 
15
19
  def execute_click(element)
20
+ start = Time.now
16
21
  foundElement = find_object(element)
17
22
  if foundElement != nil
18
23
  begin
19
24
  foundElement.click
25
+ print_log("passed", start, __method__, element)
20
26
  rescue StandardError => e
21
- raise "❌ Error: #{e.message}"
27
+ print_log("failed", start, __method__, element)
28
+ raise "Error: #{e.message}"
22
29
  end
23
30
  else
24
- raise "❌ Error >> Not found object: #{element}"
31
+ print_log("failed", start, __method__, element)
32
+ raise "Error: Not found object #{element}"
25
33
  end
26
34
  end
27
35
 
28
36
  def execute_click_offset(element, x, y)
37
+ start = Time.now
29
38
  foundElement = find_object(element)
30
39
  if foundElement != nil
31
40
  begin
32
- page.driver.browser.mouse.move_to(foundElement.native,x.to_i,y.to_i)
41
+ page.driver.browser.mouse.move_to(foundElement.native, x.to_i, y.to_i)
33
42
  page.driver.browser.mouse.click()
43
+ print_log("passed", start, __method__, element, x, y)
34
44
  rescue Exception => e
35
- raise "❌ Error: #{e.message}"
45
+ print_log("failed", start, __method__, element, x, y)
46
+ raise "Error: #{e.message}"
36
47
  end
37
48
  else
38
- raise "❌ Error: Not found object: #{element}"
49
+ print_log("failed", start, __method__, element, x, y)
50
+ raise "Error: Not found object: #{element}"
39
51
  end
40
52
  end
41
53
 
42
54
  def double_click(element)
55
+ start = Time.now
43
56
  foundElement = find_object(element)
44
57
  if foundElement != nil
45
58
  begin
46
59
  foundElement.double_click
60
+ print_log("passed", start, __method__, element)
47
61
  rescue StandardError => e
48
- raise "❌ Error: #{e}"
62
+ print_log("failed", start, __method__, element)
63
+ raise "Error: #{e.message}"
49
64
  end
50
65
  else
51
- raise "❌ Error: Not found object: #{element}"
66
+ print_log("failed", start, __method__, element)
67
+ raise "Error: Not found object: #{element}"
52
68
  end
53
69
  end
54
70
 
55
71
  def execute_settext(element, text)
72
+ start = Time.now
56
73
  foundElement = find_object(element)
57
74
  if foundElement != nil
58
75
  begin
59
76
  foundElement.set(text)
77
+ print_log("passed", start, __method__, element, text)
60
78
  rescue StandardError => e
61
- raise "❌ Error: #{e}"
79
+ print_log("failed", start, __method__, element, text)
80
+ raise "Error: #{e.message}"
62
81
  end
63
82
  else
64
- raise "❌ Error: Not found object: #{element}"
83
+ print_log("failed", start, __method__, element, text)
84
+ raise "Error: Not found object: #{element}"
65
85
  end
66
86
  end
67
87
 
68
88
  def maximize_browser
89
+ start = Time.now
69
90
  begin
70
91
  page.driver.browser.manage.window.maximize
92
+ print_log("passed", start, __method__)
71
93
  rescue StandardError => e
72
- raise "❌ Error: #{e}"
94
+ print_log("failed", start, __method__)
95
+ raise "Error: #{e.message}"
73
96
  end
74
97
  end
75
98
 
76
99
  def switch_to_window_by_title(window_title)
100
+ start = Time.now
77
101
  $previous_window = page.driver.browser.window_handle
78
102
  @window_found = false
79
103
  page.driver.browser.window_handles.each { |handle|
80
104
  page.driver.browser.switch_to.window handle
81
105
  if page.title == window_title
82
106
  @window_found = true
107
+ print_log("passed", start, __method__, window_title)
83
108
  break
84
109
  end
85
110
  }
86
111
  if @window_found == false
87
- raise "Window having title \"#{window_title}\" not found"
112
+ print_log("failed", start, __method__, window_title)
113
+ raise "Error: Window having title \"#{window_title}\" not found"
88
114
  end
89
115
  end
90
116
 
91
117
  def scroll_to_end_page
118
+ start = Time.now
92
119
  begin
93
- page.driver.execute_script('window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));')
120
+ page.driver.execute_script("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));")
121
+ print_log("passed", start, __method__)
94
122
  rescue StandardError => e
95
- raise "❌ Error: #{e}"
123
+ print_log("failed", start, __method__)
124
+ raise "Error: #{e.message}"
96
125
  end
97
126
  end
98
127
 
99
128
  def scroll_to_top_page
129
+ start = Time.now
100
130
  begin
101
- page.driver.execute_script('window.scrollTo(Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight),0);')
131
+ page.driver.execute_script("window.scrollTo(Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight),0);")
132
+ print_log("passed", start, __method__)
102
133
  rescue StandardError => e
103
- raise "❌ Error: #{e}"
134
+ print_log("failed", start, __method__)
135
+ raise "Error: #{e.message}"
104
136
  end
105
137
  end
106
138
 
107
139
  def verify_title(expected_title)
140
+ start = Time.now
108
141
  begin
109
142
  page_title = page.title
110
- puts "Actual Page Title : #{page_title}, Expected Page Title : #{expected_title}"
111
143
  expect(page_title).to eq expected_title
144
+ print_log("passed", start, __method__, expected_title)
145
+ puts "Actual Page Title : #{page_title}, Expected Page Title : #{expected_title}"
112
146
  rescue StandardError => e
113
- raise "❌ Error: #{e}"
147
+ print_log("failed", start, __method__, expected_title)
148
+ raise "Error: #{e.message}"
114
149
  end
115
150
  end
116
151
 
117
152
  def verify_alert_text(text)
153
+ start = Time.now
118
154
  begin
119
155
  alert = page.driver.browser.switch_to.alert.text
120
- puts "Actual Page alert text : #{alert}, Expected value : #{text}"
121
156
  expect(alert).to eq text
157
+ print_log("passed", start, __method__, text)
158
+ puts "Actual Page alert text : #{alert}, Expected value : #{text}"
122
159
  rescue StandardError => e
123
- raise "❌ Error: #{e}"
160
+ print_log("failed", start, __method__, text)
161
+ raise "Error: #{e.message}"
124
162
  end
125
163
  end
126
164
 
127
165
  def accept_alert
166
+ start = Time.now
128
167
  begin
129
168
  page.driver.browser.switch_to.alert.accept
169
+ print_log("passed", start, __method__)
130
170
  rescue Exception => e
131
- raise "❌ ERROR: #{e}"
171
+ print_log("failed", start, __method__)
172
+ raise "Error: #{e.message}"
132
173
  end
133
174
  end
134
175
 
135
176
  def back
177
+ start = Time.now
136
178
  begin
137
- page.execute_script('window.history.back()')
179
+ page.execute_script("window.history.back()")
180
+ print_log("passed", start, __method__)
138
181
  rescue Exception => e
139
- raise "❌ ERROR: #{e}"
182
+ print_log("failed", start, __method__)
183
+ raise "Error: #{e.message}"
140
184
  end
141
185
  end
142
186
 
143
187
  def refresh
188
+ start = Time.now
144
189
  begin
145
- page.execute_script('window.location.reload()')
190
+ page.execute_script("window.location.reload()")
191
+ print_log("passed", start, __method__)
146
192
  rescue Exception => e
147
- raise "❌ ERROR: #{e}"
193
+ print_log("failed", start, __method__)
194
+ raise "Error: #{e.message}"
148
195
  end
149
196
  end
150
197
 
151
198
  def clear_text(element)
199
+ start = Time.now
152
200
  foundElement = find_object(element)
153
201
  if foundElement != nil?
154
202
  begin
155
203
  foundElement.native.clear
204
+ print_log("passed", start, __method__, element)
156
205
  rescue Exception => e
157
- raise "❌ ERROR: #{e}"
206
+ print_log("failed", start, __method__, element)
207
+ raise "Error: #{e.message}"
158
208
  end
159
209
  else
160
- raise "❌ Error: Not found object: #{element}"
210
+ print_log("failed", start, __method__, element)
211
+ raise "Error: Not found object: #{element}"
161
212
  end
162
213
  end
163
214
 
164
215
  def execute_javascript(script)
216
+ start = Time.now
165
217
  begin
166
218
  page.execute_script(script)
219
+ print_log("passed", start, __method__, script)
167
220
  rescue Exception => e
168
- puts "❌ Error: Not found object: #{element}"
221
+ print_log("failed", start, __method__, script)
222
+ raise "Error: Not found object: #{element}"
169
223
  end
170
224
  end
171
225
 
172
226
  def execute_select(element, option)
227
+ start = Time.now
173
228
  foundElement = find_object(element)
174
229
  if foundElement != nil
175
230
  begin
176
- foundElement.find('option', text: option).select_option
231
+ foundElement.find("option", text: option).select_option
232
+ print_log("passed", start, __method__, element, option)
177
233
  rescue Exception => e
178
- raise "❌ ERROR: #{e}"
234
+ print_log("failed", start, __method__, element, option)
235
+ raise "Error: #{e.message}"
179
236
  end
180
237
  else
181
- raise "❌ Error: Not found object: #{element}"
238
+ print_log("failed", start, __method__, element, option)
239
+ raise "Error: Not found object: #{element}"
182
240
  end
183
241
  end
184
242
 
185
243
  def execute_mouse_over(element)
244
+ start = Time.now
186
245
  foundElement = find_object(element)
187
246
  if foundElement != nil
188
247
  begin
189
248
  page.driver.browser.action.move_to(foundElement.native, element).click.perform
249
+ print_log("passed", start, __method__, element)
190
250
  sleep(1)
191
251
  rescue StandardError => e
192
- raise "❌ Error: #{e}"
252
+ print_log("failed", start, __method__, element)
253
+ raise "Error: #{e.message}"
193
254
  end
194
255
  else
195
- raise "❌ Error: Not found object: #{element}"
256
+ print_log("failed", start, __method__, element)
257
+ raise "Error: Not found object: #{element}"
196
258
  end
197
259
  end
198
260
 
199
261
  def remove_element_attribute(element, attr)
262
+ start = Time.now
200
263
  foundElement = find_object(element)
201
264
  if foundElement != nil
202
265
  begin
203
266
  page.driver.browser.execute_script("arguments[0].removeAttribute('#{attr}');", foundElement.native)
267
+ print_log("passed", start, __method__, element, attr)
204
268
  sleep(1)
205
269
  rescue StandardError => e
206
- raise "❌ Error: #{e}"
270
+ print_log("failed", start, __method__, element, attr)
271
+ raise "Error: #{e.message}"
207
272
  end
208
273
  else
209
- raise "❌ Error: Not found object: #{element}"
274
+ print_log("failed", start, __method__, element, attr)
275
+ raise "Error: Not found object: #{element}"
210
276
  end
211
277
  end
212
278
 
213
279
  # Set state
214
280
  def execute_setstate(element, state)
281
+ start = Time.now
215
282
  foundElement = find_object(element)
216
283
  if foundElement != nil
217
284
  if state
@@ -219,164 +286,189 @@ def execute_setstate(element, state)
219
286
  else
220
287
  foundElement.unselect_option
221
288
  end
289
+ print_log("passed", start, __method__, element, state)
222
290
  else
223
- raise "❌ Error: Not found object: #{element}"
291
+ print_log("failed", start, __method__, element, state)
292
+ raise "Error: Not found object: #{element}"
224
293
  end
225
294
  end
226
295
 
227
296
  def close_windows
297
+ start = Time.now
228
298
  begin
229
299
  page.execute_script "window.close();"
300
+ print_log("passed", start, __method__)
230
301
  rescue StandardError => e
231
- raise "❌ Error: #{e}"
302
+ print_log("failed", start, __method__)
303
+ raise "Error: #{e.message}"
232
304
  end
233
305
  end
234
306
 
235
307
  def resize_window_screen(x, y)
308
+ start = Time.now
236
309
  begin
237
310
  page.driver.browser.manage.window.resize_to(x, y)
238
- puts page.driver.browser.manage.window.size
311
+ print_log("passed", start, __method__, x, y)
239
312
  rescue StandardError => e
240
- raise "❌ Error: #{e}"
313
+ print_log("failed", start, __method__, x, y)
314
+ raise "Error: #{e.message}"
241
315
  end
242
316
  end
243
317
 
244
318
  def switch_to_iframe(element)
245
- begin
246
- foundElement = find_object(element)
247
- page.driver.switch_to_frame(foundElement)
248
- rescue Exception => e
249
- raise "❌ Error: #{e}"
319
+ start = Time.now
320
+ foundElement = find_object(element)
321
+ if foundElement != nil
322
+ begin
323
+ page.driver.switch_to_frame(foundElement)
324
+ print_log("passed", start, __method__, element)
325
+ rescue Exception => e
326
+ print_log("failed", start, __method__, element)
327
+ raise "Error: #{e.message}"
328
+ end
329
+ else
330
+ print_log("failed", start, __method__, element)
331
+ raise "Error: Not found object #{element}"
250
332
  end
251
333
  end
252
334
 
253
335
  def switch_out_frame
336
+ start = Time.now
254
337
  begin
255
338
  browser = page.driver.browser
256
339
  browser.switch_to.default_content
340
+ print_log("passed", start, __method__)
257
341
  rescue Exception => e
258
- raise "❌ Error: #{e}"
342
+ print_log("failed", start, __method__)
343
+ raise "Error: #{e.message}"
259
344
  end
260
345
  end
261
346
 
262
347
  def get_computed_style(element, style)
348
+ start = Time.now
263
349
  foundElement = get_object_value(element)
264
350
  computedStyle = ""
265
351
  if foundElement != nil
266
352
  computedStyle = page.evaluate_script("window.getComputedStyle(document.querySelector('#{foundElement}')).#{style}")
267
353
  else
268
- raise "❌ Error: Not found object: #{element}"
354
+ print_log("failed", start, __method__, element, style)
355
+ raise "Error: Not found object: #{element}"
269
356
  end
270
- puts "\nActual object style value is: #{computedStyle}"
357
+ print_log("passed", start, __method__, element, style)
358
+ puts "Actual object style value is: #{computedStyle}"
271
359
  computedStyle
272
360
  end
273
361
 
274
- def put_log str
275
- p str if $print_log == true
276
- end
277
-
278
- def get_object_value(str_obj)
279
- string_object = str_obj.gsub(/"/, "'")
280
- hash_object = $OBJECT[string_object]
281
- if hash_object == nil
282
- raise ">>> OBJECT: #{str_obj} NAME MAYBE NOT FOUND!!!"
283
- end
284
- if hash_object.keys[0].to_s.upcase != "CSS_SELECTOR"
285
- raise ">>> OBJECT: #{str_obj} should be formatted as Css Selector."
286
- end
287
- hash_object[hash_object.keys[0]]
288
- end
289
-
290
362
  def get_element_text(element)
363
+ start = Time.now
291
364
  foundElement = find_object(element)
292
365
  if foundElement != nil
293
366
  begin
294
367
  result = foundElement.text()
368
+ print_log("passed", start, __method__, element, style)
295
369
  puts "Text of #{element}: #{result}"
296
370
  rescue StandardError => e
297
- raise "❌ Error: #{e}"
371
+ print_log("failed", start, __method__, element)
372
+ raise "Error: #{e.message}"
298
373
  end
299
374
  else
300
- raise "❌ Error: Not found object: #{element}"
375
+ print_log("failed", start, __method__, element)
376
+ raise "Error: Not found object: #{element}"
301
377
  end
302
378
  end
303
379
 
304
- def get_element_attribute(element,value)
380
+ def get_element_attribute(element, value)
381
+ start = Time.now
305
382
  foundElement = find_object(element)
306
383
  if foundElement != nil
307
384
  begin
308
385
  result = foundElement.value()
386
+ print_log("passed", start, __method__, element, value)
309
387
  puts "Attribute of #{element}: #{result}"
310
388
  rescue StandardError => e
311
- raise "❌ Error: #{e}"
389
+ print_log("failed", start, __method__, element, value)
390
+ raise "Error: #{e.message}"
312
391
  end
313
392
  else
314
- raise "❌ Error: Not found object: #{element}"
393
+ print_log("failed", start, __method__, element, value)
394
+ raise "Error: Not found object: #{element}"
315
395
  end
316
396
  end
317
397
 
318
- def verify_element_text(element,value)
398
+ def verify_element_text(element, value)
399
+ start = Time.now
319
400
  foundElement = find_object(element)
320
401
  if foundElement != nil
321
402
  begin
322
403
  actual_value = foundElement.text()
323
- put_log "Actual result is: '#{actual_value}' -- Expected result is: '#{value}'"
324
404
  expect(actual_value).to eq value
405
+ print_log("passed", start, __method__, element, value)
325
406
  rescue Exception => e
326
- raise "❌ ERROR: #{e} "
407
+ print_log("failed", start, __method__, element, value)
408
+ raise "Error: #{e.message}"
327
409
  end
328
410
  else
329
- raise "❌ Error: Not found object: #{element}"
411
+ print_log("failed", start, __method__, element, value)
412
+ raise "Error: Not found object: #{element}"
330
413
  end
331
414
  end
332
415
 
333
- def verify_element_not_has_text(element,value)
416
+ def verify_element_not_has_text(element, value)
417
+ start = Time.now
334
418
  foundElement = find_object(element)
335
419
  if foundElement != nil
336
420
  begin
337
421
  actual_value = foundElement.text()
338
- put_log "Actual result is: '#{actual_value}' -- Expected result is: '#{value}'"
339
422
  expect(actual_value).not_to eql value
423
+ print_log("passed", start, __method__, element, value)
340
424
  rescue Exception => e
341
- raise "❌ ERROR: #{e}"
425
+ print_log("failed", start, __method__, element, value)
426
+ raise "Error: #{e.message}"
342
427
  end
343
-
344
428
  else
345
- raise "❌ Error: Not found object: #{element}"
429
+ print_log("failed", start, __method__, element, value)
430
+ raise "Error: Not found object: #{element}"
346
431
  end
347
432
  end
348
433
 
349
- def verify_element_value(element,value)
434
+ def verify_element_value(element, value)
435
+ start = Time.now
350
436
  foundElement = find_object(element)
351
437
  if foundElement != nil
352
438
  begin
353
439
  actual_value = foundElement.value()
354
- put_log "Actual result is: '#{actual_value}' -- Expected result is: '#{value}'"
355
440
  expect(actual_value).to eq value
441
+ print_log("passed", start, __method__, element, value)
356
442
  rescue Exception => e
357
- raise "❌ ERROR: #{e}"
443
+ print_log("failed", start, __method__, element, value)
444
+ raise "Error: #{e.message}"
358
445
  end
359
446
  else
360
- raise "❌ Error: Not found object: #{element}"
447
+ print_log("failed", start, __method__, element, value)
448
+ raise "Error: Not found object: #{element}"
361
449
  end
362
450
  end
363
451
 
364
- def verify_element_not_has_value(element,value)
452
+ def verify_element_not_has_value(element, value)
453
+ start = Time.now
365
454
  foundElement = find_object(element)
366
455
  if foundElement != nil
367
456
  begin
368
457
  actual_value = foundElement.value()
369
- put_log "Actual result is: '#{actual_value}' -- Expected result is: '#{value}'"
370
458
  expect(actual_value).not_to eql value
459
+ print_log("passed", start, __method__, element, value)
371
460
  rescue Exception => e
372
- raise "❌ ERROR: #{e}"
461
+ print_log("failed", start, __method__, element, value)
462
+ raise "Error: #{e.message}"
373
463
  end
374
464
  else
375
- raise "❌ Error: Not found object: #{element}"
465
+ print_log("failed", start, __method__, element, value)
466
+ raise "Error: Not found object: #{element}"
376
467
  end
377
468
  end
378
469
 
379
- def execute_checkproperty(element, property, negate, value, isSpecialChar=false)
470
+ def execute_checkproperty(element, property, negate, value, isSpecialChar = false)
471
+ start = Time.now
380
472
  validate_option_by(property)
381
473
  Capybara.configure do |config|
382
474
  config.ignore_hidden_elements = false
@@ -389,24 +481,21 @@ def execute_checkproperty(element, property, negate, value, isSpecialChar=false)
389
481
  # check.should eq true
390
482
  expect(check).to eq true
391
483
  else
392
- # put_log "\n\n\t>>> execute_checkproperty: finish to found element"
393
484
  if foundElement != nil
394
-
395
- if property.upcase == 'VALUE'
485
+ if property.upcase == "VALUE"
396
486
  actual_value = foundElement.value()
397
-
398
- elsif property.upcase == 'TEXT'
487
+ elsif property.upcase == "TEXT"
399
488
  actual_value = foundElement.text()
400
-
401
489
  else
402
490
  actual_value = foundElement["#{property}"]
403
491
  end
404
492
 
405
493
  if actual_value == nil
406
- actual_value = ''
494
+ actual_value = ""
407
495
  end
408
496
  else
409
- put_log "❌ Error: Not found object: #{element}"
497
+ print_log("failed", start, __method__, element, property, negate, value, isSpecialChar)
498
+ raise "Error: Not found object: #{element}"
410
499
  end
411
500
 
412
501
  Capybara.configure do |config|
@@ -417,585 +506,80 @@ def execute_checkproperty(element, property, negate, value, isSpecialChar=false)
417
506
  # check = true
418
507
  # end
419
508
 
420
- put_log "\n#{property} :: Actual result is: '#{actual_value}' -- Expected result is: '#{value}'"
421
-
422
- if negate == " not"
423
- actual_value.should_not eq value
424
- expect(actual_value).not_to eql value
425
- elsif actual_value.should eq value
426
- expect(actual_value).to eq value
427
- end
428
- end
429
- end
430
-
431
- def check_valid_option_by?(option_by)
432
- %w(text value).include? option_by
433
- end
434
-
435
- def validate_option_by(option_by)
436
- raise "Please select valid option, invalid option - #{option_by}" unless check_valid_option_by? option_by
437
- end
438
-
439
- def check_valid_keys?(key)
440
- %w(:cancel :help :backspace :tab :clear :return :enter :shift :control :alt :pause :escape :space :page_up :page_down :end :home :left :up :right :down :insert :delete :semicolon :equals).include? key
441
- end
442
-
443
- def validate_supported_keys(key)
444
- raise "Please select valid keys, invalid key - #{key}" unless check_valid_option_by? key
445
- end
446
-
447
- def find_object string_object
448
- startTime = Time.new.to_i
449
- string_object = string_object.gsub(/"/, "'")
450
- locator_matching = /(.*?)(\{.*?\})/.match(string_object)
451
- dyn_pros = {}
452
- if locator_matching != nil
453
- string_object = locator_matching[1]
454
- eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
455
- dyn_pros[k.to_s.upcase] = v
456
- }
457
- end
458
- hash_object = $OBJECT[string_object]
459
- if hash_object == nil
460
- raise "❌ ERROR: >>> Object: #{string_object} is not found in Object Repository."
461
- end
462
- upcase_attrb = {}
463
- if hash_object != nil
464
- hash_object.each {|k,v|
465
- k = k.to_s.upcase
466
- if k =~ /ph_/i
467
- if dyn_pros[k] != nil
468
- if v =~ /<ph_value>/i
469
- upcase_attrb[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
470
- else
471
- upcase_attrb[k[3..k.size-1]] = dyn_pros[k]
472
- end
473
- dyn_pros.delete(k)
474
- end
475
- else
476
- upcase_attrb[k.to_s.upcase] = v
477
- end
478
- }
479
- end
480
- ph_attrs = {}
481
- dyn_pros.each{|k,v|
482
- if k =~ /ph_/i
483
- ph_attrs[k] = v
484
- else
485
- upcase_attrb[k.to_s.upcase] = v
486
- end
487
- }
488
- if upcase_attrb.size > 0
489
- strId = ""
490
- strClass = ""
491
- strName = ""
492
- strTagname = ""
493
- strCssSelector = ""
494
- strXpathSelector = ""
495
- strText = ""
496
- strRelated = ""
497
- strRelatedType = ""
498
-
499
- index = nil
500
- minWidth = -1
501
- maxWidth = -1
502
- minHeight = -1
503
- maxHeight = -1
504
-
505
- ano_pros = {}
506
-
507
- upcase_attrb.each{|key, value|
508
- upcase_key = key.to_s.upcase
509
- case upcase_key
510
- when "XPATH_SELECTOR"
511
- strXpathSelector = value
512
- when "CSS_SELECTOR"
513
- strCssSelector = value
514
- when "ID"
515
- strId = value
516
- when "CLASS"
517
- strClass = value
518
- when "NAME"
519
- strName = value
520
- when "TAGNAME"
521
- strTagname = value
522
- when "TEXT"
523
- strText = value
524
- when "INDEX"
525
- index = value
526
- else
527
- raise "ERROR: >>> Wrong format type: #{key.to_s} of object: #{string_object}. Available supported format are: XPATH_SELECTOR | CSS_SELECTOR | ID | NAME | CLASS | TEXT | TAGNAME | INDEX"
528
- end
529
- }
530
- continue_run = true;
531
- ref_object = nil;
532
-
533
- if strRelated != nil and strRelated.length > 0
534
- ref_object = find_object(strRelated)
535
- if (ref_object == nil)
536
- continue_run = false
537
- end
538
- end
539
-
540
- if continue_run == true
541
- begin
542
- if strCssSelector != nil and strCssSelector.length > 0
543
- foundElements = get_objects_by_css_selector(strCssSelector)
544
- elsif strXpathSelector != nil and strXpathSelector.length > 0
545
- foundElements = get_objects_by_xpath_selector(strXpathSelector)
546
- else
547
- strGenerateXpathSel = generate_xpath_selector(strId, strClass, strName, strTagname)
548
- if strGenerateXpathSel.length > 0
549
- foundElements = get_objects_by_xpath_selector(strGenerateXpathSel)
550
- else
551
- if (check_string_letters_only(strId))
552
- foundElements = get_objects_by_Id(strId)
553
- elsif (check_string_letters_only(strName))
554
- foundElements = get_objects_by_Name(strName)
555
- elsif (check_string_letters_only(strClass))
556
- foundElements = get_objects_by_Class(strClass)
557
- elsif (check_string_letters_only(strTagname))
558
- foundElements = get_objects_by_Tagname(strTagname)
559
- end
560
- end
561
- end
562
- if foundElements == nil or foundElements.length == 0
563
- currentTime = Time.new.to_i
564
- else
565
- break
566
- end
567
- test = currentTime - startTime
568
- puts "\n Finding the object #{string_object}... TIME-OUT:: #{test} < #{$wait_time}"
569
- sleep(0.5)
570
- end while (currentTime - startTime) < $wait_time
571
-
572
- if foundElements != nil or foundElements.length != 0
573
- if index != nil and index.to_i >= 0
574
- matched_index = 0;
575
- return_element = nil
576
- foundElements.each{|cur_element|
577
- passCheck = find_object_check_object(cur_element, ref_object, strRelatedType, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
578
- if passCheck
579
- if matched_index == index.to_i
580
- return_element = cur_element
581
- break
582
- else
583
- matched_index = matched_index + 1
584
- end
585
- end
586
- }
587
- return return_element
588
- else
589
- return_element = nil
590
- foundElements.each{|cur_element|
591
- passCheck = find_object_check_object(cur_element, ref_object, strRelatedType, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
592
- if passCheck
593
- return_element = cur_element
594
- break
595
- end
596
- }
597
- return return_element
598
- end # if index != nil and index.to_i >= 0
599
- end #if foundElements != nil or foundElements.length != 0
600
- end #if continue = true
601
- end
602
- return nil
603
- end
604
-
605
- def generate_xpath_selector(strId, strClass, strName, strTagname)
606
- strGenerateXpathSel = ""
607
- if strId != nil and strId.length > 0 and (strId =~ /^#/) == nil
608
- strGenerateXpathSel = "[@id='#{strId}']"
609
- end
610
- if strClass != nil and strClass.length > 0 and (strClass =~ /^#/) == nil
611
- strGenerateXpathSel = "#{strGenerateXpathSel}[@class='#{strClass}']"
612
- end
613
- if strName != nil and strName.length > 0 and (strName =~ /^#/) == nil
614
- strGenerateXpathSel = "#{strGenerateXpathSel}[@name='#{strName}']"
615
- end
616
-
617
- if strGenerateXpathSel.length > 0
618
- if strTagname != nil and strTagname.length > 0
619
- strGenerateXpathSel = "//#{strTagname}#{strGenerateXpathSel}"
620
- else
621
- strGenerateXpathSel = "//*#{strGenerateXpathSel}"
622
- end
623
- end
624
-
625
- return strGenerateXpathSel
626
- end
627
-
628
- def check_string_letters_only(strToCheck)
629
- if strToCheck != nil and strToCheck.length > 0 and strToCheck =~ /^[a-zA-Z]+$/
630
- return true
631
- end
632
- return false
633
- end
634
-
635
- def get_objects_by_Id(strId)
636
- foundElements = nil
637
- begin
638
- foundElements = page.all("*[@id='#{strId}']")
639
- rescue StandardError => e
640
- raise "❌ Error: #{e}"
641
- end
642
-
643
- return foundElements
644
- end
645
-
646
- def get_objects_by_Class(strClass)
647
- foundElements = nil
648
- begin
649
- foundElements = page.all("*[@class='#{strClass}']")
650
- rescue StandardError => e
651
- raise "❌ Error: #{e}"
652
- end
653
-
654
- return foundElements
655
- end
656
-
657
- def get_objects_by_Name(strName)
658
- foundElements = nil
659
- begin
660
- foundElements = page.all("*[@name='#{strName}']")
661
- rescue StandardError => e
662
- raise "❌ Error: #{e}"
663
- end
664
-
665
- return foundElements
666
- end
667
-
668
- def get_objects_by_Tagname(strTagname)
669
- foundElements = nil
670
- begin
671
- foundElements = page.all("#{strTagname}")
672
- rescue StandardError => e
673
- raise "❌ Error: #{e}"
674
- end
675
-
676
- return foundElements
677
- end
678
-
679
- def get_objects_by_css_selector(strCssSelector)
680
- foundElements = nil
681
- begin
682
- foundElements = page.all(:css, strCssSelector)
683
- rescue StandardError => e
684
- raise "❌ Error: #{e}"
685
- end
686
- foundElements
687
- end
688
-
689
- def get_objects_by_xpath_selector(strXpathSelector)
690
- foundElements = nil
691
- begin
692
- foundElements = page.all(:xpath, strXpathSelector)
693
- rescue StandardError => e
694
- raise "❌ Error: #{e}"
695
- end
696
- foundElements
697
- end
698
-
699
- def find_object_check_object(cur_element, ref_object, ref_object_type, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
700
- passCheck = true
701
- if cur_element != nil
702
- # Check ref_object
703
- if (ref_object != nil)
704
- if find_object_check_ref_object(ref_object, ref_object_type, cur_element) == false
705
- passCheck = false
706
- end
707
- end
708
-
709
- # Check ID
710
- if strId != nil and strId.length > 0
711
- if strId =~ /^#/
712
- strId = strId[1..-1]
713
- end
714
- if find_object_check_Id(cur_element, strId) == false
715
- passCheck = false
716
- end
717
- end
718
-
719
- # Check Class
720
- if passCheck and strClass != nil and strClass.length > 0
721
- if strClass =~ /^#/
722
- strClass = strClass[1..-1]
723
- end
724
- if find_object_check_Class(cur_element, strClass) == false
725
- passCheck = false
726
- end
727
- end
728
-
729
- # Check Name
730
- if passCheck and strName != nil and strName.length > 0
731
- if strName =~ /^#/
732
- strName = strName[1..-1]
733
- end
734
- if find_object_check_Name(cur_element, strName) == false
735
- passCheck = false
736
- end
737
- end
738
-
739
- # Check Tag name
740
- if passCheck and strTagname != nil and strTagname.length > 0
741
- if find_object_check_Tagname(cur_element, strTagname) == false
742
- passCheck = false
743
- end
744
- end
745
-
746
- # Check Text
747
- if passCheck and strText != nil and strText.length > 0
748
- if (strText =~ /^#/)
749
- strText = strText[1..-1]
750
- end
751
-
752
- if find_object_check_Text(cur_element, strText) == false
753
- passCheck = false
754
- end
755
- end
756
-
757
- # Check minWidth
758
- if passCheck and minWidth > 0
759
- if !find_object_check_minWidth(cur_element, minWidth)
760
- passCheck = false
761
- end
762
- end
763
-
764
- # Check maxWidth
765
- if passCheck and maxWidth > 0
766
- if !find_object_check_maxWidth(cur_element, maxWidth)
767
- passCheck = false
768
- end
769
- end
770
-
771
- # Check minHeight
772
- if passCheck and minHeight > 0
773
- if !find_object_check_minHeight(cur_element, minHeight)
774
- passCheck = false
775
- end
776
- end
777
-
778
- # Check maxHeight
779
- if passCheck and maxHeight > 0
780
- if !find_object_check_maxHeight(cur_element, maxHeight)
781
- passCheck = false
509
+ begin
510
+ if negate == " not"
511
+ actual_value.should_not eq value
512
+ expect(actual_value).not_to eql value
513
+ elsif actual_value.should eq value
514
+ expect(actual_value).to eq value
782
515
  end
516
+ print_log("passed", start, __method__, element, property, negate, value, isSpecialChar)
517
+ rescue Exception => e
518
+ print_log("failed", start, __method__, element, property, negate, value, isSpecialChar)
519
+ raise "Error: #{e.message}"
783
520
  end
784
-
785
- # Check another properties
786
- if passCheck and ano_pros.length > 0
787
- ano_pros.each{|property, value|
788
- if value =~ /^#/
789
- value = value[1..-1]
790
- end
791
- if !find_object_check_property(cur_element, property, value)
792
- passCheck = false
793
- break
794
- end
795
- }
796
- end
797
-
798
- return passCheck
799
- end
800
-
801
- return false
802
- end
803
-
804
- def find_object_check_Id(element, strId)
805
- actual_Id = element[:id]
806
- if actual_Id != nil and actual_Id.length > 0
807
- actual_Id = actual_Id.strip
808
- if reg_compare(actual_Id, strId)
809
- return true
810
- end
811
- end
812
-
813
- return false
814
- end
815
- def find_object_check_Class(element, strClass)
816
- actual_Class = element[:class]
817
- if actual_Class != nil and actual_Class.length > 0
818
- actual_Class = actual_Class.strip
819
- if reg_compare(actual_Class, strClass)
820
- return true
821
- end
822
- end
823
-
824
- return false
825
- end
826
- def find_object_check_Name(element, strName)
827
- actual_Name = element[:name]
828
- if actual_Name != nil and actual_Name.length > 0
829
- actual_Name = actual_Name.strip
830
- if reg_compare(actual_Name, strName)
831
- return true
832
- end
833
- end
834
-
835
- return false
836
- end
837
-
838
- def find_object_check_Tagname(element, strTagname)
839
- actual_Tagname = element.tag_name()
840
- if actual_Tagname != nil and actual_Tagname.length > 0
841
- actual_Tagname = actual_Tagname.strip
842
- if reg_compare(actual_Tagname, strTagname)
843
- return true
844
- end
845
- end
846
-
847
- return false
848
- end
849
- def find_object_check_Xpath(element, strXpath)
850
-
851
- end
852
- def find_object_check_Text(element, strText)
853
- actual_Text = element.text()
854
- if actual_Text != nil and actual_Text.length > 0
855
- actual_Text = actual_Text.strip
856
- if reg_compare(actual_Text, strText)
857
- return true
858
- end
859
- end
860
-
861
- return false
862
- end
863
- def find_object_check_minWidth(element, minWidth)
864
- width = element[:width]
865
- if (width >= minWidth)
866
- return true
867
- end
868
-
869
- return false
870
- end
871
- def find_object_check_maxWidth(element, maxWidth)
872
- width = element[:width]
873
- if (width <= maxWidth)
874
- return true
875
- end
876
-
877
- return false
878
- end
879
- def find_object_check_minHeight(element, minHeight)
880
- height = element[:height]
881
- if (height <= minHeight)
882
- return true
883
- end
884
-
885
- return false
886
- end
887
- def find_object_check_maxHeight(element, maxHeight)
888
- height = element[:height]
889
- if (height <= maxHeight)
890
- return true
891
- end
892
-
893
- return false
894
- end
895
-
896
- def find_object_check_ref_object(ref_object, ref_type, target_element)
897
- begin
898
- ref = ref_object.native
899
- target = target_element.native
900
- if(ref_type == "up" or ref_type == "down")
901
- ref_x1 = ref.location.x - 10
902
- ref_x2 = ref.location.x + ref.size.width + 10
903
- target_x1 = target.location.x
904
- target_x2 = target_x1 + target.size.width
905
- elsif(ref_type == "left" or ref_type == "right")
906
- ref_y1 = ref.location.y - 10
907
- ref_y2 = ref.location.y + ref_object.native.size.height + 10
908
- target_y1 = target.location.y
909
- target_y2 = target_y1 + target.size.height
910
- elsif(ref_type == "child" or ref_type == "parent")
911
- ref_W = ref.location.x + ref.size.width
912
- ref_H = ref.location.y + ref.size.height
913
- target_W = target.location.x + target.size.width
914
- target_H = target.location.y + target.size.height
915
- end
916
-
917
- if(ref_type == "up" and
918
- target_x1 > ref_x1 and target_x2 < ref_x2 and # has same column or X Position
919
- target.location.y < ref.location.y) # at row or Y position, target is upper
920
- return true
921
- elsif(ref_type == "down" and
922
- target_x1 > ref_x1 and target_x2 < ref_x2 and # has same column or X Position
923
- target.location.y > ref.location.y) # at row or Y position, target is at down
924
- return true
925
- elsif(ref_type == "left" and
926
- target.location.x < ref.location.x and # at column or X Position, target is at left
927
- target_y1 > ref_y1 and target_y2 < ref_y2) # at row or Y position, target is same as ref object
928
- return true
929
- elsif(ref_type == "right" and
930
- target.location.x > ref.location.x and # at column or X Position, target is at right
931
- target_y1 > ref_y1 and target_y2 < ref_y2) # at row or Y position, target is same as ref object
932
- return true
933
- elsif(ref_type == "child" and
934
- (target_W < ref_W) and (target_H < ref_H) and
935
- (target.location.x > ref.location.x) and (target.location.y > ref.location.y))
936
- return true
937
- elsif(ref_type == "parent" and
938
- (target_W > ref_W) and (target_H > ref_H) and
939
- (target.location.x < ref.location.x) and (target.location.y < ref.location.y))
940
- return true
941
- end
942
- rescue StandardError => e
943
- puts "❌ Error: #{e}"
944
521
  end
945
-
946
- return false;
947
522
  end
948
523
 
949
- def get_object_and_store_as_string(object,string)
524
+ def get_object_and_store_as_string(object, string)
950
525
  text = execute_gettext(object)
951
526
  txt = "'" + text + "'"
952
527
  set_var(string, txt)
953
528
  end
954
529
 
955
-
956
- def get_object_and_store_to_file(object,file_name)
530
+ def get_object_and_store_to_file(object, file_name)
957
531
  $text = execute_gettext(object)
958
- open($test_data_dir+file_name, 'a+') do |f|
532
+ open($test_data_dir + file_name, "a+") do |f|
959
533
  f << $text + "\n"
960
534
  end
961
535
  end
962
536
 
963
537
  def drag_and_drop_by_offset(element, x, y)
538
+ start = Time.now
964
539
  foundElement = find_object(element)
965
540
  if foundElement != nil
966
541
  begin
967
542
  page.driver.browser.action.drag_and_drop_by(foundElement, x, y).perform
543
+ print_log("passed", start, __method__, element, x, y)
968
544
  rescue Exception => e
969
- raise "❌ ERROR: #{e}"
545
+ print_log("failed", start, __method__, element, x, y)
546
+ raise "Error: #{e.message}"
970
547
  end
971
548
  else
972
- raise "❌ Error: Not found object: #{element}"
549
+ print_log("failed", start, __method__, element, x, y)
550
+ raise "Error: Not found object: #{element}"
973
551
  end
974
552
  end
975
553
 
976
554
  def drag_and_drop_to_object(from_element, element)
555
+ start = Time.now
977
556
  found_from_element = find_object(from_element)
978
557
  foundElement = find_object(element)
979
558
  if foundElement != nil and found_from_element != nil
980
559
  found_from_element.drag_to(foundElement)
560
+ print_log("passed", start, __method__, from_element, element)
981
561
  end
982
562
  end
983
563
 
984
564
  def execute_sendkeys(element, key)
565
+ start = Time.now
985
566
  validate_supported_keys(key)
986
567
  foundElement = find_object(element)
987
568
  if foundElement != nil
988
569
  begin
989
570
  foundElement.native.send_keys(key)
571
+ print_log("passed", start, __method__, element, key)
990
572
  rescue Exception => e
991
- raise "❌ ERROR: #{e}"
573
+ print_log("failed", start, __method__, element, key)
574
+ raise "Error: #{e.message}"
992
575
  end
993
576
  else
994
- raise "❌ Error: Not found object: #{element}"
577
+ print_log("failed", start, __method__, element, key)
578
+ raise "Error: Not found object: #{element}"
995
579
  end
996
580
  end
997
581
 
998
- def movemouseandclick var, element
582
+ def movemouseandclick(var, element)
999
583
  Selenium::WebDriver::Support::Select.new(page.driver.browser.find_element(:id, "#{var}")).select_by(:text, "#{element}")
1000
584
  page.driver.browser.find_element(:id, "#{var}").click
1001
585
  end