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