cutedriver-qt-sut-plugin 2.0.0.20210120165900

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 (73) hide show
  1. checksums.yaml +7 -0
  2. data/env.rb +24 -0
  3. data/installer/extconf.rb +62 -0
  4. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin.rb +23 -0
  5. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/action.rb +157 -0
  6. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb +312 -0
  7. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/attribute.rb +300 -0
  8. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/behaviour.rb +214 -0
  9. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/configure_behaviour.rb +317 -0
  10. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/cute_cpu.rb +145 -0
  11. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/cute_gpu.rb +147 -0
  12. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/cute_mem.rb +142 -0
  13. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/cute_pwr.rb +146 -0
  14. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/events.rb +192 -0
  15. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/file_transfer.rb +375 -0
  16. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/find.rb +82 -0
  17. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fixture.rb +214 -0
  18. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fps.rb +189 -0
  19. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/gesture.rb +1039 -0
  20. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/infologger.rb +767 -0
  21. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/key_press.rb +166 -0
  22. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/locale_db.rb +157 -0
  23. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/method.rb +112 -0
  24. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/multitouch.rb +474 -0
  25. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/os.rb +100 -0
  26. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/qt_api_method.rb +148 -0
  27. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/record.rb +134 -0
  28. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/screen_capture.rb +279 -0
  29. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/settings.rb +302 -0
  30. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/sut.rb +840 -0
  31. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/synchronization.rb +257 -0
  32. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/treewidgetitemcolumn.rb +117 -0
  33. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/type_text.rb +97 -0
  34. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/view_item.rb +97 -0
  35. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/webkit.rb +272 -0
  36. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/widget.rb +877 -0
  37. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/action.rb +30 -0
  38. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/configure_command.rb +38 -0
  39. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/drag.rb +44 -0
  40. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/find_object.rb +67 -0
  41. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/group.rb +44 -0
  42. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/infologger_command.rb +38 -0
  43. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/qt.rb +171 -0
  44. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/tap.rb +54 -0
  45. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/version.rb +34 -0
  46. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/widget.rb +199 -0
  47. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/agent.rb +54 -0
  48. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/application.rb +192 -0
  49. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/configure_command.rb +53 -0
  50. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/find_object.rb +48 -0
  51. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/fixture.rb +65 -0
  52. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/group.rb +57 -0
  53. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/infologger_command.rb +53 -0
  54. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/key_sequence.rb +93 -0
  55. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/screen_capture.rb +53 -0
  56. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/tap.rb +62 -0
  57. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/version.rb +46 -0
  58. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/widget.rb +98 -0
  59. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/plugin.rb +200 -0
  60. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/adapter.rb +466 -0
  61. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/communication.rb +185 -0
  62. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/controller.rb +69 -0
  63. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/find_object_generator.rb +287 -0
  64. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/fixture_parameter.rb +77 -0
  65. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/message_composer.rb +370 -0
  66. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/widget.rb +79 -0
  67. data/lib/testability-driver-qt-sut-plugin.rb +24 -0
  68. data/xml/behaviour/qt.xml +845 -0
  69. data/xml/defaults/sut_qt.xml +9 -0
  70. data/xml/keymap/qt.xml +321 -0
  71. data/xml/keymap/win.xml +174 -0
  72. data/xml/template/qt.xml +141 -0
  73. metadata +127 -0
@@ -0,0 +1,97 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ module MobyBehaviour
21
+
22
+ module QT
23
+
24
+ # == description
25
+ # ViewItem specific behaviours
26
+ #
27
+ # == behaviour
28
+ # QtViewItem
29
+ #
30
+ # == requires
31
+ # testability-driver-qt-sut-plugin
32
+ #
33
+ # == input_type
34
+ # *
35
+ #
36
+ # == sut_type
37
+ # QT
38
+ #
39
+ # == sut_version
40
+ # *
41
+ #
42
+ # == objects
43
+ # ItemData;QTreeWidgetItem;QListWidgetItem;QTableWidgetItem
44
+ #
45
+ module ViewItem
46
+
47
+ include MobyBehaviour::QT::Behaviour
48
+
49
+ # == description
50
+ # Selects an item from a list that uses qt view model system (e.g. QTreeView)
51
+ # == returns
52
+ # NilClass
53
+ # description: -
54
+ # example: -
55
+ def select
56
+
57
+ ret = nil
58
+
59
+ begin
60
+
61
+ button = :Left
62
+ command = MobyCommand::WidgetCommand.new
63
+ command.set_object_id(attribute('viewPort'))
64
+ command.application_id(get_application_id)
65
+ command.object_type(:Standard)
66
+ command.command_name('Tap')
67
+ command.set_event_type(sut_parameters[ :event_type, "0" ])
68
+
69
+ mouse_move = @sut.parameter[:in_tap_move_pointer]
70
+ mouse_move = 'false' unless mouse_move
71
+
72
+ params = {'x'=>center_x, 'y' => center_y, 'count' => 1, 'button' => @@_buttons_map[button], 'mouseMove'=>mouse_move, 'useCoordinates' => 'true'}
73
+
74
+ command.set_event_type(sut_parameters[ :event_type, "0" ])
75
+
76
+ command.command_params(params)
77
+ @sut.execute_command(command)
78
+
79
+ rescue Exception => e
80
+
81
+ $logger.behaviour "FAIL;Failed select"#{identity};drag;"
82
+ raise e
83
+
84
+ end
85
+
86
+ $logger.behaviour "PASS;Operation select executed successfully"#{identity};drag;"
87
+ ret
88
+
89
+ end
90
+
91
+ # enable hooking for performance measurement & debug logging
92
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
93
+ end
94
+
95
+ end
96
+
97
+ end
@@ -0,0 +1,272 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ module MobyBehaviour
21
+
22
+ module QT
23
+
24
+ # == description
25
+ # Webkit specific behaviours
26
+ #
27
+ # == behaviour
28
+ # QtWebkit
29
+ #
30
+ # == requires
31
+ # testability-driver-qt-sut-plugin
32
+ #
33
+ # == input_type
34
+ # *
35
+ #
36
+ # == sut_type
37
+ # QT;S60QT
38
+ #
39
+ # == sut_version
40
+ # *
41
+ #
42
+ # == objects
43
+ # *
44
+ #
45
+ module Webkit
46
+
47
+ include MobyBehaviour::QT::Behaviour
48
+
49
+ # == nodoc
50
+ # == description
51
+ # Send javascript to target object on the screen
52
+ # == params
53
+ # java_script::( )java script to be executed to target object
54
+ # == returns
55
+ # == raises
56
+ # TestObjectNotFoundError:: If a graphics item is not visible on screen
57
+ # ArgumentError:: If an invalid button type is given
58
+ # ArgumentError:: If coordinates are outside of the object
59
+ # === examples
60
+ # @object.execute_javascript_query
61
+ def execute_javascript_query(java_script, locator_query = nil, index = -1, webframe_id = 0)
62
+
63
+ returnValue = ""
64
+
65
+ begin
66
+
67
+ command = command_params #in qt_behaviour
68
+ =begin
69
+ if(locator_query == nil)
70
+ command.command_name('ExecuteJavaScriptOnQWebFrame')
71
+ locator_query=""
72
+ else
73
+ command.command_name('ExecuteJavaScriptOnWebElement')
74
+ end
75
+ =end
76
+
77
+ if type != "QWebFrame"
78
+ command.command_name('ExecuteJavaScriptOnWebElement')
79
+ webframe_id = attribute('webFrame') if webframe_id.to_s == "0"
80
+ else
81
+ command.command_name('ExecuteJavaScriptOnQWebFrame')
82
+ end
83
+
84
+ command.service( 'webkitCommand' )
85
+ params = {
86
+ 'java_script' => java_script,
87
+ 'locator_query' => locator_query,
88
+ 'index' => index.to_s,
89
+ 'elementId' => @id.to_s,
90
+ 'webframe_id' => webframe_id.to_s
91
+ }
92
+
93
+ command.command_params( params )
94
+
95
+ returnValue = @sut.execute_command( command )
96
+
97
+ rescue Exception => e
98
+
99
+ $logger.behaviour "FAIL;Failed send javascript with execute_javascript \"#{java_script}\""
100
+ raise e
101
+
102
+ end
103
+
104
+ $logger.behaviour "PASS;Operation send javascript executed successfully with execute_javascript \"#{java_script}\""
105
+
106
+ returnValue
107
+
108
+ end
109
+
110
+ # == description
111
+ # Executes java script on the target test object
112
+ #
113
+ # == arguments
114
+ # java_script
115
+ # String
116
+ # description: Script to be executed to target object
117
+ # example: "this.onclick();"
118
+ #
119
+ # == returns
120
+ # MobyBase::TestObject
121
+ # description: Target test object
122
+ # example: -
123
+ #
124
+ # == raises
125
+ # RuntimeError
126
+ # description: When executing JavaScript to QWebFrame: QWebPage not found.
127
+ #
128
+ # RuntimeError
129
+ # description: When executing JavaScript to QWebFrame: QWebFrame not found.
130
+ #
131
+ # RuntimeError
132
+ # description: When executing JavaScript to WebElement: QWebPage not found.
133
+ #
134
+ # RuntimeError
135
+ # description: When executing JavaScript to WebElement: QWebElement not found.
136
+ #
137
+ def execute_javascript( java_script )
138
+
139
+ webframe_id = 0
140
+ query = ""
141
+ index = -1
142
+ if type == "QWebFrame"
143
+ query = nil
144
+ else
145
+ query << self.type.to_s
146
+ creation_attributes.each {|param, value|
147
+ if param.to_s == "__index"
148
+ index=value.to_i
149
+ next
150
+ end
151
+ query << "[" << param.to_s << "='" << value.to_s << "'" << "]"
152
+ }
153
+ end
154
+
155
+ if type != "QWebFrame" #&& parent_object.type == "QWebFrame")
156
+ #webframe_id = parent_object.id
157
+ webframe_id = attribute('webFrame')
158
+ end
159
+
160
+ execute_javascript_query( java_script, nil, index, webframe_id)
161
+ end
162
+
163
+ # == description
164
+ # Scroll QWebFrame to correct position. Valid target object types are: QWebFrame, all QWebElements.
165
+ #
166
+ # == arguments
167
+ # dx
168
+ # Fixnum
169
+ # description: Delta x in pixels, positive value to right negative to left. Ignored for QWebElements.
170
+ # example: 313
171
+ #
172
+ # dy
173
+ # Fixnum
174
+ # description: Delta y in pixels, positive value to down negative to up. Ignored for QWebElements.
175
+ # example: 313
176
+ #
177
+ # center
178
+ # Fixnum
179
+ # description: Value 1 means that scroll is done only to reveal the center position of the element. Value 0 means that element is tried to bring fully visible. Ignored for QWebFrame.
180
+ # example: 1
181
+ #
182
+ # == returns
183
+ # NilClass
184
+ # description: -
185
+ # example: -
186
+ #
187
+ # == exceptions
188
+ # RuntimeError
189
+ # description: Scrollign webframe failed with error: %s
190
+ #
191
+ # === examples
192
+ # @QwebFrame.scroll(0, 10)
193
+ # @app.a.scroll()
194
+ def scroll( dx = 0, dy = 0, center = 0 )
195
+ temp_id = ""
196
+
197
+ if type == "QWebFrame"
198
+ temp_id = @id
199
+ else
200
+ temp_id = attribute('webFrame')
201
+
202
+ elemens_xml_data, unused_rule = @test_object_adapter.get_objects( @sut.xml_data, { :id => attribute('webFrame')}, true )
203
+ object_xml_data = elemens_xml_data[0]
204
+ object_attributes = @test_object_adapter.test_object_attributes(object_xml_data)
205
+ x_absolute = object_attributes['x_absolute'].to_i
206
+ y_absolute = object_attributes['y_absolute'].to_i
207
+ width = object_attributes['width'].to_i
208
+ height = object_attributes['height'].to_i
209
+ horizontalScrollBarHeight = object_attributes['horizontalScrollBarHeight'].to_i
210
+ verticalScrollBarWidth = object_attributes['verticalScrollBarWidth'].to_i
211
+
212
+ #calculate borders
213
+ frame_down_border = y_absolute + height - horizontalScrollBarHeight
214
+ frame_right_border = x_absolute + width - verticalScrollBarWidth
215
+
216
+ if(center==1)
217
+
218
+ #adjust image to be visible for tap
219
+ if(center_y.to_i > frame_down_border)
220
+ dy = center_y.to_i - frame_down_border + 5
221
+ elsif (center_y.to_i < y_absolute)
222
+ dy = center_y.to_i - y_absolute - 5
223
+ end
224
+
225
+ if(center_x.to_i > frame_right_border)
226
+ dx = center_x.to_i - frame_right_border + 1
227
+ elsif (center_x.to_i < x_absolute)
228
+ dx = center_x.to_i - x_absolute - 1
229
+ end
230
+ else
231
+ #bring fully visible
232
+ if(center_y.to_i > frame_down_border)
233
+ dy = attribute("y_absolute").to_i + attribute("height").to_i - y_absolute - height + horizontalScrollBarHeight
234
+ elsif (center_y.to_i < y_absolute)
235
+ dy = attribute("y_absolute").to_i - y_absolute
236
+ end
237
+
238
+ if(center_x.to_i > frame_right_border)
239
+ dx = attribute("x_absolute").to_i + attribute("width").to_i - x_absolute - width + verticalScrollBarWidth
240
+ elsif (center_x.to_i < x_absolute)
241
+ dx = attribute("x_absolute").to_i - x_absolute
242
+ end
243
+ end
244
+ end
245
+
246
+ command = command_params #in qt_behaviour
247
+ command.command_name('ScrollQWebFrame')
248
+
249
+ command.service( 'webkitCommand' )
250
+ params = {
251
+ 'dx' => dx.to_s,
252
+ 'dy'=> dy.to_s,
253
+ 'target_webframe'=> temp_id
254
+ }
255
+
256
+ command.command_params( params )
257
+
258
+ returnValue = @sut.execute_command( command )
259
+ raise RuntimeError.new( "Scrollign webframe failed with error: %s" % [ returnValue ] ) if ( returnValue != "OK" )
260
+
261
+ end
262
+
263
+
264
+ # enable hooking for performance measurement & debug logging
265
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
266
+
267
+
268
+ end # Webkit
269
+
270
+ end # QT
271
+
272
+ end # MobyBehaviour
@@ -0,0 +1,877 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ # TODO: document
21
+ module MobyBehaviour
22
+
23
+ module QT
24
+
25
+ # == description
26
+ # Widget specific behaviours
27
+ #
28
+ # == behaviour
29
+ # QtWidget
30
+ #
31
+ # == requires
32
+ # testability-driver-qt-sut-plugin
33
+ #
34
+ # == input_type
35
+ # touch
36
+ #
37
+ # == sut_type
38
+ # qt
39
+ #
40
+ # == sut_version
41
+ # *
42
+ #
43
+ # == objects
44
+ # *
45
+ #
46
+ module Widget
47
+
48
+ include MobyBehaviour::QT::Behaviour
49
+
50
+ # == description
51
+ # Moves the mouse to the object it was called on.
52
+ # == arguments
53
+ # move_params
54
+ # Boolean
55
+ # description: if true will cause the framework to refresh the UI state
56
+ # example: true
57
+ # == returns
58
+ # NilClass
59
+ # description: -
60
+ # example: -
61
+ # == examples
62
+ # @object.move_mouse
63
+ def move_mouse( move_params = false )
64
+
65
+ $stderr.puts "#{ caller(0).last.to_s } warning: move_mouse(boolean) is deprecated; use move_mouse(Hash)" if move_params == true
66
+
67
+ begin
68
+ # Hide all future params in a hash
69
+ use_tap_screen = false
70
+ if move_params.kind_of? Hash
71
+ use_tap_screen = move_params[:use_tap_screen].nil? ? sut_parameters[ :use_tap_screen, 'false'] : move_params[:use_tap_screen].to_s
72
+ else
73
+ use_tap_screen = sut_parameters[ :use_tap_screen, 'false']
74
+ end
75
+ command = command_params #in qt_behaviour
76
+ command.command_name('MouseMove')
77
+
78
+ if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
79
+ params = {
80
+ 'x' => center_x,
81
+ 'y' => center_y,
82
+ 'useCoordinates' => 'true',
83
+ 'useTapScreen' => use_tap_screen,
84
+ 'x_off' => sut_parameters[:tap_x_offset , '0' ],
85
+ 'y_off' => sut_parameters[:tap_y_offset , '0' ]
86
+ }
87
+ else
88
+ params = {'useTapScreen' => use_tap_screen.to_s}
89
+ end
90
+ command.command_params(params)
91
+
92
+ execute_behavior(move_params, command)
93
+
94
+ rescue Exception
95
+
96
+ $logger.behaviour "FAIL;Failed to mouse_move"
97
+
98
+ raise
99
+
100
+ end
101
+
102
+ $logger.behaviour "PASS;Operation mouse_move executed successfully"
103
+
104
+ nil
105
+
106
+ end
107
+
108
+ # == description
109
+ # Taps the screen on the coordinates of the object.
110
+ #
111
+ # == arguments
112
+ # tap_params
113
+ # Hash
114
+ # description: arguments hash, see table below. If integer instead of a Hash, then this has deprecated meaning tap_count, which is also why default value is a number.
115
+ # example: -
116
+ # interval
117
+ # Integer
118
+ # description: DEPRECATED, use hash key :interval instead
119
+ # example: -
120
+ # button
121
+ # Symbol
122
+ # description: DEPRECATED, use hash key :button instead
123
+ # example: -
124
+ #
125
+ # == tables
126
+ # tap_params_table
127
+ # title: Hash argument tap_params
128
+ # description: Valid keys for argument tap_params as hash
129
+ # |Key|Description|Type|Example|Default|
130
+ # |:button|Button to use for tapping|Symbol|:Right|:Left|
131
+ # |:duration|Duration in seconds for a single left button press, all other arguments ignored|Numeric|0.1|-|
132
+ # |:interval|This method sleeps tap_count times interval|Integer|2|1|
133
+ # |:tap_count|Number of taps to do|Integer|2|1|
134
+ # |:use_tap_screen|Should tapping be done on screen or as mouse event to the object|Boolean|true|see TDriver parameters table below|
135
+ # |:ensure_event|Verify that an event is sent to the target object. Retry if not received by target|Boolean|true|false|
136
+ #
137
+ # tdriver_params_table
138
+ # title: Default values read from tdriver parameters
139
+ # description: These setting values are read from tdriver_parameters.xml
140
+ # |Name|Description|Default if missing from parameters|
141
+ # |use_tap_screen|See :use_tap_screen above|false|
142
+ # |in_tap_move_pointer|Wether to actually move mouse pointer to tap coordinates|false|
143
+ # |:ensure_event|Verify that an event is sent to the target object. Retry if not received by target|false|
144
+ #
145
+ # == returns
146
+ # NilClass
147
+ # description: -
148
+ # example: -
149
+ #
150
+ # == exceptions
151
+ # TestObjectNotFoundError
152
+ # description: object is not visible on screen
153
+ # ArgumentError
154
+ # description: Invalid button or non-integer interval
155
+ def tap( tap_params = 1, interval = nil, button = :Left )
156
+ # tapMeasure = Time.now
157
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - tap start"
158
+
159
+ # delegate duration taps to grouped behaviors
160
+ if tap_params.kind_of?(Hash) && !tap_params[:duration].nil?
161
+ @sut.group_behaviours(tap_params[:duration], get_application) {
162
+ tap_down
163
+ tap_up
164
+ }
165
+ return
166
+ end
167
+
168
+ begin
169
+ #for api compatibility
170
+ if interval and interval.kind_of?(Symbol)
171
+ button = interval
172
+ interval = nil
173
+ end
174
+
175
+ # Another one, first param a has for the rest
176
+ if tap_params.kind_of?(Hash)
177
+ interval = tap_params[:interval]
178
+ if tap_params[:button].nil?
179
+ button = :Left
180
+ else
181
+ button = tap_params[:button]
182
+ end
183
+
184
+ tap_count = tap_params[:tap_count].nil? ? 1 : tap_params[:tap_count]
185
+ use_tap_screen = tap_params[:use_tap_screen].nil? ? sut_parameters[ :use_tap_screen, 'false'] : tap_params[:use_tap_screen].to_s
186
+
187
+ else
188
+ tap_count = tap_params
189
+
190
+ use_tap_screen = sut_parameters[ :use_tap_screen, 'false']
191
+ end
192
+
193
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
194
+ if interval
195
+ raise ArgumentError.new( "Invalid interval must be an integer." ) unless interval.kind_of?(Integer)
196
+ end
197
+
198
+ command = command_params #in qt_behaviour
199
+ command.command_name('Tap')
200
+
201
+ params = {
202
+ 'count' => tap_count.to_s,
203
+ 'button' => @@_buttons_map[button],
204
+ 'mouseMove' => sut_parameters[ :in_tap_move_pointer, 'false' ],
205
+ 'useTapScreen' => use_tap_screen,
206
+ 'x_off' => sut_parameters[:tap_x_offset , '0' ],
207
+ 'y_off' => sut_parameters[:tap_y_offset , '0' ]
208
+ }
209
+
210
+
211
+ if interval
212
+ params[:interval] = (interval.to_f * 1000).to_i
213
+ end
214
+
215
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - before webs"
216
+
217
+ if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
218
+ #params['obj_x'] = (center_x.to_i - 1).to_s
219
+ #params['obj_y'] = (center_y.to_i - 1).to_s
220
+ params['x'] = (center_x.to_i - 1).to_s
221
+ params['y'] = (center_y.to_i - 5).to_s #make sure we do not tap between two line links
222
+ params['useCoordinates'] = 'true'
223
+ end
224
+
225
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - before 2 webs"
226
+
227
+ if(attribute('objectType') == 'Web')
228
+ #check that type is not QWebFrame and that QWebFrame is found for object
229
+ if type != "QWebFrame" and attributes.key?('webFrame')
230
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - Not q webframe"
231
+ elemens_xml_data, unused_rule = @test_object_adapter.get_objects( @sut.xml_data, { :id => attribute('webFrame')}, true )
232
+ object_xml_data = elemens_xml_data[0]
233
+ object_attributes = @test_object_adapter.test_object_attributes(object_xml_data)
234
+ x_absolute = object_attributes['x_absolute'].to_i
235
+ y_absolute = object_attributes['y_absolute'].to_i
236
+ width = object_attributes['width'].to_i
237
+ height = object_attributes['height'].to_i
238
+ horizontalScrollBarHeight = object_attributes['horizontalScrollBarHeight'].to_i
239
+ verticalScrollBarWidth = object_attributes['verticalScrollBarWidth'].to_i
240
+
241
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - x_a(#{x_absolute}), y_a(#{y_absolute}), w(#{width}), h(#{height})"
242
+
243
+
244
+ if(object_attributes['baseUrl'] != "" and (
245
+ (center_x.to_i < x_absolute) or
246
+ (center_x.to_i > x_absolute + width - verticalScrollBarWidth) or
247
+ (center_y.to_i < y_absolute) or
248
+ (center_y.to_i > y_absolute + height - horizontalScrollBarHeight)
249
+ )
250
+ )
251
+ #puts "web element scroll"
252
+ scroll(0,0,1) # enable tap centralization
253
+ #puts "web element force refresh in tap"
254
+ force_refresh({:id => get_application_id})
255
+ tap(tap_params, interval, button)
256
+ return
257
+ end
258
+ end
259
+ end
260
+ command.command_params(params)
261
+
262
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - tap about to execute "
263
+ execute_behavior(tap_params, command)
264
+
265
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - executed"
266
+ #do not allow operations to continue untill taps done
267
+ if interval
268
+ sleep interval * tap_count
269
+ end
270
+
271
+ rescue Exception
272
+
273
+ $logger.behaviour "FAIL;Failed tap with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};tap;"
274
+
275
+ raise
276
+
277
+ end
278
+
279
+ $logger.behaviour "PASS;Operation tap executed successfully with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};tap;"
280
+
281
+ # puts "tap: " + (Time.now - tapMeasure).to_s + " s - tapping ending"
282
+
283
+
284
+ nil
285
+
286
+ end
287
+
288
+
289
+ # == description
290
+ # Taps the screen on the specified coordinates of the object. Given coordinates are relative to the object.
291
+ #
292
+ # == arguments
293
+ # x
294
+ # Integer
295
+ # description: x coordinate inside object to click
296
+ # example: 5
297
+ #
298
+ # y
299
+ # Integer
300
+ # description: y coordinate inside object to click
301
+ # example: 5
302
+ #
303
+ # tap_count
304
+ # Integer
305
+ # description: number of times to tap the screen
306
+ # example: 1
307
+ #
308
+ # button
309
+ # Symbol
310
+ # description: button symbol supported values are: :NoButton, :Left, :Right, :Middle
311
+ # example: :Left
312
+ #
313
+ # tap_params
314
+ # Hash
315
+ # description: parameter that also incorporate all previous tap_object_* commands :command, :behavior_name and :use_tap_screen
316
+ # example: { }
317
+ #
318
+ # == returns
319
+ # NilClass
320
+ # description: -
321
+ # example: nil
322
+ #
323
+ # == exceptions
324
+ # TestObjectNotFoundError
325
+ # description: If a graphics item is not visible on screen
326
+ #
327
+ # ArgumentError
328
+ # description: If coordinates are outside of the object
329
+ #
330
+ def tap_object( x, y, tap_count = 1, button = :Left, tap_params = nil )
331
+
332
+ begin
333
+
334
+ # New hash format for the parameter. Also incorporates all
335
+ # previous tap_object_* commands that were redundant.
336
+ if tap_params.kind_of? Hash
337
+ command_name = tap_params[:command].nil? ? 'Tap' : tap_params[:command]
338
+ behavior_name = tap_params[:behavior_name].nil? ? 'tap_object' : tap_params[:behavior_name]
339
+
340
+ use_tap_screen = tap_params[:use_tap_screen].nil? ? sut_parameters[ :use_tap_screen, 'false'] : tap_params[:use_tap_screen].to_s
341
+ else
342
+ use_tap_screen = sut_parameters[ :use_tap_screen, 'false']
343
+ command_name = 'Tap'
344
+ behavior_name = 'tap_object'
345
+ end
346
+
347
+ raise ArgumentError.new( "Coordinate x:#{x} x_abs:#{x} outside object." ) unless ( x <= attribute( 'width' ).to_i and x >= 0 )
348
+ raise ArgumentError.new( "Coordinate y:#{y} y_abs:#{y} outside object." ) unless ( y <= attribute( 'height' ).to_i and y >= 0 )
349
+
350
+ command = command_params #in qt_behaviour
351
+ command.command_name(command_name)
352
+
353
+
354
+
355
+ command.command_params(
356
+ 'x' => ( attribute('x_absolute').to_i + x.to_i ).to_s,
357
+ 'y' => ( attribute('y_absolute').to_i + y.to_i ).to_s,
358
+ 'count' => tap_count.to_s,
359
+ 'button' => @@_buttons_map[ button ],
360
+ 'mouseMove' => sut_parameters[ :in_tap_move_pointer, 'false' ],
361
+ 'useCoordinates' => 'true',
362
+ 'useTapScreen' => use_tap_screen,
363
+ 'x_off' => sut_parameters[:tap_x_offset , '0' ],
364
+ 'y_off' => sut_parameters[:tap_y_offset , '0' ]
365
+
366
+ )
367
+
368
+ execute_behavior(tap_params, command)
369
+
370
+ rescue Exception
371
+
372
+ $logger.behaviour "FAIL;Failed #{behavior_name} with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};#{behavior_name};"
373
+
374
+ raise
375
+
376
+ end
377
+
378
+ $logger.behaviour "PASS;Operation #{behavior_name} executed successfully with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};#{behavior_name};"
379
+
380
+ nil
381
+
382
+ end
383
+
384
+
385
+ # == description
386
+ # Tap down the screen on the specified coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
387
+ #
388
+ # == arguments
389
+ # x
390
+ # Integer
391
+ # description: X-coordinate inside the object
392
+ # example: 10
393
+ # y
394
+ # Integer
395
+ # description: Y-coordinate inside the object
396
+ # example: 11
397
+ # button
398
+ # Symbol
399
+ # description: button to tap down
400
+ # example: :Right
401
+ # tap_params
402
+ # Hash
403
+ # description: arguments, link to table TBA
404
+ # example: -
405
+ #
406
+ # == returns
407
+ # NilClass
408
+ # description: -
409
+ # example: nil
410
+ #
411
+ # == exceptions
412
+ # Exception
413
+ # description: see tap_object method for exceptions
414
+ def tap_down_object( x, y, button = :Left, tap_params = {} )
415
+ tap_params[:behavior_name] = 'tap_down_object'
416
+ tap_params[:command] = 'MousePress'
417
+ tap_object(x,y,1,button,tap_params)
418
+ end
419
+
420
+ # == description
421
+ # Release mouse tap on the specified coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
422
+ #
423
+ # == arguments
424
+ # x
425
+ # Integer
426
+ # description: X-coordinate inside the object
427
+ # example: 10
428
+ # y
429
+ # Integer
430
+ # description: Y-coordinate inside the object
431
+ # example: 11
432
+ # button
433
+ # Symbol
434
+ # description: button to tap up
435
+ # example: :Right
436
+ # tap_params
437
+ # Hash
438
+ # description: arguments, link to table TBA
439
+ # example: -
440
+ #
441
+ # == returns
442
+ # NilClass
443
+ # description: -
444
+ # example: nil
445
+ #
446
+ # == exceptions
447
+ # Exception
448
+ # description: see tap_object method for exceptions
449
+ def tap_up_object( x, y = -1, button = :Left, tap_params = {} )
450
+ tap_params[:behavior_name] = 'tap_up_object'
451
+ tap_params[:command] = 'MouseRelease'
452
+ tap_object(x,y,1,button,tap_params)
453
+ end
454
+
455
+ # == description
456
+ # Taps the screen on the coordinates of the object for the period of time given is seconds.
457
+ #
458
+ # == arguments
459
+ # time
460
+ # Integer
461
+ # description: Number of seconds to hold the pointer down.
462
+ # example: 5
463
+ # default: 1
464
+ #
465
+ # button
466
+ # Symbol
467
+ # description: Button symbol supported values are: :NoButton, :Left, :Right, :Middle .
468
+ # example: :Right
469
+ # default: :Left
470
+ #
471
+ # tap_params
472
+ # Hash
473
+ # description: Hash with additional tap parameters. Link to table TBA
474
+ # example: {:behavior_name => 'long_tap', :use_tap_screen => true}
475
+ # default: {}
476
+ #
477
+ # == returns
478
+ # NilClass
479
+ # description: -
480
+ # example: -
481
+ #
482
+ # == exceptions
483
+ # ArgumentError
484
+ # description: If tap_params is not a Hash or a Fixnum type
485
+ #
486
+ def long_tap( time = 1, button = :Left, tap_params = {} )
487
+
488
+ logging_enabled = $logger.enabled
489
+ $logger.enabled = false
490
+
491
+ raise ArgumentError.new("First parameter should be time between taps or Hash") unless tap_params.kind_of? Hash or tap_params.kind_of? Fixnum
492
+
493
+ begin
494
+ ens = param_set_configured?(tap_params, :ensure_event)
495
+ tap_params[:ensure_event] = false
496
+ if ens
497
+ ensure_event(:retry_timeout => 5, :retry_interval => 0.5) {
498
+ tap_down(button, false, tap_params)
499
+ sleep time
500
+ tap_up(button, false, tap_params)
501
+ }
502
+ else
503
+ tap_down(button, false, tap_params)
504
+ sleep time
505
+ tap_up(button, false, tap_params)
506
+ end
507
+
508
+
509
+ rescue Exception
510
+
511
+ $logger.enabled = logging_enabled
512
+
513
+ $logger.behaviour "FAIL;Failed long_tap with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap;"
514
+
515
+ raise
516
+
517
+ end
518
+ $logger.enabled = logging_enabled
519
+ $logger.behaviour "PASS;Operation long_tap executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap;"
520
+
521
+ nil
522
+
523
+ end
524
+
525
+ # == description
526
+ # Long tap on the screen on the given relative coordinates of the object for the period of time given is seconds.
527
+ #
528
+ # == arguments
529
+ # x
530
+ # Integer
531
+ # description: X-coordinate inside the object
532
+ # example: 10
533
+ # y
534
+ # Integer
535
+ # description: Y-coordinate inside the object
536
+ # example: 11
537
+ #
538
+ # time
539
+ # Integer
540
+ # description: Number of seconds to hold the pointer down.
541
+ # example: 5
542
+ # default: 1
543
+ #
544
+ # button
545
+ # Symbol
546
+ # description: Button symbol supported values are: :NoButton, :Left, :Right, :Middle .
547
+ # example: :Right
548
+ # default: :Left
549
+ #
550
+ # tap_params
551
+ # Hash
552
+ # description: Hash with additional tap parameters. Link to table TBA
553
+ # example: {:behavior_name => 'long_tap', :use_tap_screen => true}
554
+ # default: {}
555
+ #
556
+ # == returns
557
+ # NilClass
558
+ # description: -
559
+ # example: -
560
+ #
561
+ # == exceptions
562
+ #
563
+ def long_tap_object( x, y, time = 1, button = :Left, tap_params = {} )
564
+
565
+ begin
566
+
567
+ tap_down_object(x, y, button, tap_params)
568
+ sleep time
569
+ tap_up_object(x, y, button, tap_params)
570
+
571
+ rescue Exception
572
+
573
+ $logger.behaviour "FAIL;Failed long_tap_object with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap_object;"
574
+
575
+ raise
576
+
577
+ end
578
+
579
+ $logger.behaviour "PASS;Operation long_tap_object executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap_object;"
580
+
581
+ nil
582
+
583
+ end
584
+
585
+
586
+ # == description
587
+ # Tap down the screen on the coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
588
+ #
589
+ # == arguments
590
+ # button
591
+ # Symbol
592
+ # description: button to tap down
593
+ # example: :Right
594
+ # refresh
595
+ # Boolean
596
+ # description: if true, object will be refreshed after tap_down
597
+ # example: true
598
+ # tap_params
599
+ # Hash
600
+ # description: arguments, link to table TBA
601
+ # example: -
602
+ #
603
+ # == returns
604
+ # NilClass
605
+ # description: -
606
+ # example: nil
607
+ #
608
+ # == exceptions
609
+ # TestObjectNotFoundError
610
+ # description: object is not visible on screen
611
+ # ArgumentError
612
+ # description: invalid button
613
+ def tap_down( button = :Left, refresh = false, tap_params = {} )
614
+
615
+ begin
616
+ use_tap_screen = tap_params[:use_tap_screen].nil? ? sut_parameters[ :use_tap_screen, 'false'] : tap_params[:use_tap_screen].to_s
617
+ tap_params[:useTapScreen] = use_tap_screen
618
+
619
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
620
+ command = command_params #in qt_behaviour
621
+ command.command_name('MousePress')
622
+
623
+ params = {
624
+ 'button' => @@_buttons_map[button],
625
+ 'mouseMove' => sut_parameters[ :in_tap_move_pointer, 'false' ],
626
+ 'useTapScreen' => use_tap_screen,
627
+ 'x_off' => sut_parameters[:tap_x_offset , '0' ],
628
+ 'y_off' => sut_parameters[:tap_y_offset , '0' ]
629
+ }
630
+
631
+ if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
632
+ params['x'] = center_x
633
+ params['y'] = center_y
634
+ params['useCoordinates'] = 'true'
635
+ end
636
+ params.merge!(tap_params)
637
+
638
+ command.command_params(params)
639
+ execute_behavior(tap_params, command)
640
+
641
+ force_refresh( :id => get_application_id ) if refresh
642
+
643
+ rescue Exception
644
+
645
+ $logger.behaviour "FAIL;Failed tap_down with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_down;"
646
+
647
+ raise
648
+
649
+ end
650
+
651
+ $logger.behaviour "PASS;Operation tap_down executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_down;"
652
+
653
+ nil
654
+
655
+ end
656
+
657
+
658
+
659
+ # == description
660
+ # Release tap on the coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
661
+ #
662
+ # == arguments
663
+ # button
664
+ # Symbol
665
+ # description: button to tap down
666
+ # example: :Right
667
+ # refresh
668
+ # Boolean
669
+ # description: if true, object will be refreshed after tap_down
670
+ # example: false
671
+ # tap_params
672
+ # Hash
673
+ # description: arguments, link to table TBA
674
+ # example: -
675
+ #
676
+ # == returns
677
+ # NilClass
678
+ # description: -
679
+ # example: nil
680
+ #
681
+ # == exceptions
682
+ # TestObjectNotFoundError
683
+ # description: object is not visible on screen
684
+ # ArgumentError
685
+ # description: invalid button
686
+ def tap_up( button = :Left, refresh = true, tap_params = {} )
687
+
688
+ begin
689
+ use_tap_screen = tap_params[:use_tap_screen].nil? ? sut_parameters[ :use_tap_screen, 'false'] : tap_params[:use_tap_screen].to_s
690
+ tap_params[:useTapScreen] = use_tap_screen
691
+
692
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
693
+ command = command_params #in qt_behaviour
694
+ command.command_name('MouseRelease')
695
+ params = {'button' => @@_buttons_map[button], 'useTapScreen' => use_tap_screen}
696
+
697
+ if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
698
+ params['x'] = center_x
699
+ params['y'] = center_y
700
+ params['useCoordinates'] = 'true'
701
+ params['x_off'] = sut_parameters[:tap_x_offset , '0' ]
702
+ params['y_off'] = sut_parameters[:tap_y_offset , '0' ]
703
+
704
+ end
705
+ params.merge!(tap_params)
706
+
707
+ command.command_params(params)
708
+
709
+ execute_behavior(tap_params, command)
710
+ force_refresh({:id => get_application_id}) if refresh
711
+
712
+ rescue Exception
713
+
714
+ $logger.behaviour "FAIL;Failed tap_up with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_up;"
715
+
716
+ raise
717
+
718
+ end
719
+
720
+ $logger.behaviour "PASS;Operation tap_up executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_up;"
721
+
722
+ nil
723
+
724
+ end
725
+
726
+ # TODO: [2009-04-02] Remove deprevated methods?
727
+
728
+ # warning: TestObject#press is deprecated; use TestObject#tap
729
+ # == deprecated
730
+ # 0.8.x
731
+ # == description
732
+ # TestObject#press is deprecated, use TestObject#tap instead.
733
+ def press( tap_count = 1, button = :Left )
734
+
735
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#press is deprecated; use TestObject#tap"
736
+
737
+ begin
738
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
739
+
740
+ command = command_params #in qt_behaviour
741
+
742
+ command.command_name('Tap')
743
+
744
+ command.command_params(
745
+ 'x' => center_x,
746
+ 'y' => center_y,
747
+ 'count' => tap_count.to_s,
748
+ 'button' => @@_buttons_map[button],
749
+ 'mouseMove'=>'true',
750
+ 'x_off' => sut_parameters[:tap_x_offset , '0' ],
751
+ 'y_off' => sut_parameters[:tap_y_offset , '0' ]
752
+ )
753
+
754
+ @sut.execute_command(command)
755
+
756
+ rescue Exception
757
+
758
+ $logger.behaviour "FAIL;Failed press with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};press;"
759
+
760
+ raise
761
+
762
+ end
763
+
764
+ $logger.behaviour "PASS;Operation press executed successfully with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};press;"
765
+
766
+ nil
767
+
768
+ end
769
+
770
+ # TestObject#long_press is deprecated; use TestObject#long_tap
771
+ # == deprecated
772
+ # 0.8.x
773
+ # == description
774
+ # TestObject#long_press is deprecated, use TestObject#long_tap instead.
775
+ def long_press( time = 1, button = :Left )
776
+
777
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#long_press is deprecated; use TestObject#long_tap"
778
+
779
+ begin
780
+
781
+ long_tap(time, button)
782
+
783
+ rescue Exception
784
+
785
+ $logger.behaviour "FAIL;Failed long_press with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_press;"
786
+
787
+ raise
788
+
789
+ end
790
+
791
+ $logger.behaviour "PASS;Operation long_press executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_press;"
792
+
793
+ nil
794
+
795
+ end
796
+
797
+ # TestObject#hold is deprecated; use TestObject#tap_down
798
+ # == deprecated
799
+ # 0.8.x
800
+ # == description
801
+ # TestObject#hold is deprecated, use TestObject#tap_down instead.
802
+ def hold(button = :Left, refresh = true)
803
+
804
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#hold is deprecated; use TestObject#tap_down"
805
+
806
+ begin
807
+
808
+ tap_down(button, refresh)
809
+
810
+ rescue Exception
811
+
812
+ $logger.behaviour "FAIL;Failed hold with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};hold;"
813
+
814
+ raise
815
+
816
+ end
817
+
818
+ $logger.behaviour "PASS;Operation hold executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};hold;"
819
+
820
+ nil
821
+
822
+ end
823
+
824
+ # TestObject#release is deprecated; use TestObject#tap_up
825
+ # == deprecated
826
+ # 0.8.x
827
+ # == description
828
+ # TestObject#release is deprecated, use TestObject#tap_up instead.
829
+ def release( button = :Left, refresh = true )
830
+
831
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#release is deprecated; use TestObject#tap_up"
832
+
833
+ begin
834
+
835
+ tap_up(button, refresh)
836
+
837
+ rescue Exception
838
+
839
+ $logger.behaviour "FAIL;Failed release with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};release;"
840
+
841
+ raise
842
+
843
+ end
844
+
845
+ $logger.behaviour "PASS;Operation release executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};release;"
846
+
847
+ nil
848
+
849
+ end
850
+
851
+ =begin
852
+ private
853
+
854
+ def center_x
855
+ x = attribute('x_absolute').to_i
856
+ width = attribute('width').to_i
857
+ x = x + (width/2)
858
+ x.to_s
859
+ end
860
+
861
+ def center_y
862
+ y = attribute('y_absolute').to_i
863
+ height = attribute('height').to_i
864
+ y = y + (height/2)
865
+ y.to_s
866
+ end
867
+ =end
868
+
869
+ # enable hooking for performance measurement & debug logging
870
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
871
+
872
+ end # Widget
873
+
874
+
875
+ end # QT
876
+
877
+ end # MobyBehaviour