Ifd_Mobile 0.1.4 → 0.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/Ifd_Mobile/lib_web.rb +118 -106
  3. data/lib/Ifd_Mobile/methods/IFD_Assertion.rb +44 -44
  4. data/lib/Ifd_Mobile/methods/core.rb +243 -231
  5. data/lib/Ifd_Mobile/methods/lib_var.rb +53 -53
  6. data/lib/Ifd_Mobile/version.rb +5 -5
  7. data/project/Gemfile +9 -9
  8. data/project/apps/TestApp/Test App 2/GestureTestViewController.h +18 -18
  9. data/project/apps/TestApp/Test App 2/GestureTestViewController.m +48 -48
  10. data/project/apps/TestApp/Test App 2/GestureTestViewController.xib +46 -46
  11. data/project/apps/TestApp/Test App 2/MyViewControllerViewController.h +42 -42
  12. data/project/apps/TestApp/Test App 2/MyViewControllerViewController.m +193 -193
  13. data/project/apps/TestApp/Test App 2/TA2AppDelegate.h +28 -28
  14. data/project/apps/TestApp/Test App 2/TA2AppDelegate.m +85 -85
  15. data/project/apps/TestApp/Test App 2/TestApp-Info.plist +40 -40
  16. data/project/apps/TestApp/Test App 2/TestApp-Prefix.pch +29 -29
  17. data/project/apps/TestApp/Test App 2/en.lproj/InfoPlist.strings +21 -21
  18. data/project/apps/TestApp/Test App 2/en.lproj/MyViewControllerViewController.xib +175 -175
  19. data/project/apps/TestApp/Test App 2/main.m +31 -31
  20. data/project/apps/TestApp/TestApp.xcodeproj/project.pbxproj +336 -336
  21. data/project/apps/TestApp/TestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -7
  22. data/project/apps/TestApp/TestApp.xcodeproj/xcuserdata/anhpham.xcuserdatad/xcschemes/TestApp.xcscheme +88 -88
  23. data/project/apps/TestApp/TestApp.xcodeproj/xcuserdata/anhpham.xcuserdatad/xcschemes/xcschememanagement.plist +22 -22
  24. data/project/features/android/Android_test1.feature +14 -14
  25. data/project/features/android/Android_test2.feature +14 -14
  26. data/project/features/iOS/iOS_test.feature +15 -17
  27. data/project/features/step_definitions/lib_steps/PolyClaim_homepage.rb +2 -2
  28. data/project/features/step_definitions/lib_steps/PolyClaim_loginpage.rb +3 -3
  29. data/project/features/step_definitions/repositories/android_ob_test.rb +9 -9
  30. data/project/features/step_definitions/repositories/ios_ob_test.rb +6 -6
  31. data/project/features/support/env.rb +36 -36
  32. data/project/features/support/hooks.rb +8 -8
  33. data/project/features/support/project_env.rb +42 -42
  34. metadata +40 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 949a421da04ff5b53b4dd75c27563dbd8da92348
4
- data.tar.gz: 328188e946f8b32c2bd3ece2206381dc80e7123a
3
+ metadata.gz: 29531fda5bb58f537c262d4fe275c5cbdb03390f
4
+ data.tar.gz: e1a423ebe2eca1d54734de37e45f46e7c1888f59
5
5
  SHA512:
6
- metadata.gz: 08833b006525152c84d0f8ff23f81f6b45ba687bc583ca0d9b5836d3250cd9f28aedd435b2cc9bdbfa8ee4784e51cdb80682a93035cf4981d3b52f5ffc362dc6
7
- data.tar.gz: 86e89630fdad43a08d843186381cf8cfb04b55a3f3aa3759d1a813e4181c536981c2ac21a134b8be73a863bf53f94ff67d7f91ec2e236ea0c6e3b065591c2759
6
+ metadata.gz: 210a2948c239bb7edd134f68ca46df26c53fea6fe4726f4e1d725c752f275289afa42111b4601078b96d8d2a872a3738be3a1fb87b35e62c15f80f808db65494
7
+ data.tar.gz: 123f938ce4cd4f9bc8e992011698e08257d5938e926b90321f7f1e943cc242e4133a018a4fa27752a6375f88835d4eb201a4044815e7ad75e51330595d2297c9
@@ -1,106 +1,118 @@
1
- require_relative 'methods/required_files'
2
-
3
- Given(/^I have App running with appium$/) do
4
- # Make sure you have started appium server
5
- end
6
-
7
- # Wait for the specific time
8
- When /^I wait for (\d+) seconds$/ do |second|
9
- sleep(second.to_i)
10
- end
11
-
12
- And /^I input text "(.*)" on "(.*)"$/ do |text,object|
13
- execute_settext(object,text)
14
- end
15
-
16
- And /^I click on "(.*)"$/ do |object|
17
- execute_click object
18
- end
19
-
20
- Then /^I verify property "(.*)" with "(.*)" has( | not)? value "(.*)"$/ do |object, property, negate, value|
21
- sleep(0.5)
22
- value = var_collect(value)
23
- execute_checkproperty(object, property, negate, value)
24
- end
25
-
26
- Given /^I click on element with x: "(.*)", y: "(.*)"$/ do |x,y|
27
- click_by_coordinate x,y
28
- end
29
-
30
- And /^I scroll the screen from startX (\d+) startY (\d+) to endX (\d+) endY (\d+) and millisecond timeout is (\d+)$/ do |startX, startY, endX, endY, timeout|
31
- selenium.swipe(startX:startX, startY:startY, endX:endX,endY:endY, duration:timeout)
32
- end
33
-
34
- Given /^I get attribute of element "(.*)"$/ do |element|
35
- found_element = find_object element
36
- actual_value = found_element.attribute("name")
37
- puts actual_value
38
- end
39
-
40
- And /^I rotate device to (landscape|portrait)$/ do |type|
41
- case type.to_sym
42
- when :landscape
43
- $driver.rotate :landscape
44
- when :portrait
45
- $driver.rotate :portrait
46
- else
47
- raise "ERROR: *** unknown rotate type"
48
- end
49
- end
50
-
51
- And /^I accept alert$/ do
52
- selenium.alert_accept
53
- end
54
-
55
- And /^I dismiss alert$/ do
56
- selenium.alert_dismiss
57
- end
58
-
59
- And /^I hide the keyboard$/ do
60
- selenium.hide_keyboard
61
- end
62
-
63
- And /^I delete an character$/ do
64
- system('adb shell input keyevent 67')
65
- end
66
-
67
- Then(/^I tap on back button of device$/) do
68
- navigate('back')
69
- end
70
-
71
- Then(/^I tap on forward button of device$/) do
72
- navigate('forward')
73
- end
74
-
75
- #---------- Swipe with direction
76
- Then(/^I swipe left$/) do
77
- swipe_direction("left")
78
- end
79
-
80
- Then(/^I swipe right$/) do
81
- swipe_direction("right")
82
- end
83
-
84
- Then(/^I swipe up$/) do
85
- swipe_direction("up")
86
- end
87
-
88
- Then(/^I swipe down$/) do
89
- swipe_direction("down")
90
- end
91
-
92
- Then(/^I long tap on element having "(.*?)"$/) do |element|
93
- long_press_on_element_default_duration(element)
94
- end
95
-
96
- Then(/^I long tap on element having (.+) "(.*?)" for "(.*?)" sec$/) do |element, duration|
97
- long_press_on_element_with_duration(element, duration)
98
- end
99
-
100
- Then(/^I long tap on co\-ordinate "(.*?)","(.*?)"$/) do |x, y|
101
- long_press_on_coordinates(x, y)
102
- end
103
-
104
- Then(/^I long tap on co\-ordinate "(.*?)","(.*?)" for "(.*?)" sec$/) do |x, y, duration|
105
- long_press_on_coordinates_with_duration(x, y, duration)
106
- end
1
+ require_relative 'methods/required_files'
2
+
3
+ Given(/^I have App running with appium$/) do
4
+ # Make sure you have started appium server
5
+ end
6
+
7
+ # Wait for the specific time
8
+ When /^I wait for (\d+) seconds$/ do |second|
9
+ sleep(second.to_i)
10
+ end
11
+
12
+ And /^I input text "(.*)" on "(.*)"$/ do |text,object|
13
+ execute_settext(object,text)
14
+ end
15
+
16
+ And /^I click on "(.*)"$/ do |object|
17
+ execute_click object
18
+ end
19
+
20
+ Then /^I verify property "(.*)" with "(.*)" has( | not)? value "(.*)"$/ do |object, property, negate, value|
21
+ sleep(0.5)
22
+ value = var_collect(value)
23
+ execute_checkproperty(object, property, negate, value)
24
+ end
25
+
26
+ Given /^I click on element with x: "(.*)", y: "(.*)"$/ do |x,y|
27
+ click_by_coordinate x,y
28
+ end
29
+
30
+ And /^I scroll the screen from startX (\d+) startY (\d+) to endX (\d+) endY (\d+) and millisecond timeout is (\d+)$/ do |startX, startY, endX, endY, timeout|
31
+ selenium.swipe(startX:startX, startY:startY, endX:endX,endY:endY, duration:timeout)
32
+ end
33
+
34
+ Given /^I get attribute of element "(.*)"$/ do |element|
35
+ found_element = find_object element
36
+ actual_value = found_element.attribute("name")
37
+ puts actual_value
38
+ end
39
+
40
+ And /^I rotate device to (landscape|portrait)$/ do |type|
41
+ case type.to_sym
42
+ when :landscape
43
+ $driver.rotate :landscape
44
+ when :portrait
45
+ $driver.rotate :portrait
46
+ else
47
+ raise "ERROR: *** unknown rotate type"
48
+ end
49
+ end
50
+
51
+ And /^I accept alert$/ do
52
+ selenium.alert_accept
53
+ end
54
+
55
+ And /^I dismiss alert$/ do
56
+ selenium.alert_dismiss
57
+ end
58
+
59
+ And /^I hide the keyboard$/ do
60
+ selenium.hide_keyboard
61
+ end
62
+
63
+ And /^I delete an character$/ do
64
+ system('adb shell input keyevent 67')
65
+ end
66
+
67
+ Then(/^I tap on back button of device$/) do
68
+ navigate('back')
69
+ end
70
+
71
+ Then(/^I tap on forward button of device$/) do
72
+ navigate('forward')
73
+ end
74
+
75
+ #---------- Swipe with direction
76
+ Then(/^I swipe left$/) do
77
+ swipe_direction("left")
78
+ end
79
+
80
+ Then(/^I swipe right$/) do
81
+ swipe_direction("right")
82
+ end
83
+
84
+ Then(/^I swipe up$/) do
85
+ swipe_direction("up")
86
+ end
87
+
88
+ Then(/^I swipe down$/) do
89
+ swipe_direction("down")
90
+ end
91
+
92
+ Then(/^I long tap on element having "(.*?)"$/) do |element|
93
+ long_press_on_element_default_duration(element)
94
+ end
95
+
96
+ Then(/^I long tap on element having (.+) "(.*?)" for "(.*?)" sec$/) do |element, duration|
97
+ long_press_on_element_with_duration(element, duration)
98
+ end
99
+
100
+ Then(/^I long tap on co\-ordinate "(.*?)","(.*?)"$/) do |x, y|
101
+ long_press_on_coordinates(x, y)
102
+ end
103
+
104
+ Then(/^I long tap on co\-ordinate "(.*?)","(.*?)" for "(.*?)" sec$/) do |x, y, duration|
105
+ long_press_on_coordinates_with_duration(x, y, duration)
106
+ end
107
+
108
+ Then(/^I close app$/) do
109
+ close_app
110
+ end
111
+
112
+ Then(/^I launch app$/) do
113
+ launch_app
114
+ end
115
+
116
+ Then(/^I reset app$/) do
117
+ reset_app
118
+ end
@@ -1,44 +1,44 @@
1
- # include Test::Unit::Assertions
2
- class IFD_Assertion
3
- # Assert 2 values
4
- def self.reg_compare sActual, regValue, isSpecialChar=false
5
- begin
6
- if !isSpecialChar
7
- sActual = sActual.strip
8
- regValue = regValue.strip.gsub("[", "\\[").gsub("]", "\\]").gsub("(", "\\(").gsub(")", "\\)").gsub(">", "\\>")
9
- end
10
- rescue StandardError => myStandardError
11
- put_log "\n>>> Error: #{myStandardError}"
12
- end
13
-
14
- # put_log "\nsActual:#{sActual}, regValue:#{regValue}"
15
- if ((sActual.nil? and regValue.nil?) or (!sActual.nil? and sActual.empty? and !regValue.nil? and regValue.empty?))
16
- return true
17
- end
18
-
19
- if ((sActual.nil? and !regValue.nil?) or (!sActual.nil? and regValue.nil?))
20
- return false
21
- end
22
-
23
- if (!sActual.nil? and !sActual.empty?)
24
- sCookActual = sActual.gsub(/\n|\r/, " ")
25
- if (sCookActual == regValue or (isSpecialChar and sCookActual.include? regValue) or (!isSpecialChar and sCookActual =~ /^.*#{regValue}.*$/))
26
- return true
27
- end
28
- end
29
-
30
- return false
31
- end
32
-
33
- def self.assert_string_contain(expected, actual)
34
- unless (actual.to_s).include? (expected.to_s)
35
- raise ("*** ASSERTION ERROR: \nExpected: #{expected}. \nGot: #{actual}.")
36
- end
37
- end
38
-
39
- def self.assert_string_equal(expected, actual)
40
- if expected.to_s != actual.to_s
41
- raise ("*** ASSERTION ERROR: \nExpected: #{expected}. \nGot: #{actual}.")
42
- end
43
- end
44
- end
1
+ # include Test::Unit::Assertions
2
+ class IFD_Assertion
3
+ # Assert 2 values
4
+ def self.reg_compare sActual, regValue, isSpecialChar=false
5
+ begin
6
+ if !isSpecialChar
7
+ sActual = sActual.strip
8
+ regValue = regValue.strip.gsub("[", "\\[").gsub("]", "\\]").gsub("(", "\\(").gsub(")", "\\)").gsub(">", "\\>")
9
+ end
10
+ rescue StandardError => myStandardError
11
+ put_log "\n>>> Error: #{myStandardError}"
12
+ end
13
+
14
+ # put_log "\nsActual:#{sActual}, regValue:#{regValue}"
15
+ if ((sActual.nil? and regValue.nil?) or (!sActual.nil? and sActual.empty? and !regValue.nil? and regValue.empty?))
16
+ return true
17
+ end
18
+
19
+ if ((sActual.nil? and !regValue.nil?) or (!sActual.nil? and regValue.nil?))
20
+ return false
21
+ end
22
+
23
+ if (!sActual.nil? and !sActual.empty?)
24
+ sCookActual = sActual.gsub(/\n|\r/, " ")
25
+ if (sCookActual == regValue or (isSpecialChar and sCookActual.include? regValue) or (!isSpecialChar and sCookActual =~ /^.*#{regValue}.*$/))
26
+ return true
27
+ end
28
+ end
29
+
30
+ return false
31
+ end
32
+
33
+ def self.assert_string_contain(expected, actual)
34
+ unless (actual.to_s).include? (expected.to_s)
35
+ raise ("*** ASSERTION ERROR: \nExpected: #{expected}. \nGot: #{actual}.")
36
+ end
37
+ end
38
+
39
+ def self.assert_string_equal(expected, actual)
40
+ if expected.to_s != actual.to_s
41
+ raise ("*** ASSERTION ERROR: \nExpected: #{expected}. \nGot: #{actual}.")
42
+ end
43
+ end
44
+ end
@@ -1,232 +1,244 @@
1
- $_RP_OBJECT = {}
2
-
3
- def call_step str_step
4
- put_log "\n-=> call step: #{str_step}"
5
- step %{#{str_step}}
6
- end
7
-
8
- def put_log str
9
- puts str if $_CONFIG['Print Log'] == true
10
- end
11
-
12
- def find_object string_object
13
- # startTime = Time.new.to_i
14
- string_object = string_object.gsub(/"/, "'")
15
- # puts string_object
16
- locator_matching = /(.*?)(\{.*?\})/.match(string_object)
17
- # puts "locator_matching : #{locator_matching}"
18
- dyn_pros = {}
19
- if locator_matching != nil
20
- string_object = locator_matching[1]
21
- eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
22
- dyn_pros[k.to_s.upcase] = v
23
- }
24
- end
25
- hash_object = $_RP_OBJECT[string_object]
26
- puts hash_object
27
- if hash_object == nil
28
- put_log ">>> OBJECT NAME MAYBE NOT FOUND!!!"
29
- true.should eq false
30
- end
31
- attribute = {}
32
- if hash_object != nil
33
- hash_object.each { |k, v|
34
- k = k.to_s
35
- if k =~ /ph_/i
36
- if dyn_pros[k] != nil
37
- # Assign place holder value to place holder property, also remove prefix ph_ from property key,
38
- # also remove this pl from dyn_pros <= should be consider to continue transfer into inner object in relation
39
- if v =~ /<ph_value>/i
40
- attribute[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
41
- else
42
- attribute[k[3..k.size-1]] = dyn_pros[k]
43
- end
44
- dyn_pros.delete(k)
45
- end
46
- else
47
- attribute[k.to_s] = v
48
- end
49
- }
50
- end
51
- # put_log string_object
52
- # put_log "\nattribute: #{attribute}"
53
-
54
- attribute.each { |key, value|
55
- $element_tag = key
56
- $element_value = value
57
- }
58
- return selenium.find_element($element_tag, $element_value)
59
- end
60
-
61
- def execute_click element
62
- found_element = find_object element
63
- if found_element != nil
64
- startTime = Time.new.to_i
65
- begin
66
- sleep(1)
67
- currentTime= Time.new.to_i
68
- end while (currentTime - startTime) < $_CONFIG['Wait Time']
69
- # selenium.execute_script('mobile: scroll', found_element)
70
- found_element.click
71
- else
72
- put_log "\nERROR: *** not found object: #{element}"
73
- end
74
- end
75
-
76
- def execute_settext element, text
77
- found_element = find_object element
78
- if found_element != nil
79
- begin
80
- sleep(1)
81
- # found_element.long_press_keycode(46)
82
- found_element.send_keys(text)
83
- rescue StandardError => myStandardError
84
- put_log "\nERROR: *** #{myStandardError}"
85
- end
86
- else
87
- put_log "\nERROR: *** not found object: #{element}"
88
- exit
89
- end
90
- end
91
-
92
- def execute_checkproperty element, property, negate, value
93
- found_element = find_object element
94
- check = false
95
- if found_element == nil and value == ""
96
- check = true
97
- expect(check).to eq true
98
- else
99
- put_log "\n*** Execute_CheckProperty: finish to found element"
100
- if found_element != nil
101
- if property.upcase == 'VALUE'
102
- actual_value = found_element.attribute("value")
103
- elsif property.upcase == 'NAME'
104
- actual_value = found_element.attribute("name")
105
- elsif property.upcase == 'LABEL'
106
- actual_value = found_element.attribute("label")
107
- elsif property.upcase == 'TYPE'
108
- actual_value = found_element.attribute("type")
109
- elsif property.upcase == 'ENABLE'
110
- actual_value = found_element.attribute("enable")
111
- else
112
- actual_value = found_element.attribute("#{property}")
113
- end
114
- if actual_value == nil
115
- actual_value = ''
116
- end
117
- else
118
- put_log "ERROR: *** Not found object: #{element}"
119
- end
120
-
121
- if IFD_Assertion.reg_compare(actual_value, value)
122
- check = true
123
- end
124
-
125
- put_log "\n#{property} :: Actual Result Is '#{actual_value}' -- Expected Result Is '#{value}'"
126
-
127
- if negate == " not"
128
- expect(check).not_to eql true
129
- elsif expect(check).to eq true
130
- end
131
- end
132
- end
133
-
134
- def click_by_coordinate x, y
135
- selenium.execute_script 'mobile: tap', :x => x, :y => y
136
- end
137
-
138
- # method to navigate back & forward
139
- def navigate(direction)
140
- if direction == 'back'
141
- selenium.navigate.back
142
- else
143
- selenium.navigate.forward
144
- end
145
- end
146
-
147
- def swipe_direction(direction)
148
- size = selenium.manage.window.size
149
- height = size.height.to_i - 10
150
- width = size.width.to_i - 10
151
-
152
- if direction == 'right'
153
- start_x = (width/100) * 15 # 83
154
- start_y = height/2 # 695
155
- end_x = (width/100) * 90 # 900
156
- end_y = height/2 # 630
157
- elsif direction == 'left'
158
- start_x = (width/100) * 90
159
- start_y = height/2
160
- end_x = (width/100) * 15
161
- end_y = height/2
162
- elsif direction == 'up'
163
- start_x = width/2
164
- start_y = (height/100) * 90
165
- end_x = width/2
166
- end_y = (height/100) * 15
167
- elsif direction == 'down'
168
- start_x = width/2
169
- start_y = (height/100) * 15
170
- end_x = width/2
171
- end_y = (height/100) * 90
172
- else
173
- raise "invalid direction"
174
- end
175
-
176
- swipe(start_x, start_y, end_x, end_y)
177
- end
178
-
179
- def swipe(start_x, start_y, end_x, end_y)
180
- action = Appium::TouchAction.new.press(x: "#{start_x}", y: "#{start_y}").wait(1000).move_to(x: "#{end_x}", y: "#{end_y}").release()
181
- action.perform
182
- end
183
-
184
-
185
- def long_press_on_element_default_duration(element)
186
- begin
187
- ele_from = find_object element.location
188
- x = ele_from.x
189
- y = ele_from.y
190
-
191
- action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait(2000).move_to(x: "#{x}", y: "#{y}").release()
192
- action.perform
193
- rescue Exception => e
194
- if e.to_s == 'The swipe did not complete successfully'
195
- print ""
196
- else
197
- raise e
198
- end
199
- end
200
- end
201
-
202
- def long_press_on_element_with_duration(element, duration)
203
- begin
204
- ele_from = find_object element.location
205
- x = ele_from.x
206
- y = ele_from.y
207
-
208
- duration = duration.to_i
209
- duration = duration * 1000
210
- action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait("#{duration}").move_to(x: "#{x}", y: "#{y}").release()
211
- action.perform
212
- rescue Exception => e
213
- if e.to_s == 'The swipe did not complete successfully'
214
- print ""
215
- else
216
- raise e
217
- end
218
- end
219
- end
220
-
221
- def long_press_on_coordinates(x, y)
222
- action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait(2000).move_to(x: "#{x}", y: "#{y}").release()
223
- action.perform
224
- end
225
-
226
- def long_press_on_coordinates_with_duration(x, y, duration)
227
- duration = duration.to_i
228
- duration = duration * 1000
229
- puts duration
230
- action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait("#{duration}").move_to(x: "#{x}", y: "#{y}").release()
231
- action.perform
1
+ $_RP_OBJECT = {}
2
+
3
+ def call_step str_step
4
+ put_log "\n-=> call step: #{str_step}"
5
+ step %{#{str_step}}
6
+ end
7
+
8
+ def put_log str
9
+ puts str if $_CONFIG['Print Log'] == true
10
+ end
11
+
12
+ def find_object string_object
13
+ # startTime = Time.new.to_i
14
+ string_object = string_object.gsub(/"/, "'")
15
+ # puts string_object
16
+ locator_matching = /(.*?)(\{.*?\})/.match(string_object)
17
+ # puts "locator_matching : #{locator_matching}"
18
+ dyn_pros = {}
19
+ if locator_matching != nil
20
+ string_object = locator_matching[1]
21
+ eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
22
+ dyn_pros[k.to_s.upcase] = v
23
+ }
24
+ end
25
+ hash_object = $_RP_OBJECT[string_object]
26
+ puts hash_object
27
+ if hash_object == nil
28
+ put_log ">>> OBJECT NAME MAYBE NOT FOUND!!!"
29
+ true.should eq false
30
+ end
31
+ attribute = {}
32
+ if hash_object != nil
33
+ hash_object.each { |k, v|
34
+ k = k.to_s
35
+ if k =~ /ph_/i
36
+ if dyn_pros[k] != nil
37
+ # Assign place holder value to place holder property, also remove prefix ph_ from property key,
38
+ # also remove this pl from dyn_pros <= should be consider to continue transfer into inner object in relation
39
+ if v =~ /<ph_value>/i
40
+ attribute[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
41
+ else
42
+ attribute[k[3..k.size-1]] = dyn_pros[k]
43
+ end
44
+ dyn_pros.delete(k)
45
+ end
46
+ else
47
+ attribute[k.to_s] = v
48
+ end
49
+ }
50
+ end
51
+ # put_log string_object
52
+ # put_log "\nattribute: #{attribute}"
53
+
54
+ attribute.each { |key, value|
55
+ $element_tag = key
56
+ $element_value = value
57
+ }
58
+ return selenium.find_element($element_tag, $element_value)
59
+ end
60
+
61
+ def execute_click element
62
+ found_element = find_object element
63
+ if found_element != nil
64
+ startTime = Time.new.to_i
65
+ begin
66
+ sleep(1)
67
+ currentTime= Time.new.to_i
68
+ end while (currentTime - startTime) < $_CONFIG['Wait Time']
69
+ # selenium.execute_script('mobile: scroll', found_element)
70
+ found_element.click
71
+ else
72
+ put_log "\nERROR: *** not found object: #{element}"
73
+ end
74
+ end
75
+
76
+ def execute_settext element, text
77
+ found_element = find_object element
78
+ if found_element != nil
79
+ begin
80
+ sleep(1)
81
+ # found_element.long_press_keycode(46)
82
+ found_element.send_keys(text)
83
+ rescue StandardError => myStandardError
84
+ put_log "\nERROR: *** #{myStandardError}"
85
+ end
86
+ else
87
+ put_log "\nERROR: *** not found object: #{element}"
88
+ exit
89
+ end
90
+ end
91
+
92
+ def execute_checkproperty element, property, negate, value
93
+ found_element = find_object element
94
+ check = false
95
+ if found_element == nil and value == ""
96
+ check = true
97
+ expect(check).to eq true
98
+ else
99
+ put_log "\n*** Execute_CheckProperty: finish to found element"
100
+ if found_element != nil
101
+ if property.upcase == 'VALUE'
102
+ actual_value = found_element.attribute("value")
103
+ elsif property.upcase == 'NAME'
104
+ actual_value = found_element.attribute("name")
105
+ elsif property.upcase == 'LABEL'
106
+ actual_value = found_element.attribute("label")
107
+ elsif property.upcase == 'TYPE'
108
+ actual_value = found_element.attribute("type")
109
+ elsif property.upcase == 'ENABLE'
110
+ actual_value = found_element.attribute("enable")
111
+ else
112
+ actual_value = found_element.attribute("#{property}")
113
+ end
114
+ if actual_value == nil
115
+ actual_value = ''
116
+ end
117
+ else
118
+ put_log "ERROR: *** Not found object: #{element}"
119
+ end
120
+
121
+ if IFD_Assertion.reg_compare(actual_value, value)
122
+ check = true
123
+ end
124
+
125
+ put_log "\n#{property} :: Actual Result Is '#{actual_value}' -- Expected Result Is '#{value}'"
126
+
127
+ if negate == " not"
128
+ expect(check).not_to eql true
129
+ elsif expect(check).to eq true
130
+ end
131
+ end
132
+ end
133
+
134
+ def click_by_coordinate x, y
135
+ selenium.execute_script 'mobile: tap', :x => x, :y => y
136
+ end
137
+
138
+ # method to navigate back & forward
139
+ def navigate(direction)
140
+ if direction == 'back'
141
+ selenium.navigate.back
142
+ else
143
+ selenium.navigate.forward
144
+ end
145
+ end
146
+
147
+ def swipe_direction(direction)
148
+ size = selenium.manage.window.size
149
+ height = size.height.to_i - 10
150
+ width = size.width.to_i - 10
151
+
152
+ if direction == 'right'
153
+ start_x = (width/100) * 15 # 83
154
+ start_y = height/2 # 695
155
+ end_x = (width/100) * 90 # 900
156
+ end_y = height/2 # 630
157
+ elsif direction == 'left'
158
+ start_x = (width/100) * 90
159
+ start_y = height/2
160
+ end_x = (width/100) * 15
161
+ end_y = height/2
162
+ elsif direction == 'up'
163
+ start_x = width/2
164
+ start_y = (height/100) * 90
165
+ end_x = width/2
166
+ end_y = (height/100) * 15
167
+ elsif direction == 'down'
168
+ start_x = width/2
169
+ start_y = (height/100) * 15
170
+ end_x = width/2
171
+ end_y = (height/100) * 90
172
+ else
173
+ raise "invalid direction"
174
+ end
175
+
176
+ swipe(start_x, start_y, end_x, end_y)
177
+ end
178
+
179
+ def swipe(start_x, start_y, end_x, end_y)
180
+ action = Appium::TouchAction.new.press(x: "#{start_x}", y: "#{start_y}").wait(1000).move_to(x: "#{end_x}", y: "#{end_y}").release()
181
+ action.perform
182
+ end
183
+
184
+
185
+ def long_press_on_element_default_duration(element)
186
+ begin
187
+ ele_from = find_object element.location
188
+ x = ele_from.x
189
+ y = ele_from.y
190
+
191
+ action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait(2000).move_to(x: "#{x}", y: "#{y}").release()
192
+ action.perform
193
+ rescue Exception => e
194
+ if e.to_s == 'The swipe did not complete successfully'
195
+ print ""
196
+ else
197
+ raise e
198
+ end
199
+ end
200
+ end
201
+
202
+ def long_press_on_element_with_duration(element, duration)
203
+ begin
204
+ ele_from = find_object element.location
205
+ x = ele_from.x
206
+ y = ele_from.y
207
+
208
+ duration = duration.to_i
209
+ duration = duration * 1000
210
+ action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait("#{duration}").move_to(x: "#{x}", y: "#{y}").release()
211
+ action.perform
212
+ rescue Exception => e
213
+ if e.to_s == 'The swipe did not complete successfully'
214
+ print ""
215
+ else
216
+ raise e
217
+ end
218
+ end
219
+ end
220
+
221
+ def long_press_on_coordinates(x, y)
222
+ action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait(2000).move_to(x: "#{x}", y: "#{y}").release()
223
+ action.perform
224
+ end
225
+
226
+ def long_press_on_coordinates_with_duration(x, y, duration)
227
+ duration = duration.to_i
228
+ duration = duration * 1000
229
+ puts duration
230
+ action = Appium::TouchAction.new.press(x: "#{x}", y: "#{y}").wait("#{duration}").move_to(x: "#{x}", y: "#{y}").release()
231
+ action.perform
232
+ end
233
+
234
+ def close_app
235
+ $driver.close_app
236
+ end
237
+
238
+ def launch_app
239
+ $driver.launch_app
240
+ end
241
+
242
+ def reset_app
243
+ $driver.reset
232
244
  end