calabash 2.0.0.pre11 → 2.0.0.prelegacy
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 +4 -4
- data/README.md +17 -5
- data/bin/calabash +4 -3
- data/lib/calabash/android/adb.rb +37 -34
- data/lib/calabash/android/application.rb +1 -1
- data/lib/calabash/android/build/builder.rb +1 -1
- data/lib/calabash/android/build/java_keystore.rb +1 -1
- data/lib/calabash/android/build/resigner.rb +1 -1
- data/lib/calabash/android/device.rb +46 -204
- data/lib/calabash/android/environment.rb +1 -14
- data/lib/calabash/android/gestures.rb +22 -6
- data/lib/calabash/android/interactions.rb +17 -14
- data/lib/calabash/android/legacy.rb +141 -4
- data/lib/calabash/android/lib/.irbrc +1 -9
- data/lib/calabash/android/lib/AndroidManifest.xml +2 -23
- data/lib/calabash/android/lib/TestServer.apk +0 -0
- data/lib/calabash/android/life_cycle.rb +3 -3
- data/lib/calabash/android/orientation.rb +8 -8
- data/lib/calabash/android/physical_buttons.rb +16 -19
- data/lib/calabash/android/server.rb +1 -6
- data/lib/calabash/android/text.rb +12 -12
- data/lib/calabash/android.rb +26 -92
- data/lib/calabash/application.rb +0 -3
- data/lib/calabash/cli/generate.rb +18 -8
- data/lib/calabash/cli/helpers.rb +9 -4
- data/lib/calabash/cli/run.rb +1 -1
- data/lib/calabash/console_helpers.rb +11 -179
- data/lib/calabash/device.rb +19 -4
- data/lib/calabash/gestures.rb +198 -292
- data/lib/calabash/http/retriable_client.rb +3 -18
- data/lib/calabash/http.rb +0 -1
- data/lib/calabash/interactions.rb +40 -3
- data/lib/calabash/ios/conditions.rb +1 -1
- data/lib/calabash/ios/console_helpers.rb +2 -2
- data/lib/calabash/ios/date_picker.rb +8 -10
- data/lib/calabash/ios/device/device_implementation.rb +21 -9
- data/lib/calabash/ios/device/gestures_mixin.rb +55 -53
- data/lib/calabash/ios/device/keyboard_mixin.rb +0 -21
- data/lib/calabash/ios/device/rotation_mixin.rb +65 -3
- data/lib/calabash/ios/device/text_mixin.rb +21 -0
- data/lib/calabash/ios/device.rb +1 -0
- data/lib/calabash/ios/gestures.rb +90 -24
- data/lib/calabash/ios/interactions.rb +6 -1
- data/lib/calabash/ios/lib/.irbrc +2 -9
- data/lib/calabash/ios/orientation.rb +8 -8
- data/lib/calabash/ios/runtime.rb +14 -14
- data/lib/calabash/ios/scroll.rb +17 -25
- data/lib/calabash/ios/slider.rb +18 -11
- data/lib/calabash/ios/text.rb +74 -20
- data/lib/calabash/ios/uia.rb +1 -1
- data/lib/calabash/ios.rb +16 -77
- data/lib/calabash/legacy.rb +6 -9
- data/lib/calabash/lib/skeleton/{Gemfile.skeleton → Gemfile} +0 -0
- data/lib/calabash/lib/skeleton/config/{cucumber.yml.skeleton → cucumber.yml} +0 -0
- data/lib/calabash/lib/skeleton/features/{sample.feature.skeleton → sample.feature} +0 -0
- data/lib/calabash/lib/skeleton/features/step_definitions/{sample_steps.rb.skeleton → calabash_steps.rb} +8 -8
- data/lib/calabash/lib/skeleton/features/support/{dry_run.rb.skeleton → dry_run.rb} +5 -2
- data/lib/calabash/lib/skeleton/features/support/{env.rb.skeleton → env.rb} +8 -2
- data/lib/calabash/lib/skeleton/features/support/hooks.rb +83 -0
- data/lib/calabash/life_cycle.rb +8 -16
- data/lib/calabash/location.rb +15 -14
- data/lib/calabash/orientation.rb +8 -8
- data/lib/calabash/page.rb +4 -1
- data/lib/calabash/screenshot.rb +3 -3
- data/lib/calabash/text.rb +19 -31
- data/lib/calabash/utility.rb +8 -41
- data/lib/calabash/version.rb +1 -1
- data/lib/calabash/wait.rb +192 -177
- data/lib/calabash.rb +10 -53
- metadata +32 -43
- data/lib/calabash/android/device/helper_application.rb +0 -95
- data/lib/calabash/android/lib/HelperApplication.apk +0 -0
- data/lib/calabash/android/lib/HelperApplicationTestServer.apk +0 -0
- data/lib/calabash/android/web.rb +0 -12
- data/lib/calabash/http/forwarding_client.rb +0 -23
- data/lib/calabash/internal.rb +0 -48
- data/lib/calabash/ios/automator/automator.rb +0 -217
- data/lib/calabash/ios/automator/coordinates.rb +0 -37
- data/lib/calabash/ios/automator/device_agent.rb +0 -379
- data/lib/calabash/ios/automator.rb +0 -9
- data/lib/calabash/ios/legacy.rb +0 -6
- data/lib/calabash/ios/web.rb +0 -10
- data/lib/calabash/lib/skeleton/features/support/hooks.rb.skeleton +0 -34
- data/lib/calabash/retry.rb +0 -33
- data/lib/calabash/stubs.rb +0 -21
- data/lib/calabash/web.rb +0 -44
data/lib/calabash/wait.rb
CHANGED
@@ -2,7 +2,7 @@ module Calabash
|
|
2
2
|
|
3
3
|
# A public API for waiting for things to happen.
|
4
4
|
module Wait
|
5
|
-
#
|
5
|
+
# @!visibility private
|
6
6
|
class TimeoutError < RuntimeError
|
7
7
|
end
|
8
8
|
|
@@ -13,7 +13,7 @@ module Calabash
|
|
13
13
|
timeout: Environment::WAIT_TIMEOUT,
|
14
14
|
|
15
15
|
# default message (String or Proc) if timeout occurs
|
16
|
-
|
16
|
+
message: lambda do |options|
|
17
17
|
"Timed out after waiting for #{options[:timeout]} seconds..."
|
18
18
|
end,
|
19
19
|
|
@@ -21,60 +21,52 @@ module Calabash
|
|
21
21
|
retry_frequency: 0.1,
|
22
22
|
|
23
23
|
# default exception type to raise when the timeout is exceeded
|
24
|
-
exception_class: Calabash::Wait::TimeoutError
|
24
|
+
exception_class: Calabash::Wait::TimeoutError,
|
25
|
+
|
26
|
+
# whether to embed a screenshot on failure
|
27
|
+
screenshot_on_error: true
|
25
28
|
}
|
26
29
|
|
27
30
|
# Returns the default wait options.
|
28
|
-
#
|
29
|
-
# @example
|
30
|
-
# # Get the current timeout message
|
31
|
-
# Calabash::Wait.default_options[:timeout_message]
|
32
|
-
#
|
33
|
-
# @example
|
34
|
-
# Calabash::Wait.default_options[:timeout] = 60
|
35
|
-
#
|
36
|
-
# @see @@default_options
|
37
31
|
# @return [Hash] Key/value pairs describing the wait options.
|
38
32
|
def self.default_options
|
39
33
|
@@default_options
|
40
34
|
end
|
41
35
|
|
36
|
+
# Sets the default wait options.
|
37
|
+
# @param [Hash] value The new default wait options.
|
38
|
+
def self.default_options=(value)
|
39
|
+
@@default_options = value
|
40
|
+
end
|
41
|
+
|
42
42
|
# Evaluates the block given. If the execution time of the block exceeds
|
43
|
-
# `timeout` it will raise a
|
44
|
-
# {Calabash::Wait.default_options
|
45
|
-
# Calabash::Wait.default_options[:exception_class]}).
|
43
|
+
# `timeout` it will raise a TimeoutError.
|
46
44
|
#
|
47
45
|
# If you have an explicit or implicit loop in your block, or
|
48
46
|
# you want to limit the possible execution time of your block, use
|
49
|
-
#
|
47
|
+
# `with_timeout`.
|
50
48
|
#
|
51
49
|
# @example
|
52
|
-
# # If the 'PictureRow' view does not exist, keep
|
53
|
-
#
|
54
|
-
#
|
50
|
+
# # If the 'PictureRow' view does not exist, keep scrolling down.
|
51
|
+
# with_timeout(15, 'Could not find picture row') do
|
52
|
+
# scroll_down until view_exists?("PictureRow")
|
55
53
|
# end
|
56
54
|
#
|
57
|
-
#
|
58
|
-
# # Pan up **at least once** and continue pan up until the
|
55
|
+
# # Scroll down **at least once** and continue scrolling down until the
|
59
56
|
# # 'PictureRow' exists.
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
57
|
+
# wait_for(15, 'Could not find picture row') do
|
58
|
+
# scroll_down
|
59
|
+
# view_exists?("PictureRow")
|
63
60
|
# end
|
64
61
|
#
|
65
62
|
# @param [Number] timeout The time before failing
|
66
63
|
# @param [String, Proc] timeout_message The error message if timed out
|
67
|
-
# @param [Class] exception_class
|
68
|
-
#
|
69
|
-
# Calabash::Wait.default_options[:exception_class]}) The exception type
|
70
|
-
# raised if timed out
|
71
|
-
# @return The returned value of the block given
|
64
|
+
# @param [Class] exception_class The exception type raised if timed out
|
65
|
+
# @return The returned value of `block`
|
72
66
|
# @raise [ArgumentError] If an invalid timeout is given (<= 0)
|
73
67
|
# @raise [ArgumentError] If no timeout_message is given
|
74
68
|
# @raise [ArgumentError] If no block is given
|
75
|
-
def with_timeout(timeout, timeout_message,
|
76
|
-
exception_class: Wait.default_options[:exception_class],
|
77
|
-
&block)
|
69
|
+
def with_timeout(timeout, timeout_message, exception_class = TimeoutError, &block)
|
78
70
|
if timeout_message.nil? ||
|
79
71
|
(timeout_message.is_a?(String) && timeout_message.empty?)
|
80
72
|
raise ArgumentError, 'You must provide a timeout message'
|
@@ -111,7 +103,7 @@ module Calabash
|
|
111
103
|
end
|
112
104
|
|
113
105
|
if failed
|
114
|
-
|
106
|
+
fail(exception_class, message)
|
115
107
|
end
|
116
108
|
end
|
117
109
|
|
@@ -121,43 +113,31 @@ module Calabash
|
|
121
113
|
# If the block does not evaluate to truthy within the given timeout
|
122
114
|
# an TimeoutError will be raised.
|
123
115
|
#
|
124
|
-
# The default timeout will be
|
125
|
-
# Wait.default_options[:timeout]}.
|
126
|
-
#
|
127
|
-
# @example
|
128
|
-
# # Pan up **at least once** and continue pan up until the
|
129
|
-
# # 'PictureRow' exists.
|
130
|
-
# cal.wait_for('Could not find picture row') do
|
131
|
-
# cal.pan_screen_up
|
132
|
-
# cal.view_exists?("PictureRow")
|
133
|
-
# end
|
116
|
+
# The default timeout will be `Wait.default_options[:timeout]`.
|
134
117
|
#
|
135
118
|
# @see Calabash::Wait#with_timeout
|
119
|
+
# @see Calabash::Environment::WAIT_TIMEOUT
|
120
|
+
# @see Calabash::Wait.default_options
|
136
121
|
#
|
137
122
|
# @param [String, Proc] timeout_message The error message if timed out.
|
138
|
-
# @param [
|
139
|
-
#
|
140
|
-
# @
|
141
|
-
#
|
142
|
-
#
|
143
|
-
#
|
144
|
-
# (default: {Calabash::Wait.default_options
|
145
|
-
# Calabash::Wait.default_options[:exception_class]}) The exception type
|
146
|
-
# raised if timed out
|
123
|
+
# @param [Hash] options Used to control the behavior of the wait.
|
124
|
+
# @option options [Number] :timeout (30) How long to wait before timing out.
|
125
|
+
# @option options [Number] :retry_frequency (0.3) How often to check for
|
126
|
+
# the condition block to be truthy.
|
127
|
+
# @option options [Boolean] :screenshot_on_error (true) Take a screenshot
|
128
|
+
# if the block fails to be truthy or an error is raised in the block.
|
147
129
|
# @return The returned value of `block` if it is truthy
|
148
|
-
def wait_for(timeout_message,
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
with_timeout(timeout, timeout_message,
|
154
|
-
exception_class: exception_class) do
|
130
|
+
def wait_for(timeout_message, options={}, &block)
|
131
|
+
wait_options = Wait.default_options.merge(options)
|
132
|
+
timeout = wait_options[:timeout]
|
133
|
+
|
134
|
+
with_timeout(timeout, timeout_message, wait_options[:exception_class]) do
|
155
135
|
loop do
|
156
136
|
value = block.call
|
157
137
|
|
158
138
|
return value if value
|
159
139
|
|
160
|
-
sleep(retry_frequency)
|
140
|
+
sleep(wait_options[:retry_frequency])
|
161
141
|
end
|
162
142
|
end
|
163
143
|
end
|
@@ -165,69 +145,62 @@ module Calabash
|
|
165
145
|
# Waits for `query` to match one or more views.
|
166
146
|
#
|
167
147
|
# @example
|
168
|
-
#
|
148
|
+
# wait_for_view({marked: 'mark'})
|
169
149
|
#
|
170
150
|
# @example
|
171
|
-
#
|
172
|
-
# timeout_message: "Did not see login button")
|
173
|
-
#
|
174
|
-
# @example
|
175
|
-
# text = cal.wait_for_view("myview")['text']
|
176
|
-
#
|
177
|
-
# @see Calabash::Wait#wait_for for optional parameters
|
151
|
+
# text = wait_for_view("myview")['text']
|
178
152
|
#
|
179
153
|
# @param [String, Hash, Calabash::Query] query Query to match view
|
154
|
+
# @see Calabash::Wait#with_timeout for options
|
180
155
|
# @return [Hash] The first view matching `query`.
|
181
|
-
|
182
|
-
def wait_for_view(query,
|
183
|
-
timeout: Calabash::Wait.default_options[:timeout],
|
184
|
-
timeout_message: nil,
|
185
|
-
retry_frequency: Calabash::Wait.default_options[:retry_frequency])
|
156
|
+
def wait_for_view(query, options={})
|
186
157
|
if query.nil?
|
187
158
|
raise ArgumentError, 'Query cannot be nil'
|
188
159
|
end
|
189
160
|
|
190
|
-
|
191
|
-
|
161
|
+
defaults = Wait.default_options.dup
|
162
|
+
|
163
|
+
defaults[:message] = lambda do |wait_options|
|
164
|
+
"Waited #{wait_options[:timeout]} seconds for #{parse_query_list(query)} to match a view"
|
192
165
|
end
|
193
166
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
167
|
+
defaults[:exception_class] = ViewNotFoundError
|
168
|
+
|
169
|
+
timeout_options = defaults.merge(options)
|
170
|
+
|
171
|
+
wait_for(timeout_options[:message],
|
172
|
+
{timeout: timeout_options[:timeout],
|
173
|
+
exception_class: timeout_options[:exception_class],
|
174
|
+
retry_frequency: timeout_options[:retry_frequency]}) do
|
175
|
+
view_exists?(query)
|
200
176
|
end.first
|
201
177
|
end
|
202
178
|
|
203
179
|
# Waits for all `queries` to simultaneously match at least one view.
|
204
180
|
#
|
205
|
-
# @example
|
206
|
-
# cal.wait_for_views({id: 'foo'}, {id: 'bar'})
|
207
|
-
#
|
208
|
-
# @see Calabash::Wait#wait_for for optional parameters
|
209
|
-
#
|
210
181
|
# @param [String, Hash, Calabash::Query] queries List of queries or a
|
211
182
|
# query.
|
212
|
-
#
|
213
|
-
# @
|
214
|
-
#
|
215
|
-
def wait_for_views(*queries,
|
216
|
-
timeout: Calabash::Wait.default_options[:timeout],
|
217
|
-
timeout_message: nil,
|
218
|
-
retry_frequency: Calabash::Wait.default_options[:retry_frequency])
|
183
|
+
#
|
184
|
+
# @see Calabash::Wait#with_timeout for options
|
185
|
+
# @return [void] The return value for this method is undefined.
|
186
|
+
def wait_for_views(*queries, **options)
|
219
187
|
if queries.nil? || queries.any?(&:nil?)
|
220
188
|
raise ArgumentError, 'Query cannot be nil'
|
221
189
|
end
|
222
190
|
|
223
|
-
|
224
|
-
|
191
|
+
defaults = Wait.default_options.dup
|
192
|
+
defaults[:message] = lambda do |wait_options|
|
193
|
+
"Waited #{wait_options[:timeout]} seconds for #{parse_query_list(queries)} to each match a view"
|
225
194
|
end
|
226
195
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
196
|
+
defaults[:exception_class] = ViewNotFoundError
|
197
|
+
|
198
|
+
timeout_options = defaults.merge(options)
|
199
|
+
|
200
|
+
wait_for(timeout_options[:message],
|
201
|
+
{timeout: timeout_options[:timeout],
|
202
|
+
exception_class: timeout_options[:exception_class],
|
203
|
+
retry_frequency: timeout_options[:retry_frequency]}) do
|
231
204
|
views_exist?(*queries)
|
232
205
|
end
|
233
206
|
|
@@ -238,64 +211,54 @@ module Calabash
|
|
238
211
|
|
239
212
|
# Waits for `query` not to match any views
|
240
213
|
#
|
241
|
-
# @example
|
242
|
-
# cal.wait_for_no_view({marked: 'mark'})
|
243
|
-
#
|
244
|
-
# @example
|
245
|
-
# cal.wait_for_no_view({marked: 'login'},
|
246
|
-
# timeout_message: "Login button did not disappear")
|
247
|
-
#
|
248
|
-
# @see Calabash::Wait#wait_for for optional parameters
|
249
|
-
#
|
250
214
|
# @param [String, Hash, Calabash::Query] query Query to match view
|
251
|
-
# @
|
252
|
-
def wait_for_no_view(query,
|
253
|
-
timeout: Calabash::Wait.default_options[:timeout],
|
254
|
-
timeout_message: nil,
|
255
|
-
retry_frequency: Calabash::Wait.default_options[:retry_frequency])
|
215
|
+
# @see Calabash::Wait#with_timeout for options
|
216
|
+
def wait_for_no_view(query, options={})
|
256
217
|
if query.nil?
|
257
218
|
raise ArgumentError, 'Query cannot be nil'
|
258
219
|
end
|
259
220
|
|
260
|
-
|
261
|
-
|
221
|
+
defaults = Wait.default_options.dup
|
222
|
+
defaults[:message] = lambda do |wait_options|
|
223
|
+
"Waited #{wait_options[:timeout]} seconds for #{parse_query_list(query)} to not match any view"
|
262
224
|
end
|
263
225
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
226
|
+
defaults[:exception_class] = ViewFoundError
|
227
|
+
|
228
|
+
timeout_options = defaults.merge(options)
|
229
|
+
|
230
|
+
wait_for(timeout_options[:message],
|
231
|
+
{timeout: timeout_options[:timeout],
|
232
|
+
exception_class: timeout_options[:exception_class],
|
233
|
+
retry_frequency: timeout_options[:retry_frequency]}) do
|
268
234
|
!view_exists?(query)
|
269
235
|
end
|
270
236
|
end
|
271
237
|
|
272
238
|
# Waits for all `queries` to simultaneously match no views
|
273
239
|
#
|
274
|
-
# @example
|
275
|
-
# cal.wait_for_no_views({id: 'foo'}, {id: 'bar'})
|
276
|
-
#
|
277
|
-
# @see Calabash::Wait#wait_for for optional parameters
|
278
|
-
#
|
279
240
|
# @param [String, Hash, Calabash::Query] queries List of queries or a
|
280
241
|
# query.
|
281
|
-
#
|
282
|
-
#
|
283
|
-
def wait_for_no_views(*queries,
|
284
|
-
timeout: Calabash::Wait.default_options[:timeout],
|
285
|
-
timeout_message: nil,
|
286
|
-
retry_frequency: Calabash::Wait.default_options[:retry_frequency])
|
242
|
+
#
|
243
|
+
# @see Calabash::Wait#with_timeout for options
|
244
|
+
def wait_for_no_views(*queries, **options)
|
287
245
|
if queries.nil? || queries.any?(&:nil?)
|
288
246
|
raise ArgumentError, 'Query cannot be nil'
|
289
247
|
end
|
290
248
|
|
291
|
-
|
292
|
-
|
249
|
+
defaults = Wait.default_options.dup
|
250
|
+
defaults[:message] = lambda do |wait_options|
|
251
|
+
"Waited #{wait_options[:timeout]} seconds for #{parse_query_list(queries)} to each not match any view"
|
293
252
|
end
|
294
253
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
254
|
+
defaults[:exception_class] = ViewFoundError
|
255
|
+
|
256
|
+
timeout_options = defaults.merge(options)
|
257
|
+
|
258
|
+
wait_for(timeout_options[:message],
|
259
|
+
{timeout: timeout_options[:timeout],
|
260
|
+
exception_class: timeout_options[:exception_class],
|
261
|
+
retry_frequency: timeout_options[:retry_frequency]}) do
|
299
262
|
!views_exist?(*queries)
|
300
263
|
end
|
301
264
|
end
|
@@ -303,7 +266,7 @@ module Calabash
|
|
303
266
|
# Does the given `query` match at least one view?
|
304
267
|
#
|
305
268
|
# @param [String, Hash, Calabash::Query] query Query to match view
|
306
|
-
# @return [
|
269
|
+
# @return [Object] Returns truthy if the `query` matches at least one view
|
307
270
|
# @raise [ArgumentError] If given an invalid `query`
|
308
271
|
def view_exists?(query)
|
309
272
|
if query.nil?
|
@@ -312,15 +275,19 @@ module Calabash
|
|
312
275
|
|
313
276
|
result = query(query)
|
314
277
|
|
315
|
-
|
278
|
+
if result.empty?
|
279
|
+
false
|
280
|
+
else
|
281
|
+
result
|
282
|
+
end
|
316
283
|
end
|
317
284
|
|
318
285
|
# Does the given `queries` all match at least one view?
|
319
286
|
#
|
320
287
|
# @param [String, Hash, Calabash::Query] queries List of queries or a
|
321
288
|
# query
|
322
|
-
#
|
323
|
-
#
|
289
|
+
#
|
290
|
+
# @return Returns truthy if the `queries` all match at least one view
|
324
291
|
# @raise [ArgumentError] If given an invalid list of queries
|
325
292
|
def views_exist?(*queries)
|
326
293
|
if queries.nil? || queries.any?(&:nil?)
|
@@ -329,7 +296,11 @@ module Calabash
|
|
329
296
|
|
330
297
|
results = queries.map{|query| view_exists?(query)}
|
331
298
|
|
332
|
-
results.all?
|
299
|
+
if results.all?
|
300
|
+
results
|
301
|
+
else
|
302
|
+
false
|
303
|
+
end
|
333
304
|
end
|
334
305
|
|
335
306
|
# Expect `query` to match at least one view. Raise an exception if it does
|
@@ -345,7 +316,7 @@ module Calabash
|
|
345
316
|
|
346
317
|
unless view_exists?(query)
|
347
318
|
raise ViewNotFoundError,
|
348
|
-
"No view matched #{
|
319
|
+
"No view matched #{parse_query_list(query)}"
|
349
320
|
end
|
350
321
|
|
351
322
|
true
|
@@ -368,7 +339,7 @@ module Calabash
|
|
368
339
|
|
369
340
|
unless views_exist?(*queries)
|
370
341
|
raise ViewNotFoundError,
|
371
|
-
"Not all queries #{
|
342
|
+
"Not all queries #{parse_query_list(queries)} matched a view"
|
372
343
|
end
|
373
344
|
|
374
345
|
true
|
@@ -387,7 +358,7 @@ module Calabash
|
|
387
358
|
end
|
388
359
|
|
389
360
|
if view_exists?(query)
|
390
|
-
raise ViewFoundError, "A view matched #{
|
361
|
+
raise ViewFoundError, "A view matched #{parse_query_list(query)}"
|
391
362
|
end
|
392
363
|
|
393
364
|
true
|
@@ -408,7 +379,7 @@ module Calabash
|
|
408
379
|
|
409
380
|
if queries.map{|query| view_exists?(query)}.any?
|
410
381
|
raise ViewFoundError,
|
411
|
-
"Some views matched #{
|
382
|
+
"Some views matched #{parse_query_list(queries)}"
|
412
383
|
end
|
413
384
|
|
414
385
|
true
|
@@ -418,52 +389,84 @@ module Calabash
|
|
418
389
|
|
419
390
|
# Waits for a view containing `text`.
|
420
391
|
#
|
421
|
-
# @see Calabash::Wait#wait_for_view
|
422
|
-
#
|
423
392
|
# @param text [String] Text to look for
|
424
393
|
# @return [Object] The view matched by the text query
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
retry_frequency: Calabash::Wait.default_options[:retry_frequency])
|
429
|
-
|
430
|
-
wait_for_view("* {text CONTAINS[c] '#{text}'}",
|
431
|
-
timeout: timeout,
|
432
|
-
timeout_message: timeout_message,
|
433
|
-
retry_frequency: retry_frequency)
|
394
|
+
# @see Calabash::Wait#wait_for_view
|
395
|
+
def wait_for_text(text, options={})
|
396
|
+
wait_for_view("* {text CONTAINS[c] '#{text}'}", options)
|
434
397
|
end
|
435
398
|
|
436
399
|
# Waits for no views containing `text`.
|
437
400
|
#
|
438
|
-
# @see Calabash::Wait#wait_for_view
|
439
|
-
#
|
440
401
|
# @param text [String] Text to look for
|
441
|
-
# @
|
442
|
-
def
|
443
|
-
|
444
|
-
timeout_message: nil,
|
445
|
-
retry_frequency: Calabash::Wait.default_options[:retry_frequency])
|
446
|
-
|
447
|
-
wait_for_no_view("* {text CONTAINS[c] '#{text}'}",
|
448
|
-
timeout: timeout,
|
449
|
-
timeout_message: timeout_message,
|
450
|
-
retry_frequency: retry_frequency)
|
402
|
+
# @see Calabash::Wait#wait_for_no_view
|
403
|
+
def wait_for_text_to_disappear(text, options={})
|
404
|
+
wait_for_no_view("* {text CONTAINS[c] '#{text}'}", options)
|
451
405
|
end
|
452
406
|
|
453
|
-
#
|
454
|
-
|
455
|
-
|
407
|
+
# Raises an exception. Embeds a screenshot if
|
408
|
+
# Calabash::Wait#default_options[:screenshot_on_error] is true. The fail
|
409
|
+
# method should be used when the test should fail and stop executing. Do
|
410
|
+
# not use fail if you intent on rescuing the error raised without
|
411
|
+
# re-raising.
|
412
|
+
#
|
413
|
+
# @example
|
414
|
+
# unless view_exists?("* marked:'login'")
|
415
|
+
# fail('Did not see "login" button')
|
416
|
+
# end
|
417
|
+
#
|
418
|
+
# @example
|
419
|
+
# entries = query("ListEntry").length
|
420
|
+
#
|
421
|
+
# if entries < 5
|
422
|
+
# fail(MyError, "Should see at least 5 entries, saw #{entries}")
|
423
|
+
# end
|
424
|
+
#
|
425
|
+
# @raise [RuntimeError, StandardError] By default, raises a RuntimeError with
|
426
|
+
# `message`. You can pass in your own Exception class to override the
|
427
|
+
# the default behavior.
|
428
|
+
def fail(*several_variants)
|
429
|
+
arg0 = several_variants[0]
|
430
|
+
arg1 = several_variants[1]
|
456
431
|
|
457
|
-
|
458
|
-
|
432
|
+
if arg1.nil?
|
433
|
+
exception_type = RuntimeError
|
434
|
+
message = arg0
|
435
|
+
else
|
436
|
+
exception_type = arg0
|
437
|
+
message = arg1
|
438
|
+
end
|
439
|
+
|
440
|
+
screenshot_embed if Wait.default_options[:screenshot_on_error]
|
441
|
+
|
442
|
+
raise exception_type, message
|
459
443
|
end
|
460
444
|
|
461
|
-
#
|
462
|
-
|
445
|
+
# Raises an exception and always embeds a screenshot
|
446
|
+
#
|
447
|
+
# @raise [RuntimeError, StandardError] By default, raises a RuntimeError with
|
448
|
+
# `message`. You can pass in your own Exception class to override the
|
449
|
+
# the default behavior.
|
450
|
+
# @see Wait#fail
|
451
|
+
def screenshot_and_raise(*several_variants)
|
452
|
+
arg0 = several_variants[0]
|
453
|
+
arg1 = several_variants[1]
|
454
|
+
|
455
|
+
if arg1.nil?
|
456
|
+
exception_type = RuntimeError
|
457
|
+
message = arg0
|
458
|
+
else
|
459
|
+
exception_type = arg0
|
460
|
+
message = arg1
|
461
|
+
end
|
462
|
+
|
463
|
+
screenshot_embed
|
464
|
+
|
465
|
+
raise exception_type, message
|
463
466
|
end
|
464
|
-
|
467
|
+
|
465
468
|
# @!visibility private
|
466
|
-
def
|
469
|
+
def parse_query_list(queries)
|
467
470
|
unless queries.is_a?(Array)
|
468
471
|
queries = [queries]
|
469
472
|
end
|
@@ -481,6 +484,18 @@ module Calabash
|
|
481
484
|
end
|
482
485
|
end
|
483
486
|
|
487
|
+
# Query matched an unexpected set of views
|
488
|
+
class UnexpectedMatchError < RuntimeError
|
489
|
+
end
|
490
|
+
|
491
|
+
# View was found
|
492
|
+
class ViewFoundError < UnexpectedMatchError
|
493
|
+
end
|
494
|
+
|
495
|
+
# View was not found
|
496
|
+
class ViewNotFoundError < UnexpectedMatchError
|
497
|
+
end
|
498
|
+
|
484
499
|
# @!visibility private
|
485
500
|
class PrivateWaitTimeoutError < RuntimeError
|
486
501
|
end
|