itms_automation 2.3 → 2.6.0

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/bin/generate.rb +3 -37
  3. data/bin/helper.rb +23 -10
  4. data/bin/itms_automation +18 -23
  5. data/doc/installation.md +16 -0
  6. data/doc/itms-automation-API.md +103 -0
  7. data/doc/itms-automation-help.md +18 -0
  8. data/example/android/android_app/android_app_calculator.zip +0 -0
  9. data/example/android/android_app/android_app_calculator/AndroidCalculator.apk +0 -0
  10. data/example/android/android_app/android_app_calculator/features/calculator.feature +36 -0
  11. data/example/android/android_app/android_app_calculator/features/my_first.feature +13 -0
  12. data/example/android/android_app/android_app_calculator/features/screenshots/test.png +0 -0
  13. data/example/android/android_app/android_app_calculator/features/step_definitions/custom_steps.rb +5 -0
  14. data/example/android/android_app/android_app_calculator/features/support/env.rb +52 -0
  15. data/example/android/android_app/android_app_calculator/features/support/hooks.rb +26 -0
  16. data/example/android/android_web/android_web_gmail_login.zip +0 -0
  17. data/example/android/android_web/android_web_gmail_login/features/gmail_login.feature +12 -0
  18. data/example/android/android_web/android_web_gmail_login/features/my_first.feature +1 -0
  19. data/example/android/android_web/android_web_gmail_login/features/screenshots/test.png +0 -0
  20. data/example/android/android_web/android_web_gmail_login/features/step_definitions/custom_steps.rb +5 -0
  21. data/example/android/android_web/android_web_gmail_login/features/support/env.rb +51 -0
  22. data/example/android/android_web/android_web_gmail_login/features/support/hooks.rb +27 -0
  23. data/example/desktop web/desktop_web_gmail_login.zip +0 -0
  24. data/example/desktop web/desktop_web_gmail_login/features/gmail_login.feature +9 -0
  25. data/example/desktop web/desktop_web_gmail_login/features/gmail_multi_login.feature +21 -0
  26. data/example/desktop web/desktop_web_gmail_login/features/my_first.feature +1 -0
  27. data/example/desktop web/desktop_web_gmail_login/features/screenshots/test.png +0 -0
  28. data/example/desktop web/desktop_web_gmail_login/features/step_definitions/custom_steps.rb +5 -0
  29. data/example/desktop web/desktop_web_gmail_login/features/support/env.rb +106 -0
  30. data/example/desktop web/desktop_web_gmail_login/features/support/hooks.rb +38 -0
  31. data/features-skeleton/my_first.feature +5 -0
  32. data/features-skeleton/screenshots/test.png +0 -0
  33. data/features-skeleton/step_definitions/custom_steps.rb +5 -0
  34. data/features-skeleton/step_definitions/repositories/project_object.yml +1 -0
  35. data/features-skeleton/support/env.rb +108 -0
  36. data/features-skeleton/support/hooks.rb +38 -0
  37. data/lib/itms_automation.rb +1 -3
  38. data/lib/itms_automation/assertion_steps.rb +68 -0
  39. data/lib/itms_automation/click_elements_steps.rb +24 -0
  40. data/lib/itms_automation/configuration_steps.rb +7 -0
  41. data/lib/itms_automation/input_steps.rb +59 -0
  42. data/lib/itms_automation/javascript_handling_steps.rb +10 -0
  43. data/lib/itms_automation/methods/assertion_methods.rb +333 -0
  44. data/lib/itms_automation/methods/click_elements_methods.rb +23 -0
  45. data/lib/itms_automation/methods/configuration_methods.rb +35 -0
  46. data/lib/itms_automation/methods/error_handling_methods.rb +93 -0
  47. data/lib/itms_automation/methods/input_methods.rb +69 -0
  48. data/lib/itms_automation/methods/javascript_handling_methods.rb +9 -0
  49. data/lib/itms_automation/methods/misc_methods.rb +63 -0
  50. data/lib/itms_automation/methods/navigate_methods.rb +123 -0
  51. data/lib/itms_automation/methods/progress_methods.rb +15 -0
  52. data/lib/itms_automation/methods/required_files.rb +9 -0
  53. data/lib/itms_automation/methods/screenshot_methods.rb +6 -0
  54. data/lib/itms_automation/navigation_steps.rb +79 -0
  55. data/lib/itms_automation/progress_steps.rb +17 -0
  56. data/lib/itms_automation/screenshot_steps.rb +6 -0
  57. data/lib/itms_automation/version.rb +5 -3
  58. metadata +93 -90
  59. data/bin/console +0 -14
  60. data/bin/documentation_generator.rb +0 -119
  61. data/bin/setup +0 -8
  62. data/lib/itms_automation/all_steps.rb +0 -8
  63. data/lib/itms_automation/assertion_helper.rb +0 -29
  64. data/lib/itms_automation/auto_util.rb +0 -702
  65. data/lib/itms_automation/database_steps_helper.rb +0 -125
  66. data/lib/itms_automation/web_steps_helper.rb +0 -844
  67. data/project/Gemfile +0 -3
  68. data/project/Gemfile.lock +0 -92
  69. data/project/README.md +0 -34
  70. data/project/Rakefile +0 -24
  71. data/project/config/chrome_headless_options.yaml +0 -1
  72. data/project/config/chrome_options.yaml +0 -6
  73. data/project/config/firefox_headless_options.yaml +0 -1
  74. data/project/config/firefox_options.yaml +0 -1
  75. data/project/config/ie_options.yaml +0 -1
  76. data/project/config/remote_options.yaml +0 -6
  77. data/project/config/safari_options.yaml +0 -1
  78. data/project/cucumber.yml +0 -4
  79. data/project/features/TestSuite/WebGUI.feature +0 -5
  80. data/project/features/step_definitions/lib_steps/steps_definition.rb +0 -46
  81. data/project/features/step_definitions/repositories/project_object.yml +0 -26
  82. data/project/features/support/env.rb +0 -9
  83. data/project/features/support/hooks.rb +0 -128
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,8 +0,0 @@
1
- # coding: UTF-8
2
-
3
- Dir[File.join(File.dirname(__FILE__), '*_steps.rb')].each do |f|
4
- name = File.basename(f, '.rb')
5
- unless name == 'all_steps'
6
- require "itms_automation/#{name}"
7
- end
8
- end
@@ -1,29 +0,0 @@
1
- def do_assertion_json expected_obj, actual_obj
2
- if expected_obj.kind_of? Array
3
- is_contain = true
4
- expected_obj.each_with_index do |expected, index|
5
- is_contain = do_assertion_json(expected, actual_obj)
6
- @expected.shift if is_contain == true
7
- return is_contain if is_contain == false || index == expected_obj.length - 1
8
- end
9
- elsif expected_obj.kind_of? Hash
10
- is_contain = true
11
- expected_obj_keys = expected_obj.keys
12
- expected_obj_keys.each_with_index do |key, index|
13
- if actual_obj[key].nil?
14
- raise "[%s] expected [%s] but actual value was nil." % [key, expected_obj[key].to_s]
15
- else
16
- is_contain = expected_obj[key] == actual_obj[key]
17
- return is_contain if is_contain == false || index == expected_obj_keys.length - 1
18
- end
19
- end
20
- elsif [Integer, String, Float].include? expected_obj.class
21
- return assert_string_equal(expected_obj, actual_obj)
22
- else
23
- raise "Verify sql result error: Not support expected type #{expected_obj.class} yet"
24
- end
25
- end
26
-
27
- def assert_string_equal expected, actual
28
- actual.to_s == expected.to_s
29
- end
@@ -1,702 +0,0 @@
1
- #-----------------------------------------------------
2
- # support define and bind variable dynamically
3
- #-----------------------------------------------------
4
- $dyn_vars = nil
5
-
6
- # set value to a variable
7
- def set_var(var_name, var_value)
8
- if $dyn_vars == nil
9
- $dyn_vars = binding
10
- end
11
-
12
- strEval = var_name + "=" + var_value
13
- eval strEval, $dyn_vars
14
- end
15
-
16
- def get_var(var_name)
17
- $dyn_vars.local_variable_get(var_name)
18
- end
19
-
20
- def check_dynamic_value(value)
21
- if !value.is_a? Fixnum
22
- if value.include? "params="
23
- resolve_params value
24
- else
25
- bind_with_dyn_vars value
26
- end
27
- else
28
- value
29
- end
30
- end
31
-
32
- # bind string with $dyn_vars context
33
- def bind_with_dyn_vars(str)
34
- if $dyn_vars == nil
35
- $dyn_vars = binding
36
- end
37
-
38
- strEval = '"' + str + '"'
39
- return eval strEval, $dyn_vars
40
- end
41
-
42
- # evaluate operation/statement with $dyn_vars context
43
- def eval_with_dyn_vars(operation)
44
- if $dyn_vars == nil
45
- $dyn_vars = binding
46
- end
47
-
48
- eval operation, $dyn_vars
49
- end
50
-
51
- def bind_with_dyn_json_vars(json, bind_json)
52
- if json.kind_of? Hash
53
- json.each_pair do |k, v|
54
- if v.kind_of? String
55
- bind_json[bind_with_dyn_vars(k)] = bind_with_dyn_json_vars(v, bind_json)
56
- elsif v.kind_of? Hash
57
- temp = Hash.new
58
- v.each_pair do |k1, v1|
59
- temp[bind_with_dyn_vars(k1)] = bind_with_dyn_json_vars(v1, temp)
60
- end
61
- bind_json[bind_with_dyn_vars(k)] = temp
62
- elsif v.kind_of? Array
63
- temp1 = Array.new
64
- v.each { |item|
65
- temp2 = Hash.new
66
- bind_with_dyn_json_vars(item, temp2)
67
- temp1 << temp2
68
- }
69
- bind_json[bind_with_dyn_vars(k)] = temp1
70
- end
71
- end
72
- elsif json.kind_of? Array
73
- temp1 = Array.new
74
- json.each { |item|
75
- temp2 = Hash.new
76
- bind_with_dyn_json_vars(item, temp2)
77
- temp1 << temp2
78
- }
79
- return temp1
80
- else
81
- return bind_with_dyn_vars(json)
82
- end
83
- end
84
-
85
- def var_collect(string_var)
86
- if string_var =~ /^.*{year}.*$/
87
- string_var = replace_year(string_var)
88
- end
89
-
90
- if string_var =~ /^.*{month}.*$/
91
- string_var = replace_month(string_var)
92
- end
93
-
94
- if string_var =~ /^.*{day}.*$/
95
- string_var = replace_day(string_var)
96
- end
97
-
98
- if string_var =~ /^.*{store_value}.*$/
99
- string_var = $context_value
100
- end
101
-
102
- return string_var
103
- end
104
-
105
- def replace_year(str)
106
- t = Time.now()
107
- return str.gsub("{year}", t.year.to_s)
108
- end
109
-
110
- def replace_month(str)
111
- t = Time.now()
112
- _month = t.month
113
- if _month < 10
114
- return str.gsub("{month}", "0#{_month.to_s}")
115
- else
116
- return str.gsub("{month}", "#{_month.to_s}")
117
- end
118
- return str
119
- end
120
-
121
- def replace_day(str)
122
- t = Time.now()
123
- _day = t.day
124
- if _day < 10
125
- return str.gsub("{day}", "0#{_day.to_s}")
126
- else
127
- return str.gsub("{day}", "#{_day.to_s}")
128
- end
129
- return str
130
- end
131
-
132
- def print_variable(variable)
133
- puts "VALUE OF #{variable}: #{eval_with_dyn_vars(variable)}"
134
- end
135
-
136
- def duration(start)
137
- current = Time.now.to_f
138
- convert_time = Time.at(current - start.to_f).utc.strftime('%Mm%s.%Ls')
139
- return convert_time
140
- end
141
-
142
- def print_log(status, start, method, *args)
143
- icon = status === "passed" ? "✅" : "❌"
144
- str = ""
145
- args = *args
146
- args_length = args.length - 1
147
- args.each_with_index do |a, i|
148
- if i < args_length
149
- str += "\"#{a}\", "
150
- else
151
- str += "\"#{a}\""
152
- end
153
- end
154
-
155
- puts "#{icon} Step: #{method}(#{str}) (#{duration(start)})"
156
- end
157
-
158
- def get_object_value(str_obj)
159
- string_object = str_obj.gsub(/"/, "'")
160
- hash_object = $OBJECT[string_object]
161
- if hash_object == nil
162
- raise "❌ Error: #{str_obj} NAME MAYBE NOT FOUND!!!"
163
- end
164
- if hash_object.keys[0].to_s.upcase != "CSS_SELECTOR"
165
- raise "❌ Error: #{str_obj} should be formatted as Css Selector."
166
- end
167
- hash_object[hash_object.keys[0]]
168
- end
169
-
170
- def debug_log str
171
- p str if $print_log == "true"
172
- end
173
-
174
- def check_valid_option_by?(option_by)
175
- %w(text value).include? option_by
176
- end
177
-
178
- def validate_option_by(option_by)
179
- raise "Please select valid option, invalid option - #{option_by}" unless check_valid_option_by? option_by
180
- end
181
-
182
- def check_valid_keys?(key)
183
- %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
184
- end
185
-
186
- def validate_supported_keys(key)
187
- raise "Please select valid keys, invalid key - #{key}" unless check_valid_option_by? key
188
- end
189
-
190
- def find_object string_object
191
- startTime = Time.new.to_i
192
- string_object = string_object.gsub(/"/, "'")
193
- locator_matching = /(.*?)(\{.*?\})/.match(string_object)
194
- dyn_pros = {}
195
- if locator_matching != nil
196
- string_object = locator_matching[1]
197
- eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
198
- dyn_pros[k.to_s.upcase] = v
199
- }
200
- end
201
- hash_object = $OBJECT[string_object]
202
- if hash_object == nil
203
- raise "❌ find_object error: >>> Object: #{string_object} is not found in Object Repository."
204
- end
205
- upcase_attrb = {}
206
- if hash_object != nil
207
- hash_object.each {|k,v|
208
- k = k.to_s.upcase
209
- if k =~ /ph_/i
210
- if dyn_pros[k] != nil
211
- if v =~ /<ph_value>/i
212
- upcase_attrb[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
213
- else
214
- upcase_attrb[k[3..k.size-1]] = dyn_pros[k]
215
- end
216
- dyn_pros.delete(k)
217
- end
218
- else
219
- upcase_attrb[k.to_s.upcase] = v
220
- end
221
- }
222
- end
223
- ph_attrs = {}
224
- dyn_pros.each{|k,v|
225
- if k =~ /ph_/i
226
- ph_attrs[k] = v
227
- else
228
- upcase_attrb[k.to_s.upcase] = v
229
- end
230
- }
231
- if upcase_attrb.size > 0
232
- strId = ""
233
- strClass = ""
234
- strName = ""
235
- strTagname = ""
236
- strCssSelector = ""
237
- strXpathSelector = ""
238
- strText = ""
239
- strRelated = ""
240
- strRelatedType = ""
241
-
242
- index = nil
243
- minWidth = -1
244
- maxWidth = -1
245
- minHeight = -1
246
- maxHeight = -1
247
-
248
- ano_pros = {}
249
-
250
- upcase_attrb.each{|key, value|
251
- upcase_key = key.to_s.upcase
252
- case upcase_key
253
- when "XPATH_SELECTOR"
254
- strXpathSelector = value
255
- when "CSS_SELECTOR"
256
- strCssSelector = value
257
- when "ID"
258
- strId = value
259
- when "CLASS"
260
- strClass = value
261
- when "NAME"
262
- strName = value
263
- when "TAGNAME"
264
- strTagname = value
265
- when "TEXT"
266
- strText = value
267
- when "INDEX"
268
- index = value
269
- else
270
- raise "❌ find_object 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"
271
- end
272
- }
273
- continue_run = true;
274
- continue_run_count = 1;
275
- ref_object = nil;
276
-
277
- if strRelated != nil and strRelated.length > 0
278
- ref_object = find_object(strRelated)
279
- if (ref_object == nil)
280
- continue_run = false
281
- end
282
- end
283
-
284
- if continue_run == true
285
- begin
286
- if strCssSelector != nil and strCssSelector.length > 0
287
- foundElements = get_objects_by_css_selector(strCssSelector)
288
- elsif strXpathSelector != nil and strXpathSelector.length > 0
289
- foundElements = get_objects_by_xpath_selector(strXpathSelector)
290
- else
291
- strGenerateXpathSel = generate_xpath_selector(strId, strClass, strName, strTagname)
292
- if strGenerateXpathSel.length > 0
293
- foundElements = get_objects_by_xpath_selector(strGenerateXpathSel)
294
- else
295
- if (check_string_letters_only(strId))
296
- foundElements = get_objects_by_Id(strId)
297
- elsif (check_string_letters_only(strName))
298
- foundElements = get_objects_by_Name(strName)
299
- elsif (check_string_letters_only(strClass))
300
- foundElements = get_objects_by_Class(strClass)
301
- elsif (check_string_letters_only(strTagname))
302
- foundElements = get_objects_by_Tagname(strTagname)
303
- end
304
- end
305
- end
306
- if foundElements == nil or foundElements.length == 0
307
- continue_run_count += 1
308
- print "Finding the object..." if continue_run_count == 2
309
- print "." if continue_run_count > 2
310
- currentTime = Time.new.to_i
311
- puts "" if (currentTime - startTime) >= $wait_time
312
- else
313
- puts ""
314
- break
315
- end
316
- sleep(0.5)
317
- end while (currentTime - startTime) < $wait_time
318
-
319
- if foundElements != nil or foundElements.length != 0
320
- if index != nil and index.to_i >= 0
321
- matched_index = 0;
322
- return_element = nil
323
- foundElements.each{|cur_element|
324
- passCheck = find_object_check_object(cur_element, ref_object, strRelatedType, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
325
- if passCheck
326
- if matched_index == index.to_i
327
- return_element = cur_element
328
- break
329
- else
330
- matched_index = matched_index + 1
331
- end
332
- end
333
- }
334
- return return_element
335
- else
336
- return_element = nil
337
- foundElements.each{|cur_element|
338
- passCheck = find_object_check_object(cur_element, ref_object, strRelatedType, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
339
- if passCheck
340
- return_element = cur_element
341
- break
342
- end
343
- }
344
- return return_element
345
- end # if index != nil and index.to_i >= 0
346
- end #if foundElements != nil or foundElements.length != 0
347
- end #if continue = true
348
- end
349
- return nil
350
- end
351
-
352
- def generate_xpath_selector(strId, strClass, strName, strTagname)
353
- strGenerateXpathSel = ""
354
- if strId != nil and strId.length > 0 and (strId =~ /^#/) == nil
355
- strGenerateXpathSel = "[@id='#{strId}']"
356
- end
357
- if strClass != nil and strClass.length > 0 and (strClass =~ /^#/) == nil
358
- strGenerateXpathSel = "#{strGenerateXpathSel}[@class='#{strClass}']"
359
- end
360
- if strName != nil and strName.length > 0 and (strName =~ /^#/) == nil
361
- strGenerateXpathSel = "#{strGenerateXpathSel}[@name='#{strName}']"
362
- end
363
-
364
- if strGenerateXpathSel.length > 0
365
- if strTagname != nil and strTagname.length > 0
366
- strGenerateXpathSel = "//#{strTagname}#{strGenerateXpathSel}"
367
- else
368
- strGenerateXpathSel = "//*#{strGenerateXpathSel}"
369
- end
370
- end
371
-
372
- return strGenerateXpathSel
373
- end
374
-
375
- def check_string_letters_only(strToCheck)
376
- if strToCheck != nil and strToCheck.length > 0 and strToCheck =~ /^[a-zA-Z]+$/
377
- return true
378
- end
379
- return false
380
- end
381
-
382
- def get_objects_by_Id(strId)
383
- foundElements = nil
384
- begin
385
- foundElements = page.all("*[@id='#{strId}']", visible: false)
386
- rescue StandardError => e
387
- raise "Error: #{e.message}"
388
- end
389
-
390
- return foundElements
391
- end
392
-
393
- def get_objects_by_Class(strClass)
394
- foundElements = nil
395
- begin
396
- foundElements = page.all("*[@class='#{strClass}']", visible: false)
397
- rescue StandardError => e
398
- raise "Error: #{e.message}"
399
- end
400
-
401
- return foundElements
402
- end
403
-
404
- def get_objects_by_Name(strName)
405
- foundElements = nil
406
- begin
407
- foundElements = page.all("*[@name='#{strName}']", visible: false)
408
- rescue StandardError => e
409
- raise "Error: #{e.message}"
410
- end
411
-
412
- return foundElements
413
- end
414
-
415
- def get_objects_by_Tagname(strTagname)
416
- foundElements = nil
417
- begin
418
- foundElements = page.all("#{strTagname}", visible: false)
419
- rescue StandardError => e
420
- raise "Error: #{e.message}"
421
- end
422
-
423
- return foundElements
424
- end
425
-
426
- def get_objects_by_css_selector(strCssSelector)
427
- foundElements = nil
428
- begin
429
- foundElements = page.all(:css, strCssSelector, visible: false)
430
- rescue StandardError => e
431
- raise "Error: #{e.message}"
432
- end
433
- foundElements
434
- end
435
-
436
- def get_objects_by_xpath_selector(strXpathSelector)
437
- foundElements = nil
438
- begin
439
- foundElements = page.all(:xpath, strXpathSelector, visible: false)
440
- rescue StandardError => e
441
- raise "Error: #{e.message}"
442
- end
443
- foundElements
444
- end
445
-
446
- def find_object_check_object(cur_element, ref_object, ref_object_type, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
447
- passCheck = true
448
- if cur_element != nil
449
- # Check ref_object
450
- if (ref_object != nil)
451
- if find_object_check_ref_object(ref_object, ref_object_type, cur_element) == false
452
- passCheck = false
453
- end
454
- end
455
-
456
- # Check ID
457
- if strId != nil and strId.length > 0
458
- if strId =~ /^#/
459
- strId = strId[1..-1]
460
- end
461
- if find_object_check_Id(cur_element, strId) == false
462
- passCheck = false
463
- end
464
- end
465
-
466
- # Check Class
467
- if passCheck and strClass != nil and strClass.length > 0
468
- if strClass =~ /^#/
469
- strClass = strClass[1..-1]
470
- end
471
- if find_object_check_Class(cur_element, strClass) == false
472
- passCheck = false
473
- end
474
- end
475
-
476
- # Check Name
477
- if passCheck and strName != nil and strName.length > 0
478
- if strName =~ /^#/
479
- strName = strName[1..-1]
480
- end
481
- if find_object_check_Name(cur_element, strName) == false
482
- passCheck = false
483
- end
484
- end
485
-
486
- # Check Tag name
487
- if passCheck and strTagname != nil and strTagname.length > 0
488
- if find_object_check_Tagname(cur_element, strTagname) == false
489
- passCheck = false
490
- end
491
- end
492
-
493
- # Check Text
494
- if passCheck and strText != nil and strText.length > 0
495
- if (strText =~ /^#/)
496
- strText = strText[1..-1]
497
- end
498
-
499
- if find_object_check_Text(cur_element, strText) == false
500
- passCheck = false
501
- end
502
- end
503
-
504
- # Check minWidth
505
- if passCheck and minWidth > 0
506
- if !find_object_check_minWidth(cur_element, minWidth)
507
- passCheck = false
508
- end
509
- end
510
-
511
- # Check maxWidth
512
- if passCheck and maxWidth > 0
513
- if !find_object_check_maxWidth(cur_element, maxWidth)
514
- passCheck = false
515
- end
516
- end
517
-
518
- # Check minHeight
519
- if passCheck and minHeight > 0
520
- if !find_object_check_minHeight(cur_element, minHeight)
521
- passCheck = false
522
- end
523
- end
524
-
525
- # Check maxHeight
526
- if passCheck and maxHeight > 0
527
- if !find_object_check_maxHeight(cur_element, maxHeight)
528
- passCheck = false
529
- end
530
- end
531
-
532
- # Check another properties
533
- if passCheck and ano_pros.length > 0
534
- ano_pros.each{|property, value|
535
- if value =~ /^#/
536
- value = value[1..-1]
537
- end
538
- if !find_object_check_property(cur_element, property, value)
539
- passCheck = false
540
- break
541
- end
542
- }
543
- end
544
-
545
- return passCheck
546
- end
547
-
548
- return false
549
- end
550
-
551
- def find_object_check_Id(element, strId)
552
- actual_Id = element[:id]
553
- if actual_Id != nil and actual_Id.length > 0
554
- actual_Id = actual_Id.strip
555
- if reg_compare(actual_Id, strId)
556
- return true
557
- end
558
- end
559
-
560
- return false
561
- end
562
-
563
- def find_object_check_Class(element, strClass)
564
- actual_Class = element[:class]
565
- if actual_Class != nil and actual_Class.length > 0
566
- actual_Class = actual_Class.strip
567
- if reg_compare(actual_Class, strClass)
568
- return true
569
- end
570
- end
571
-
572
- return false
573
- end
574
-
575
- def find_object_check_Name(element, strName)
576
- actual_Name = element[:name]
577
- if actual_Name != nil and actual_Name.length > 0
578
- actual_Name = actual_Name.strip
579
- if reg_compare(actual_Name, strName)
580
- return true
581
- end
582
- end
583
-
584
- return false
585
- end
586
-
587
- def find_object_check_Tagname(element, strTagname)
588
- actual_Tagname = element.tag_name()
589
- if actual_Tagname != nil and actual_Tagname.length > 0
590
- actual_Tagname = actual_Tagname.strip
591
- if reg_compare(actual_Tagname, strTagname)
592
- return true
593
- end
594
- end
595
-
596
- return false
597
- end
598
-
599
- def find_object_check_Xpath(element, strXpath)
600
-
601
- end
602
-
603
- def find_object_check_Text(element, strText)
604
- actual_Text = element.text()
605
- if actual_Text != nil and actual_Text.length > 0
606
- actual_Text = actual_Text.strip
607
- if reg_compare(actual_Text, strText)
608
- return true
609
- end
610
- end
611
-
612
- return false
613
- end
614
-
615
- def find_object_check_minWidth(element, minWidth)
616
- width = element[:width]
617
- if (width >= minWidth)
618
- return true
619
- end
620
-
621
- return false
622
- end
623
-
624
- def find_object_check_maxWidth(element, maxWidth)
625
- width = element[:width]
626
- if (width <= maxWidth)
627
- return true
628
- end
629
-
630
- return false
631
- end
632
-
633
- def find_object_check_minHeight(element, minHeight)
634
- height = element[:height]
635
- if (height <= minHeight)
636
- return true
637
- end
638
-
639
- return false
640
- end
641
-
642
- def find_object_check_maxHeight(element, maxHeight)
643
- height = element[:height]
644
- if (height <= maxHeight)
645
- return true
646
- end
647
-
648
- return false
649
- end
650
-
651
- def find_object_check_ref_object(ref_object, ref_type, target_element)
652
- begin
653
- ref = ref_object.native
654
- target = target_element.native
655
- if(ref_type == "up" or ref_type == "down")
656
- ref_x1 = ref.location.x - 10
657
- ref_x2 = ref.location.x + ref.size.width + 10
658
- target_x1 = target.location.x
659
- target_x2 = target_x1 + target.size.width
660
- elsif(ref_type == "left" or ref_type == "right")
661
- ref_y1 = ref.location.y - 10
662
- ref_y2 = ref.location.y + ref_object.native.size.height + 10
663
- target_y1 = target.location.y
664
- target_y2 = target_y1 + target.size.height
665
- elsif(ref_type == "child" or ref_type == "parent")
666
- ref_W = ref.location.x + ref.size.width
667
- ref_H = ref.location.y + ref.size.height
668
- target_W = target.location.x + target.size.width
669
- target_H = target.location.y + target.size.height
670
- end
671
-
672
- if(ref_type == "up" and
673
- target_x1 > ref_x1 and target_x2 < ref_x2 and # has same column or X Position
674
- target.location.y < ref.location.y) # at row or Y position, target is upper
675
- return true
676
- elsif(ref_type == "down" and
677
- target_x1 > ref_x1 and target_x2 < ref_x2 and # has same column or X Position
678
- target.location.y > ref.location.y) # at row or Y position, target is at down
679
- return true
680
- elsif(ref_type == "left" and
681
- target.location.x < ref.location.x and # at column or X Position, target is at left
682
- target_y1 > ref_y1 and target_y2 < ref_y2) # at row or Y position, target is same as ref object
683
- return true
684
- elsif(ref_type == "right" and
685
- target.location.x > ref.location.x and # at column or X Position, target is at right
686
- target_y1 > ref_y1 and target_y2 < ref_y2) # at row or Y position, target is same as ref object
687
- return true
688
- elsif(ref_type == "child" and
689
- (target_W < ref_W) and (target_H < ref_H) and
690
- (target.location.x > ref.location.x) and (target.location.y > ref.location.y))
691
- return true
692
- elsif(ref_type == "parent" and
693
- (target_W > ref_W) and (target_H > ref_H) and
694
- (target.location.x < ref.location.x) and (target.location.y < ref.location.y))
695
- return true
696
- end
697
- rescue StandardError => e
698
- puts "Error: #{e.message}"
699
- end
700
-
701
- return false;
702
- end