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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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