testability-driver-qt-sut-plugin 0.9.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb +11 -8
  2. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/configure_behaviour.rb +3 -3
  3. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/events.rb +76 -74
  4. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/find.rb +2 -0
  5. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fixture.rb +10 -4
  6. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/gesture.rb +49 -42
  7. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/infologger.rb +0 -9
  8. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/locale_db.rb +5 -0
  9. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/record.rb +11 -1
  10. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/sut.rb +441 -324
  11. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/synchronization.rb +32 -11
  12. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/treewidgetitemcolumn.rb +54 -34
  13. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/view_item.rb +26 -26
  14. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/webkit.rb +61 -21
  15. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/widget.rb +528 -344
  16. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/application.rb +16 -138
  17. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/find_object.rb +3 -67
  18. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/fixture.rb +4 -18
  19. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/plugin.rb +1 -1
  20. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/adapter.rb +166 -149
  21. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/communication.rb +80 -75
  22. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/find_object_generator.rb +93 -0
  23. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/message_composer.rb +161 -0
  24. data/xml/behaviour/qt.xml +26 -26
  25. data/xml/template/qt.xml +9 -7
  26. metadata +7 -6
  27. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/fixture.rb +0 -45
@@ -50,18 +50,39 @@ module MobyBehaviour
50
50
 
51
51
  end
52
52
 
53
- # Execution of the test script is stopped and TDriver waits for the given signal. If no signals of the
54
- # given type are found before the timeout an error is raised.
53
+ # == description
54
+ # Synchronizes script execution to a signal. Test script execution is stopped until the expected signal is emitted or the timeout occurs.
55
+ # If no signals of the given type are found before the timeout an error is raised.\n
56
+ # \n
57
+ # [b]NOTE:[/b] Using wait_for_signal will reset and clear any previously set signal listening status.
58
+ # == arguments
59
+ # signal_timeout
60
+ # Fixnum
61
+ # description: Timeout, in seconds. A timeout of zero means that the signal must have been listened to and emitted before this method is called.
62
+ # example: 60
63
+ #
64
+ # signal_name
65
+ # String
66
+ # description: Name of the signal that is to be emitted.
67
+ # example: "clicked()"
68
+ #
69
+ # &block
70
+ # Proc
71
+ # description: Optional code block to be executed while listening signals
72
+ # example: -
73
+ #
74
+ # == returns
75
+ # NilClass
76
+ # description: -
77
+ # example: -
78
+ #
79
+ # == exceptions
80
+ # SignalNotEmittedException
81
+ # description: The expected signal was not emitted before the timeout was reached.
82
+ #
83
+ # ArgumentError
84
+ # description: signal_name was not a valid String or signal_timeout was not a non negative Integer
55
85
  #
56
- # === params
57
- # signal_timeout:: Integer, time to wait for signal, in seconds
58
- # signal_name:: String, name of the signal to wait for. Note that most signals end with ()
59
- # block:: (optional) code block to be executed while listening signals
60
- # === returns
61
- # nil
62
- # === errors
63
- # SignalNotEmittedException:: The given signal was n ot received before the timeout
64
- # ArgumentError:: signal_timeout was not a positive Integer or signal_name was not a nonempty String
65
86
  def wait_for_signal( signal_timeout, signal_name, &block )
66
87
 
67
88
  Kernel::raise ArgumentError.new("The timeout argument was of wrong type: expected 'Integer' was '%s'" % signal_timeout.class ) unless signal_timeout.kind_of?( Integer )
@@ -48,40 +48,60 @@ module MobyBehaviour
48
48
 
49
49
  include MobyBehaviour::QT::Behaviour
50
50
 
51
- # Sets the check state of the item in a treewidget
52
- # == params
53
- # == returns
54
- # == raises
55
- def check_state(new_state)
56
-
57
- ret = nil
58
-
59
- begin
60
-
61
- raise ArgumentError.new( "new_state must be an integer. Check qt docs for allowed values (Qt::CheckState." ) unless new_state.kind_of?(Integer)
62
-
63
- command = MobyCommand::WidgetCommand.new
64
- command.object_id(self.attribute('parentWidget'))
65
- command.application_id(get_application_id)
66
- command.object_type(:Standard)
67
- command.command_name('CheckState')
68
- command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
69
- params = {:state => new_state, :column => self.attribute('column'), :item => self.attribute('parentItem')}
70
-
71
- command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
72
-
73
- command.command_params(params)
74
- @sut.execute_command(command)
75
-
76
- rescue Exception => e
77
-
78
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed select"#{identity};drag;"
79
- Kernel::raise e
80
-
81
- end
82
-
83
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation select executed successfully"#{identity};drag;"
84
- ret
51
+ # == description
52
+ # Sets the check state of the item in QTreeWidgetItemColumn.\n
53
+ #
54
+ # == arguments
55
+ # new_state
56
+ # Integer
57
+ # description: State of checkable item, see supported values in [link="#check_state_enums"]table[/link] below
58
+ # example: 0
59
+ #
60
+ # == returns
61
+ # NilClass
62
+ # description: -
63
+ # example: -
64
+ #
65
+ # == tables
66
+ # check_state_enums
67
+ # title: Supported item states (Qt 4.7)
68
+ # description: See Qt documentation for allowed values to QT::CheckState
69
+ # |Enum|Value|Description|
70
+ # |Qt::Unchecked|0|The item is unchecked.|
71
+ # |Qt::PartiallyChecked|1|The item is partially checked.|
72
+ # |Qt::Checked|2|The item is checked.|
73
+ #
74
+ # == returns
75
+ def check_state( new_state )
76
+
77
+ ret = nil
78
+
79
+ begin
80
+
81
+ raise ArgumentError.new( "new_state must be an integer. Check qt docs for allowed values (Qt::CheckState." ) unless new_state.kind_of?(Integer)
82
+
83
+ command = MobyCommand::WidgetCommand.new
84
+ command.object_id(self.attribute('parentWidget'))
85
+ command.application_id(get_application_id)
86
+ command.object_type(:Standard)
87
+ command.command_name('CheckState')
88
+ command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
89
+ params = {:state => new_state, :column => self.attribute('column'), :item => self.attribute('parentItem')}
90
+
91
+ command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
92
+
93
+ command.command_params(params)
94
+ @sut.execute_command(command)
95
+
96
+ rescue Exception => e
97
+
98
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed select"#{identity};drag;"
99
+ Kernel::raise e
100
+
101
+ end
102
+
103
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation select executed successfully"#{identity};drag;"
104
+ ret
85
105
 
86
106
  end
87
107
 
@@ -17,8 +17,6 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
-
21
-
22
20
  module MobyBehaviour
23
21
 
24
22
  module QT
@@ -48,43 +46,45 @@ module MobyBehaviour
48
46
 
49
47
  include MobyBehaviour::QT::Behaviour
50
48
 
49
+ # == description
51
50
  # Selects an item from a list that uses qt view model system (e.g. QTreeView)
52
- # == params
53
- # == returns
54
- # == raises
51
+ # == returns
52
+ # NilClass
53
+ # description: -
54
+ # example: -
55
55
  def select
56
56
 
57
- ret = nil
57
+ ret = nil
58
58
 
59
- begin
59
+ begin
60
60
 
61
- button=:Left
62
- command = MobyCommand::WidgetCommand.new
63
- command.object_id(self.attribute('viewPort'))
64
- command.application_id(get_application_id)
65
- command.object_type(:Standard)
66
- command.command_name('Tap')
67
- command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
61
+ button = :Left
62
+ command = MobyCommand::WidgetCommand.new
63
+ command.object_id(self.attribute('viewPort'))
64
+ command.application_id(get_application_id)
65
+ command.object_type(:Standard)
66
+ command.command_name('Tap')
67
+ command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
68
68
 
69
- mouse_move = @sut.parameter[:in_tap_move_pointer]
70
- mouse_move = 'false' unless mouse_move
69
+ mouse_move = @sut.parameter[:in_tap_move_pointer]
70
+ mouse_move = 'false' unless mouse_move
71
71
 
72
- params = {'x'=>center_x, 'y' => center_y, 'count' => 1, 'button' => @@_buttons_map[button], 'mouseMove'=>mouse_move, 'useCoordinates' => 'true'}
72
+ params = {'x'=>center_x, 'y' => center_y, 'count' => 1, 'button' => @@_buttons_map[button], 'mouseMove'=>mouse_move, 'useCoordinates' => 'true'}
73
73
 
74
- command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
74
+ command.set_event_type(MobyUtil::Parameter[ @sut.id ][ :event_type, "0" ])
75
75
 
76
- command.command_params(params)
77
- @sut.execute_command(command)
76
+ command.command_params(params)
77
+ @sut.execute_command(command)
78
78
 
79
- rescue Exception => e
79
+ rescue Exception => e
80
80
 
81
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed select"#{identity};drag;"
82
- Kernel::raise e
81
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed select"#{identity};drag;"
82
+ Kernel::raise e
83
83
 
84
- end
84
+ end
85
85
 
86
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation select executed successfully"#{identity};drag;"
87
- ret
86
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation select executed successfully"#{identity};drag;"
87
+ ret
88
88
 
89
89
  end
90
90
 
@@ -46,6 +46,8 @@ module MobyBehaviour
46
46
 
47
47
  include MobyBehaviour::QT::Behaviour
48
48
 
49
+ # == nodoc
50
+ # == description
49
51
  # Send javascript to target object on the screen
50
52
  # == params
51
53
  # java_script::( )java script to be executed to target object
@@ -104,19 +106,34 @@ module MobyBehaviour
104
106
  returnValue
105
107
 
106
108
  end
107
-
108
-
109
-
110
- # Send javascript to target object on the screen
111
- # == params
112
- # java_script::( )java script to be executed to target object
113
- # == returns
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
+ #
114
124
  # == raises
115
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
116
- # ArgumentError:: If an invalid button type is given
117
- # ArgumentError:: If coordinates are outside of the object
118
- # === examples
119
- # @object.execute_javascript
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
+ #
120
137
  def execute_javascript( java_script )
121
138
 
122
139
  webframe_id = 0
@@ -143,15 +160,38 @@ module MobyBehaviour
143
160
  execute_javascript_query( java_script, nil, index, webframe_id)
144
161
  end
145
162
 
146
- # Scrolls the
147
- # == params
148
- # dx, dy. pixels to scroll down (value may be negative)
149
- # == returns
150
- # == raises
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
+ #
151
191
  # === examples
152
192
  # @QwebFrame.scroll(0, 10)
153
193
  # @app.a.scroll()
154
- def scroll( dx=0, dy=0, tap=0 )
194
+ def scroll( dx = 0, dy = 0, center = 0 )
155
195
  temp_id = ""
156
196
 
157
197
  if type == "QWebFrame"
@@ -171,7 +211,7 @@ module MobyBehaviour
171
211
  frame_down_border = y_absolute + height - horizontalScrollBarHeight
172
212
  frame_right_border = x_absolute + width - verticalScrollBarWidth
173
213
 
174
- if(tap==1)
214
+ if(center==1)
175
215
 
176
216
  #adjust image to be visible for tap
177
217
  if(center_y.to_i > frame_down_border)
@@ -219,8 +259,8 @@ module MobyBehaviour
219
259
  end
220
260
 
221
261
 
222
- # enable hooking for performance measurement & debug logging
223
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
262
+ # enable hooking for performance measurement & debug logging
263
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
224
264
 
225
265
 
226
266
  end # Webkit
@@ -1,28 +1,28 @@
1
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
- ##
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
18
  ############################################################################
19
19
 
20
20
 
21
21
 
22
- # TODO: document
22
+ # TODO: document
23
23
  module MobyBehaviour
24
24
 
25
- module QT
25
+ module QT
26
26
 
27
27
  # == description
28
28
  # Widget specific behaviours
@@ -45,20 +45,28 @@ module MobyBehaviour
45
45
  # == objects
46
46
  # *
47
47
  #
48
- module Widget
48
+ module Widget
49
49
 
50
- include MobyBehaviour::QT::Behaviour
50
+ include MobyBehaviour::QT::Behaviour
51
51
 
52
- # Moves the mouse to the object it was called on.
53
- # == params
54
- # refresh::(optional) if true will cause the framework to refresh the ui state. Default is false.
55
- # === examples
56
- # @object.move_mouse
57
- def move_mouse( move_params = false )
52
+ # == description
53
+ # Moves the mouse to the object it was called on.
54
+ # == arguments
55
+ # move_params
56
+ # Boolean
57
+ # description: if true will cause the framework to refresh the UI state
58
+ # example: true
59
+ # == returns
60
+ # NilClass
61
+ # description: -
62
+ # example: -
63
+ # == examples
64
+ # @object.move_mouse
65
+ def move_mouse( move_params = false )
58
66
 
59
67
  $stderr.puts "#{ caller(0).last.to_s } warning: move_mouse(boolean) is deprecated; use move_mouse(Hash)" if move_params == true
60
68
 
61
- begin
69
+ begin
62
70
  # Hide all future params in a hash
63
71
  use_tap_screen = false
64
72
  if move_params.kind_of? Hash
@@ -67,47 +75,82 @@ module MobyBehaviour
67
75
  else
68
76
  use_tap_screen = MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false']
69
77
  end
70
- command = command_params #in qt_behaviour
71
- command.command_name('MouseMove')
78
+ command = command_params #in qt_behaviour
79
+ command.command_name('MouseMove')
72
80
 
73
81
  if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
74
- params = {'x' => center_x, 'y' => center_y, 'useCoordinates' => 'true',
75
- 'useTapScreen' => use_tap_screen}
76
- else
77
- params = {'useTapScreen' => use_tap_screen.to_s}
78
- end
82
+ params = {
83
+ 'x' => center_x,
84
+ 'y' => center_y,
85
+ 'useCoordinates' => 'true',
86
+ 'useTapScreen' => use_tap_screen,
87
+ 'x_off' => MobyUtil::Parameter[ @sut.id ][:tap_x_offset , '0' ],
88
+ 'y_off' => MobyUtil::Parameter[ @sut.id ][:tap_y_offset , '0' ]
89
+ }
90
+ else
91
+ params = {'useTapScreen' => use_tap_screen.to_s}
92
+ end
79
93
  command.command_params(params)
80
94
 
81
- @sut.execute_command(command)
82
-
83
- rescue Exception => e
84
-
85
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to mouse_move"
86
- Kernel::raise e
87
- end
88
-
89
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation mouse_move executed successfully"
90
-
91
- nil
92
-
93
- end
94
-
95
- # Taps the screen on the coordinates of the object.
96
- # == params
97
- # tap_count::(optional defaults to 1)number of times to tap the screen
98
- # button::(optional defaults to :Left) button symbol supported values are: :NoButton, :Left, :Right, :Middle
99
- # x::(optional defaults to nil) x coordinate inside object to click, if nil then center is used
100
- # y::(optional defaults to nil) y coordinate inside object to click, if nil then center is used
101
- # == returns
102
- # == raises
103
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
104
- # ArgumentError:: If an invalid button type is given
105
- # ArgumentError:: If coordinates are outside of the object
106
- # === examples
107
- # @object.tap
108
- # def tap( tap_count = 1, interval = nil, button = :Left)
109
- # def tap( tap_count = 1, interval = nil, button = :Left, tap_screen = false, duration = 0.1 )
110
- def tap( tap_params = 1, interval = nil, button = :Left )
95
+ @sut.execute_command(command)
96
+
97
+ rescue Exception => e
98
+
99
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to mouse_move"
100
+ Kernel::raise e
101
+ end
102
+
103
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation mouse_move executed successfully"
104
+
105
+ nil
106
+
107
+ end
108
+
109
+ # == description
110
+ # Taps the screen on the coordinates of the object.
111
+ #
112
+ # == arguments
113
+ # tap_params
114
+ # Hash
115
+ # 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.
116
+ # example: -
117
+ # interval
118
+ # Integer
119
+ # description: DEPRECATED, use hash key :interval instead
120
+ # example: -
121
+ # button
122
+ # Symbol
123
+ # description: DEPRECATED, use hash key :button instead
124
+ # example: -
125
+ #
126
+ # == tables
127
+ # tap_params_table
128
+ # title: Hash argument tap_params
129
+ # description: Valid keys for argument tap_params as hash
130
+ # |Key|Description|Type|Example|Default|
131
+ # |:button|Button to use for tapping|Symbol|:Right|:Left|
132
+ # |:duration|Duration in seconds for a single left button press, all other arguments ignored|Numeric|0.1|-|
133
+ # |:interval|This method sleeps tap_count times interval|Integer|2|1|
134
+ # |:tap_count|Number of taps to do|Integer|2|1|
135
+ # |:use_tap_screen|Should tapping be done on screen or as mouse event to the object|Boolean|true|see TDriver parameters table below|
136
+ # tdriver_params_table
137
+ # title: Default values read from tdriver parameters
138
+ # description: These setting values are read from tdriver_parameters.xml
139
+ # |Name|Description|Default if missing from parameters|
140
+ # |use_tap_screen|See :use_tap_screen above|false|
141
+ # |in_tap_move_pointer|Wether to actually move mouse pointer to tap coordinates|false|
142
+ #
143
+ # == returns
144
+ # NilClass
145
+ # description: -
146
+ # example: -
147
+ #
148
+ # == exceptions
149
+ # TestObjectNotFoundError
150
+ # description: object is not visible on screen
151
+ # ArgumentError
152
+ # description: Invalid button or non-integer interval
153
+ def tap( tap_params = 1, interval = nil, button = :Left )
111
154
  # tapMeasure = Time.now
112
155
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - tap start"
113
156
 
@@ -120,17 +163,17 @@ module MobyBehaviour
120
163
  return
121
164
  end
122
165
 
123
- begin
124
- #for api compatibility
125
- if interval and interval.kind_of?(Symbol)
126
- button = interval
166
+ begin
167
+ #for api compatibility
168
+ if interval and interval.kind_of?(Symbol)
169
+ button = interval
127
170
  interval = nil
128
- end
129
-
171
+ end
172
+
130
173
  # Another one, first param a has for the rest
131
174
  if tap_params.kind_of?(Hash)
132
175
  interval = tap_params[:interval]
133
- if tap_params[:button].nil?
176
+ if tap_params[:button].nil?
134
177
  button = :Left
135
178
  else
136
179
  button = tap_params[:button]
@@ -142,39 +185,43 @@ module MobyBehaviour
142
185
  else
143
186
  tap_count = tap_params
144
187
 
145
- use_tap_screen = MobyUtil::Parameter[@sut.id][ :use_tap_screen, 'false']
188
+ use_tap_screen = MobyUtil::Parameter[@sut.id][ :use_tap_screen, 'false']
146
189
  end
147
190
 
148
- raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
149
- if interval
191
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
192
+ if interval
150
193
  raise ArgumentError.new( "Invalid interval must be an integer." ) unless interval.kind_of?(Integer)
151
194
  end
152
-
153
- command = command_params #in qt_behaviour
195
+
196
+ command = command_params #in qt_behaviour
154
197
  command.command_name('Tap')
155
-
198
+
156
199
  params = {
157
- 'count' => tap_count.to_s,
158
- 'button' => @@_buttons_map[button],
159
- 'mouseMove' => MobyUtil::Parameter[ @sut.id ][ :in_tap_move_pointer, 'false' ],
160
- 'useTapScreen' => use_tap_screen
161
- }
200
+ 'count' => tap_count.to_s,
201
+ 'button' => @@_buttons_map[button],
202
+ 'mouseMove' => MobyUtil::Parameter[ @sut.id ][ :in_tap_move_pointer, 'false' ],
203
+ 'useTapScreen' => use_tap_screen,
204
+ 'x_off' => MobyUtil::Parameter[ @sut.id ][:tap_x_offset , '0' ],
205
+ 'y_off' => MobyUtil::Parameter[ @sut.id ][:tap_y_offset , '0' ]
206
+ }
162
207
 
163
208
 
164
209
  if interval
165
- params[:interval] = (interval.to_f * 1000).to_i
210
+ params[:interval] = (interval.to_f * 1000).to_i
166
211
  end
167
212
 
168
213
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - before webs"
169
214
 
170
215
  if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
171
- params['x'] = center_x
172
- params['y'] = center_y
216
+ #params['obj_x'] = (center_x.to_i - 1).to_s
217
+ #params['obj_y'] = (center_y.to_i - 1).to_s
218
+ params['x'] = (center_x.to_i - 1).to_s
219
+ params['y'] = (center_y.to_i - 1).to_s
173
220
  params['useCoordinates'] = 'true'
174
- end
221
+ end
175
222
 
176
223
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - before 2 webs"
177
-
224
+
178
225
  if(attribute('objectType') == 'Web')
179
226
  if type != "QWebFrame"
180
227
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - Not q webframe"
@@ -183,14 +230,17 @@ module MobyBehaviour
183
230
  y_absolute = (@sut.xml_data.xpath( "//object[@id='%s']/attributes/attribute[@name ='y_absolute']/value/text()" % self.attribute('webFrame') )[0]).to_s.to_i
184
231
  width = (@sut.xml_data.xpath( "//object[@id='%s']/attributes/attribute[@name ='width']/value/text()" % self.attribute('webFrame') )[0]).to_s.to_i
185
232
  height = (@sut.xml_data.xpath( "//object[@id='%s']/attributes/attribute[@name ='height']/value/text()" % self.attribute('webFrame') )[0]).to_s.to_i
186
-
233
+
234
+ horizontalScrollBarHeight = (@sut.xml_data.xpath( "//object[@id='%s']/attributes/attribute[@name ='horizontalScrollBarHeight']/value/text()" % self.attribute('webFrame') )[0]).to_s.to_i
235
+ verticalScrollBarWidth = (@sut.xml_data.xpath( "//object[@id='%s']/attributes/attribute[@name ='verticalScrollBarWidth']/value/text()" % self.attribute('webFrame') )[0]).to_s.to_i
236
+
187
237
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - x_a(#{x_absolute}), y_a(#{y_absolute}), w(#{width}), h(#{height})"
188
-
238
+
189
239
 
190
240
  if((center_x.to_i < x_absolute) or
191
- (center_x.to_i > x_absolute + width) or
241
+ (center_x.to_i > x_absolute + width - verticalScrollBarWidth) or
192
242
  (center_y.to_i < y_absolute) or
193
- (center_y.to_i > y_absolute + height)
243
+ (center_y.to_i > y_absolute + height - horizontalScrollBarHeight)
194
244
  )
195
245
  #puts "web element scroll"
196
246
  self.scroll(0,0,1) # enable tap centralization
@@ -200,78 +250,80 @@ module MobyBehaviour
200
250
  return
201
251
  end
202
252
  end
203
- end
253
+ end
204
254
  command.command_params(params)
205
-
255
+
206
256
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - tap about to execute "
207
- @sut.execute_command( command )
257
+ @sut.execute_command( command )
208
258
 
209
259
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - executed"
210
260
  #do not allow operations to continue untill taps done
211
261
  if interval
212
262
  sleep interval * tap_count
213
263
  end
214
-
215
- rescue Exception => e
264
+
265
+ rescue Exception => e
216
266
 
217
267
  MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed tap with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};tap;"
218
- Kernel::raise e
268
+ Kernel::raise e
219
269
 
220
- end
270
+ end
221
271
 
222
272
  MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation tap executed successfully with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};tap;"
223
273
 
224
274
  # puts "tap: " + (Time.now - tapMeasure).to_s + " s - tapping ending"
225
275
 
226
-
276
+
227
277
  nil
228
278
 
229
279
  end
230
280
 
281
+
231
282
  # == description
232
- # Taps the screen on the specified coordinates of the object. Given coordinates are relative to the object.
283
+ # Taps the screen on the specified coordinates of the object. Given coordinates are relative to the object.
233
284
  #
234
- # == arguments
235
- # x
285
+ # == arguments
286
+ # x
236
287
  # Integer
237
- # description: x coordinate inside object to click
288
+ # description: x coordinate inside object to click
238
289
  # example: 5
239
290
  #
240
- # y
291
+ # y
241
292
  # Integer
242
293
  # description: y coordinate inside object to click
243
294
  # example: 5
244
295
  #
245
- # tap_count
296
+ # tap_count
246
297
  # Integer
247
298
  # description: number of times to tap the screen
248
299
  # example: 1
249
300
  #
250
- # button
301
+ # button
251
302
  # Symbol
252
- # description: button symbol supported values are: :NoButton, :Left, :Right, :Middle
303
+ # description: button symbol supported values are: :NoButton, :Left, :Right, :Middle
253
304
  # example: :Left
254
305
  #
255
306
  # tap_params
256
307
  # Hash
257
308
  # description: parameter that also incorporate all previous tap_object_* commands :command, :behavior_name and :use_tap_screen
258
309
  # example: { }
259
- #
260
- # == returns
310
+ #
311
+ # == returns
261
312
  # NilClass
262
313
  # description: -
263
- # example: -
314
+ # example: nil
264
315
  #
265
- # == exceptions
266
- # TestObjectNotFoundError
267
- # description: If a graphics item is not visible on screen
316
+ # == exceptions
317
+ # TestObjectNotFoundError
318
+ # description: If a graphics item is not visible on screen
268
319
  #
269
- # ArgumentError
320
+ # ArgumentError
270
321
  # description: If coordinates are outside of the object
271
322
  #
272
- def tap_object( x, y, tap_count = 1, button = :Left, tap_params = nil )
323
+ def tap_object( x, y, tap_count = 1, button = :Left, tap_params = nil )
324
+
325
+ begin
273
326
 
274
- begin
275
327
  # New hash format for the parameter. Also incorporates all
276
328
  # previous tap_object_* commands that were redundant.
277
329
  if tap_params.kind_of? Hash
@@ -285,357 +337,489 @@ module MobyBehaviour
285
337
  command_name = 'Tap'
286
338
  behavior_name = 'tap_object'
287
339
  end
288
-
289
- raise ArgumentError.new( "Coordinate x:#{x} x_abs:#{x} outside object." ) unless ( x <= attribute( 'width' ).to_i and x >= 0 )
290
- raise ArgumentError.new( "Coordinate y:#{y} y_abs:#{y} outside object." ) unless ( y <= attribute( 'height' ).to_i and y >= 0 )
291
340
 
292
- command = command_params #in qt_behaviour
293
- command.command_name(command_name)
341
+ raise ArgumentError.new( "Coordinate x:#{x} x_abs:#{x} outside object." ) unless ( x <= attribute( 'width' ).to_i and x >= 0 )
342
+ raise ArgumentError.new( "Coordinate y:#{y} y_abs:#{y} outside object." ) unless ( y <= attribute( 'height' ).to_i and y >= 0 )
294
343
 
295
-
344
+ command = command_params #in qt_behaviour
345
+ command.command_name(command_name)
296
346
 
297
- command.command_params(
298
- 'x' => ( attribute('x_absolute').to_i + x.to_i ).to_s,
299
- 'y' => ( attribute('y_absolute').to_i + y.to_i ).to_s,
300
- 'count' => tap_count.to_s,
301
- 'button' => @@_buttons_map[ button ],
347
+
348
+
349
+ command.command_params(
350
+ 'x' => ( attribute('x_absolute').to_i + x.to_i ).to_s,
351
+ 'y' => ( attribute('y_absolute').to_i + y.to_i ).to_s,
352
+ 'count' => tap_count.to_s,
353
+ 'button' => @@_buttons_map[ button ],
302
354
  'mouseMove' => MobyUtil::Parameter[ @sut.id ][ :in_tap_move_pointer, 'false' ],
303
355
  'useCoordinates' => 'true',
304
- 'useTapScreen' => use_tap_screen
356
+ 'useTapScreen' => use_tap_screen,
357
+ 'x_off' => MobyUtil::Parameter[ @sut.id ][:tap_x_offset , '0' ],
358
+ 'y_off' => MobyUtil::Parameter[ @sut.id ][:tap_y_offset , '0' ]
359
+
305
360
  )
306
361
 
307
- @sut.execute_command(command)
362
+ @sut.execute_command(command)
363
+
364
+ rescue Exception => e
308
365
 
309
- rescue Exception => e
366
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed #{behavior_name} with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};#{behavior_name};"
367
+ Kernel::raise e
310
368
 
311
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed #{behavior_name} with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};#{behavior_name};"
312
- Kernel::raise e
369
+ end
313
370
 
314
- end
371
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation #{behavior_name} executed successfully with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};#{behavior_name};"
315
372
 
316
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation #{behavior_name} executed successfully with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};#{behavior_name};"
373
+ nil
317
374
 
318
- nil
375
+ end
319
376
 
320
- end
321
377
 
322
- # Tap down on the screen on the specified coordinates of the object. Given coordinates are relative to the object.
323
- # == params
324
- # x::x coordinate inside object
325
- # y::y coordinate inside object
326
- # button::(optional defaults to :Left) button symbol supported values are: :NoButton, :Left, :Right, :Middle
327
- # == returns
328
- # == raises
329
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
330
- # ArgumentError:: If coordinates are outside of the object
331
- # === examples
332
- # @object.tap_down_object(5, 5)
333
- def tap_down_object( x, y, button = :Left, tap_params = {} )
378
+ # == description
379
+ # Tap down the screen on the specified coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
380
+ #
381
+ # == arguments
382
+ # x
383
+ # Integer
384
+ # description: X-coordinate inside the object
385
+ # example: 10
386
+ # y
387
+ # Integer
388
+ # description: Y-coordinate inside the object
389
+ # example: 11
390
+ # button
391
+ # Symbol
392
+ # description: button to tap down
393
+ # example: :Right
394
+ # tap_params
395
+ # Hash
396
+ # description: arguments, link to table TBA
397
+ # example: -
398
+ #
399
+ # == returns
400
+ # NilClass
401
+ # description: -
402
+ # example: nil
403
+ #
404
+ # == exceptions
405
+ # Exception
406
+ # description: see tap_object method for exceptions
407
+ def tap_down_object( x, y, button = :Left, tap_params = {} )
334
408
  tap_params[:behavior_name] = 'tap_down_object'
335
409
  tap_params[:command] = 'MousePress'
336
410
  tap_object(x,y,1,button,tap_params)
337
- end
338
-
339
- # Tap up on the screen on the specified coordinates of the object. Given coordinates are relative to the object.
340
- # == params
341
- # x::x coordinate inside object
342
- # y::y coordinate inside object
343
- # button::(optional defaults to :Left) button symbol supported values are: :NoButton, :Left, :Right, :Middle
344
- # tap_params::(optional, defautlts to Hash} Hash consisting of any additional parameter.
345
- # == returns
346
- # == raises
347
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
348
- # ArgumentError:: If coordinates are outside of the object
349
- # === examples
350
- # @object.tap_up_object(5, 5)
351
- def tap_up_object( x, y = -1, button = :Left, tap_params = {} )
411
+ end
412
+
413
+ # == description
414
+ # Release mouse tap on the specified coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
415
+ #
416
+ # == arguments
417
+ # x
418
+ # Integer
419
+ # description: X-coordinate inside the object
420
+ # example: 10
421
+ # y
422
+ # Integer
423
+ # description: Y-coordinate inside the object
424
+ # example: 11
425
+ # button
426
+ # Symbol
427
+ # description: button to tap up
428
+ # example: :Right
429
+ # tap_params
430
+ # Hash
431
+ # description: arguments, link to table TBA
432
+ # example: -
433
+ #
434
+ # == returns
435
+ # NilClass
436
+ # description: -
437
+ # example: nil
438
+ #
439
+ # == exceptions
440
+ # Exception
441
+ # description: see tap_object method for exceptions
442
+ def tap_up_object( x, y = -1, button = :Left, tap_params = {} )
352
443
  tap_params[:behavior_name] = 'tap_up_object'
353
444
  tap_params[:command] = 'MouseRelease'
354
445
  tap_object(x,y,1,button,tap_params)
355
- end
356
-
357
- # Taps the screen on the coordinates of the object for the period of time given is seconds.
358
- # == params
359
- # time::(optional defaults to 1) number of seconds to hold the pointer down.
360
- # button::(optional defaults to :Left) button symbol supported values are: :NoButton, :Left, :Right, :Middle
361
- # == returns
362
- # == raises
363
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
364
- # ArgumentError:: If an invalid button type is given
365
- # === examples
366
- # @object.long_tap(2, :Left)
367
- def long_tap( time = 1, button = :Left, tap_params = {} )
446
+ end
447
+
448
+ # == description
449
+ # Taps the screen on the coordinates of the object for the period of time given is seconds.
450
+ #
451
+ # == arguments
452
+ # time
453
+ # Integer
454
+ # description: Number of seconds to hold the pointer down.
455
+ # example: 5
456
+ # default: 1
457
+ #
458
+ # button
459
+ # Symbol
460
+ # description: Button symbol supported values are: :NoButton, :Left, :Right, :Middle .
461
+ # example: :Right
462
+ # default: :Left
463
+ #
464
+ # tap_params
465
+ # Hash
466
+ # description: Hash with additional tap parameters. Link to table TBA
467
+ # example: {:behavior_name => 'long_tap', :use_tap_screen => true}
468
+ # default: {}
469
+ #
470
+ # == returns
471
+ # NilClass
472
+ # description: -
473
+ # example: -
474
+ #
475
+ # == exceptions
476
+ # ArgumentError
477
+ # description: If tap_params is not a Hash or a Fixnum type
478
+ #
479
+ def long_tap( time = 1, button = :Left, tap_params = {} )
368
480
 
369
481
  logging_enabled = MobyUtil::Logger.instance.enabled
370
482
  MobyUtil::Logger.instance.enabled = false
371
483
 
372
484
 
373
485
  raise ArgumentError.new("First parameter should be time between taps or Hash") unless tap_params.kind_of? Hash or tap_params.kind_of? Fixnum
374
-
375
486
 
376
- begin
377
- tap_down(button, false, tap_params)
487
+
488
+ begin
489
+ tap_down(button, false, tap_params)
378
490
  sleep time
379
491
  tap_up(button, false, tap_params)
380
- rescue Exception => e
381
- MobyUtil::Logger.instance.enabled = logging_enabled
492
+ rescue Exception => e
493
+ MobyUtil::Logger.instance.enabled = logging_enabled
382
494
  MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed long_tap with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap;"
383
495
  Kernel::raise e
384
496
 
385
- end
497
+ end
386
498
  MobyUtil::Logger.instance.enabled = logging_enabled
387
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation long_tap executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap;"
499
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation long_tap executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap;"
388
500
 
389
- nil
501
+ nil
390
502
 
391
503
  end
392
504
 
393
- # Long tap on the screen on the given relative coordinates of the object for the period of time given is seconds.
394
- # == params
395
- # x::x coordinate inside object
396
- # y::y coordinate inside object
397
- # time::(optional defaults to 1) number of seconds to hold the pointer down.
398
- # button::(optional defaults to :Left) button symbol supported values are: :NoButton, :Left, :Right, :Middle
399
- # == returns
400
- # == raises
401
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
402
- # ArgumentError:: If an invalid button type is given
403
- # === examples
404
- # @object.long_tap_object(1, 2, 1, :Left)
405
- def long_tap_object( x, y, time = 1, button = :Left, tap_params = {} )
406
-
407
- begin
408
- tap_down_object(x, y, button, tap_params)
409
- sleep time
410
- tap_up_object(x, y, button, tap_params)
411
- rescue Exception => e
412
-
413
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed long_tap_object with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap_object;"
414
- Kernel::raise e
415
-
416
- end
417
-
418
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation long_tap_object executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap_object;"
419
-
420
- nil
421
-
422
- end
423
-
424
- # Tap down the screen on the coordinates of the object
425
- # == params
426
- # button::(optional defaults to :Left) button symbol supported values are: :NoButton, :Left, :Right, :Middle
427
- # refresh::(optional) If false ui state will not be updated
428
- # == returns
429
- # == raises
430
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
431
- # ArgumentError:: If an invalid button type is given
432
- # === examples
433
- # @object.long_tap_down
434
- def tap_down( button = :Left, refresh = false, tap_params = {} )
435
-
436
- begin
505
+ # == description
506
+ # Long tap on the screen on the given relative coordinates of the object for the period of time given is seconds.
507
+ #
508
+ # == arguments
509
+ # x
510
+ # Integer
511
+ # description: X-coordinate inside the object
512
+ # example: 10
513
+ # y
514
+ # Integer
515
+ # description: Y-coordinate inside the object
516
+ # example: 11
517
+ #
518
+ # time
519
+ # Integer
520
+ # description: Number of seconds to hold the pointer down.
521
+ # example: 5
522
+ # default: 1
523
+ #
524
+ # button
525
+ # Symbol
526
+ # description: Button symbol supported values are: :NoButton, :Left, :Right, :Middle .
527
+ # example: :Right
528
+ # default: :Left
529
+ #
530
+ # tap_params
531
+ # Hash
532
+ # description: Hash with additional tap parameters. Link to table TBA
533
+ # example: {:behavior_name => 'long_tap', :use_tap_screen => true}
534
+ # default: {}
535
+ #
536
+ # == returns
537
+ # NilClass
538
+ # description: -
539
+ # example: -
540
+ #
541
+ # == exceptions
542
+ #
543
+ def long_tap_object( x, y, time = 1, button = :Left, tap_params = {} )
544
+
545
+ begin
546
+ tap_down_object(x, y, button, tap_params)
547
+ sleep time
548
+ tap_up_object(x, y, button, tap_params)
549
+ rescue Exception => e
550
+
551
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed long_tap_object with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap_object;"
552
+ Kernel::raise e
553
+
554
+ end
555
+
556
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation long_tap_object executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_tap_object;"
557
+
558
+ nil
559
+
560
+ end
561
+
562
+
563
+ # == description
564
+ # Tap down the screen on the coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
565
+ #
566
+ # == arguments
567
+ # button
568
+ # Symbol
569
+ # description: button to tap down
570
+ # example: :Right
571
+ # refresh
572
+ # Boolean
573
+ # description: if true, object will be refreshed after tap_down
574
+ # example: true
575
+ # tap_params
576
+ # Hash
577
+ # description: arguments, link to table TBA
578
+ # example: -
579
+ #
580
+ # == returns
581
+ # NilClass
582
+ # description: -
583
+ # example: nil
584
+ #
585
+ # == exceptions
586
+ # TestObjectNotFoundError
587
+ # description: object is not visible on screen
588
+ # ArgumentError
589
+ # description: invalid button
590
+ def tap_down( button = :Left, refresh = false, tap_params = {} )
591
+
592
+ begin
437
593
  use_tap_screen = tap_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
438
594
  tap_params[:use_tap_screen].to_s
439
595
  tap_params[:useTapScreen] = use_tap_screen
440
596
 
441
- raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
442
- command = command_params #in qt_behaviour
443
- command.command_name('MousePress')
597
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
598
+ command = command_params #in qt_behaviour
599
+ command.command_name('MousePress')
444
600
 
445
- params = {'button' => @@_buttons_map[button],
446
- 'mouseMove' => MobyUtil::Parameter[ @sut.id ][ :in_tap_move_pointer, 'false' ],
447
- 'useTapScreen' => use_tap_screen}
601
+ params = {
602
+ 'button' => @@_buttons_map[button],
603
+ 'mouseMove' => MobyUtil::Parameter[ @sut.id ][ :in_tap_move_pointer, 'false' ],
604
+ 'useTapScreen' => use_tap_screen,
605
+ 'x_off' => MobyUtil::Parameter[ @sut.id ][:tap_x_offset , '0' ],
606
+ 'y_off' => MobyUtil::Parameter[ @sut.id ][:tap_y_offset , '0' ]
607
+ }
448
608
 
449
609
  if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
450
- params['x'] = center_x
451
- params['y'] = center_y
452
- params['useCoordinates'] = 'true'
453
- end
610
+ params['x'] = center_x
611
+ params['y'] = center_y
612
+ params['useCoordinates'] = 'true'
613
+ end
454
614
  params.merge!(tap_params)
455
615
 
456
616
  command.command_params(params)
457
- @sut.execute_command(command)
617
+ @sut.execute_command(command)
618
+
619
+ self.force_refresh( :id => get_application_id ) if refresh
458
620
 
459
- self.force_refresh( :id => get_application_id ) if refresh
621
+ rescue Exception => e
460
622
 
461
- rescue Exception => e
623
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed tap_down with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_down;"
624
+ Kernel::raise e
462
625
 
463
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed tap_down with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_down;"
464
- Kernel::raise e
626
+ end
465
627
 
466
- end
628
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation tap_down executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_down;"
467
629
 
468
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation tap_down executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_down;"
630
+ nil
469
631
 
470
- nil
632
+ end
471
633
 
472
- end
473
634
 
474
- # Release the pointer on the screen on the coordinates of the object
475
- # == params
476
- # button::(optional defaults to :Left) button symbol supported values are: :NoButton, :Left, :Right, :Middle
477
- # refresh::(optional) If false ui state will not be updated
478
- # == returns
479
- # == raises
480
- # TestObjectNotFoundError:: If a graphics item is not visible on screen
481
- # ArgumentError:: If an invalid button type is given
482
- # === examples
483
- # @object.tap_up
484
- def tap_up( button = :Left, refresh = true, tap_params = {} )
485
635
 
486
- begin
636
+ # == description
637
+ # Release tap on the coordinates of the object. TBA link to generic information about tapping, options read from TDriver parameters etc.
638
+ #
639
+ # == arguments
640
+ # button
641
+ # Symbol
642
+ # description: button to tap down
643
+ # example: :Right
644
+ # refresh
645
+ # Boolean
646
+ # description: if true, object will be refreshed after tap_down
647
+ # example: false
648
+ # tap_params
649
+ # Hash
650
+ # description: arguments, link to table TBA
651
+ # example: -
652
+ #
653
+ # == returns
654
+ # NilClass
655
+ # description: -
656
+ # example: nil
657
+ #
658
+ # == exceptions
659
+ # TestObjectNotFoundError
660
+ # description: object is not visible on screen
661
+ # ArgumentError
662
+ # description: invalid button
663
+ def tap_up( button = :Left, refresh = true, tap_params = {} )
664
+
665
+ begin
487
666
  use_tap_screen = tap_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
488
667
  tap_params[:use_tap_screen].to_s
489
668
  tap_params[:useTapScreen] = use_tap_screen
490
669
 
491
- raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
492
- command = command_params #in qt_behaviour
493
- command.command_name('MouseRelease')
670
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
671
+ command = command_params #in qt_behaviour
672
+ command.command_name('MouseRelease')
494
673
  params = {'button' => @@_buttons_map[button], 'useTapScreen' => use_tap_screen}
495
674
 
496
675
  if attribute('objectType') == 'Web' or attribute('objectType') == 'Embedded'
497
- params['x'] = center_x
498
- params['y'] = center_y
499
- params['useCoordinates'] = 'true'
500
- end
676
+ params['x'] = center_x
677
+ params['y'] = center_y
678
+ params['useCoordinates'] = 'true'
679
+ params['x_off'] = MobyUtil::Parameter[ @sut.id ][:tap_x_offset , '0' ]
680
+ params['y_off'] = MobyUtil::Parameter[ @sut.id ][:tap_y_offset , '0' ]
681
+
682
+ end
501
683
  params.merge!(tap_params)
502
684
 
503
685
  command.command_params(params)
504
686
 
505
687
 
506
- @sut.execute_command(command)
507
- self.force_refresh({:id => get_application_id}) if refresh
688
+ @sut.execute_command(command)
689
+ self.force_refresh({:id => get_application_id}) if refresh
690
+
691
+ rescue Exception => e
508
692
 
509
- rescue Exception => e
510
-
511
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed tap_up with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_up;"
512
- Kernel::raise e
693
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed tap_up with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_up;"
694
+ Kernel::raise e
513
695
 
514
- end
696
+ end
515
697
 
516
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation tap_up executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_up;"
698
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation tap_up executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};tap_up;"
517
699
 
518
- nil
700
+ nil
519
701
 
520
- end
702
+ end
521
703
 
522
- # TODO: [2009-04-02] Remove deprevated methods?
704
+ # TODO: [2009-04-02] Remove deprevated methods?
523
705
 
524
- # warning: TestObject#press is deprecated; use TestObject#tap
706
+ # warning: TestObject#press is deprecated; use TestObject#tap
525
707
  # == deprecated
526
708
  # 0.8.x
527
709
  # == description
528
710
  # TestObject#press is deprecated, use TestObject#tap instead.
529
- def press( tap_count = 1, button = :Left )
711
+ def press( tap_count = 1, button = :Left )
530
712
 
531
- $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#press is deprecated; use TestObject#tap"
713
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#press is deprecated; use TestObject#tap"
532
714
 
533
- begin
534
- raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
715
+ begin
716
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(button)
535
717
 
536
- command = command_params #in qt_behaviour
718
+ command = command_params #in qt_behaviour
537
719
 
538
- command.command_name('Tap')
720
+ command.command_name('Tap')
539
721
 
540
- command.command_params(
541
- 'x' => center_x,
542
- 'y' => center_y,
543
- 'count' => tap_count.to_s,
544
- 'button' => @@_buttons_map[button],
545
- 'mouseMove'=>'true'
722
+ command.command_params(
723
+ 'x' => center_x,
724
+ 'y' => center_y,
725
+ 'count' => tap_count.to_s,
726
+ 'button' => @@_buttons_map[button],
727
+ 'mouseMove'=>'true',
728
+ 'x_off' => MobyUtil::Parameter[ @sut.id ][:tap_x_offset , '0' ],
729
+ 'y_off' => MobyUtil::Parameter[ @sut.id ][:tap_y_offset , '0' ]
546
730
  )
547
731
 
548
- @sut.execute_command(command)
732
+ @sut.execute_command(command)
549
733
 
550
- rescue Exception => e
734
+ rescue Exception => e
551
735
 
552
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed press with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};press;"
553
- Kernel::raise e
736
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed press with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};press;"
737
+ Kernel::raise e
554
738
 
555
- end
739
+ end
556
740
 
557
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation press executed successfully with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};press;"
741
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation press executed successfully with tap_count \"#{tap_count}\", button \"#{button.to_s}\".;#{identity};press;"
558
742
 
559
- nil
743
+ nil
560
744
 
561
- end
745
+ end
562
746
 
563
- # TestObject#long_press is deprecated; use TestObject#long_tap
747
+ # TestObject#long_press is deprecated; use TestObject#long_tap
564
748
  # == deprecated
565
749
  # 0.8.x
566
750
  # == description
567
751
  # TestObject#long_press is deprecated, use TestObject#long_tap instead.
568
- def long_press( time = 1, button = :Left )
752
+ def long_press( time = 1, button = :Left )
753
+
754
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#long_press is deprecated; use TestObject#long_tap"
569
755
 
570
- $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#long_press is deprecated; use TestObject#long_tap"
756
+ begin
757
+ long_tap(time, button)
758
+ rescue Exception => e
759
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed long_press with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_press;"
760
+ Kernel::raise e
761
+ end
571
762
 
572
- begin
573
- long_tap(time, button)
574
- rescue Exception => e
575
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed long_press with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_press;"
576
- Kernel::raise e
577
- end
763
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation long_press executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_press;"
578
764
 
579
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation long_press executed successfully with time \"#{time.to_s}\", button \"#{button.to_s}\".;#{identity};long_press;"
580
-
581
- nil
765
+ nil
582
766
 
583
- end
767
+ end
584
768
 
585
- # TestObject#hold is deprecated; use TestObject#tap_down
769
+ # TestObject#hold is deprecated; use TestObject#tap_down
586
770
  # == deprecated
587
771
  # 0.8.x
588
772
  # == description
589
773
  # TestObject#hold is deprecated, use TestObject#tap_down instead.
590
- def hold(button = :Left, refresh = true)
774
+ def hold(button = :Left, refresh = true)
591
775
 
592
- $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#hold is deprecated; use TestObject#tap_down"
776
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#hold is deprecated; use TestObject#tap_down"
593
777
 
594
- begin
778
+ begin
595
779
 
596
- tap_down(button, refresh)
780
+ tap_down(button, refresh)
597
781
 
598
- rescue Exception => e
782
+ rescue Exception => e
599
783
 
600
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed hold with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};hold;"
601
- Kernel::raise e
784
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed hold with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};hold;"
785
+ Kernel::raise e
602
786
 
603
- end
604
-
605
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation hold executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};hold;"
606
-
607
- nil
787
+ end
788
+
789
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation hold executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};hold;"
790
+
791
+ nil
608
792
 
609
- end
793
+ end
610
794
 
611
- # TestObject#release is deprecated; use TestObject#tap_up
795
+ # TestObject#release is deprecated; use TestObject#tap_up
612
796
  # == deprecated
613
797
  # 0.8.x
614
798
  # == description
615
799
  # TestObject#release is deprecated, use TestObject#tap_up instead.
616
- def release( button = :Left, refresh = true )
800
+ def release( button = :Left, refresh = true )
617
801
 
618
- $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#release is deprecated; use TestObject#tap_up"
802
+ $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#release is deprecated; use TestObject#tap_up"
619
803
 
620
- begin
804
+ begin
621
805
 
622
- tap_up(button, refresh)
806
+ tap_up(button, refresh)
623
807
 
624
- rescue Exception => e
808
+ rescue Exception => e
625
809
 
626
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed release with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};release;"
627
- Kernel::raise e
810
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed release with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};release;"
811
+ Kernel::raise e
628
812
 
629
- end
813
+ end
630
814
 
631
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation release executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};release;"
632
-
633
- nil
815
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation release executed successfully with with button \"#{button.to_s}\", refresh \"#{refresh.to_s}\".;#{identity};release;"
634
816
 
635
- end
817
+ nil
636
818
 
637
- =begin
638
- private
819
+ end
820
+
821
+ =begin
822
+ private
639
823
 
640
824
  def center_x
641
825
  x = self.attribute('x_absolute').to_i
@@ -649,11 +833,11 @@ module MobyBehaviour
649
833
  height = self.attribute('height').to_i
650
834
  y = y + (height/2)
651
835
  y.to_s
652
- end
653
- =end
836
+ end
837
+ =end
654
838
 
655
- # enable hooking for performance measurement & debug logging
656
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
839
+ # enable hooking for performance measurement & debug logging
840
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
657
841
 
658
842
  end # Widget
659
843