jarib-celerity 0.0.6.3 → 0.0.6.4
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.
- data/lib/celerity.rb +1 -0
- data/lib/celerity/browser.rb +125 -91
- data/lib/celerity/container.rb +56 -47
- data/lib/celerity/short_inspect.rb +20 -0
- data/lib/celerity/version.rb +1 -1
- metadata +3 -2
data/lib/celerity.rb
CHANGED
@@ -29,6 +29,7 @@ require "celerity/element_collection"
|
|
29
29
|
require "celerity/collections"
|
30
30
|
require "celerity/element_locator"
|
31
31
|
require "celerity/identifier"
|
32
|
+
require "celerity/short_inspect"
|
32
33
|
require "celerity/container"
|
33
34
|
require "celerity/element"
|
34
35
|
require "celerity/input_element"
|
data/lib/celerity/browser.rb
CHANGED
@@ -7,10 +7,10 @@ module Celerity
|
|
7
7
|
|
8
8
|
#
|
9
9
|
# Initialize a browser and go to the given URL
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# @param [String] uri The URL to go to.
|
12
12
|
# @return [Celerity::Browser] instance.
|
13
|
-
#
|
13
|
+
#
|
14
14
|
|
15
15
|
def self.start(uri)
|
16
16
|
browser = new
|
@@ -27,9 +27,7 @@ module Celerity
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def inspect
|
30
|
-
|
31
|
-
vars = vars.map { |var| "#{var}=#{instance_variable_get(var).inspect}" }.join(" ")
|
32
|
-
'#<%s:0x%s %s>' % [self.class.name, self.hash.to_s(16), vars]
|
30
|
+
short_inspect :exclude => %w[@webclient @browser @object]
|
33
31
|
end
|
34
32
|
|
35
33
|
#
|
@@ -71,7 +69,7 @@ module Celerity
|
|
71
69
|
@browser = self # for Container#browser
|
72
70
|
|
73
71
|
setup_webclient(opts)
|
74
|
-
|
72
|
+
|
75
73
|
raise ArgumentError, "unknown option #{opts.inspect}" unless opts.empty?
|
76
74
|
find_viewer
|
77
75
|
end
|
@@ -123,7 +121,7 @@ module Celerity
|
|
123
121
|
|
124
122
|
#
|
125
123
|
# @return [String] the URL of the current page
|
126
|
-
#
|
124
|
+
#
|
127
125
|
|
128
126
|
def url
|
129
127
|
assert_exists
|
@@ -141,15 +139,15 @@ module Celerity
|
|
141
139
|
#
|
142
140
|
# @return [String] the HTML content of the current page
|
143
141
|
#
|
144
|
-
|
142
|
+
|
145
143
|
def html
|
146
144
|
@page ? @page.getWebResponse.getContentAsString : ''
|
147
145
|
end
|
148
|
-
|
146
|
+
|
149
147
|
#
|
150
148
|
# @return [String] the XML representation of the DOM
|
151
149
|
#
|
152
|
-
|
150
|
+
|
153
151
|
def xml
|
154
152
|
return '' unless @page
|
155
153
|
return @page.asXml if @page.respond_to?(:asXml)
|
@@ -159,7 +157,7 @@ module Celerity
|
|
159
157
|
#
|
160
158
|
# @return [String] a text representation of the current page
|
161
159
|
#
|
162
|
-
|
160
|
+
|
163
161
|
def text
|
164
162
|
return '' unless @page
|
165
163
|
|
@@ -179,14 +177,14 @@ module Celerity
|
|
179
177
|
|
180
178
|
def response_headers
|
181
179
|
return {} unless @page
|
182
|
-
|
180
|
+
|
183
181
|
Hash[*@page.getWebResponse.getResponseHeaders.map { |obj| [obj.name, obj.value] }.flatten]
|
184
182
|
end
|
185
|
-
|
183
|
+
|
186
184
|
#
|
187
185
|
# @return [Fixnum] status code of the last request
|
188
186
|
#
|
189
|
-
|
187
|
+
|
190
188
|
def status_code
|
191
189
|
@page.getWebResponse.getStatusCode
|
192
190
|
end
|
@@ -197,17 +195,17 @@ module Celerity
|
|
197
195
|
|
198
196
|
def content_type
|
199
197
|
return '' unless @page
|
200
|
-
|
198
|
+
|
201
199
|
@page.getWebResponse.getContentType
|
202
200
|
end
|
203
|
-
|
201
|
+
|
204
202
|
#
|
205
203
|
# @return [IO, nil] page contents as an IO, returns nil if no page is loaded.
|
206
|
-
#
|
207
|
-
|
204
|
+
#
|
205
|
+
|
208
206
|
def io
|
209
207
|
return nil unless @page
|
210
|
-
|
208
|
+
|
211
209
|
@page.getWebResponse.getContentAsStream.to_io
|
212
210
|
end
|
213
211
|
|
@@ -217,7 +215,7 @@ module Celerity
|
|
217
215
|
# @param [String, Regexp] expected_text The text to look for.
|
218
216
|
# @return [Numeric, nil] The index of the matched text, or nil if it isn't found.
|
219
217
|
# @raise [TypeError]
|
220
|
-
#
|
218
|
+
#
|
221
219
|
|
222
220
|
def contains_text(expected_text)
|
223
221
|
return nil unless exist?
|
@@ -230,7 +228,7 @@ module Celerity
|
|
230
228
|
# @param [String] xpath
|
231
229
|
# @return [Celerity::Element] An element subclass (or Element if none is found)
|
232
230
|
#
|
233
|
-
|
231
|
+
|
234
232
|
def element_by_xpath(xpath)
|
235
233
|
assert_exists
|
236
234
|
obj = @page.getFirstByXPath(xpath)
|
@@ -243,7 +241,7 @@ module Celerity
|
|
243
241
|
# @param [String] xpath
|
244
242
|
# @return [Array<Celerity::Element>] array of elements
|
245
243
|
#
|
246
|
-
|
244
|
+
|
247
245
|
def elements_by_xpath(xpath)
|
248
246
|
assert_exists
|
249
247
|
objects = @page.getByXPath(xpath)
|
@@ -253,8 +251,8 @@ module Celerity
|
|
253
251
|
|
254
252
|
#
|
255
253
|
# @return [HtmlUnit::HtmlHtml] the underlying HtmlUnit document.
|
256
|
-
#
|
257
|
-
|
254
|
+
#
|
255
|
+
|
258
256
|
def document
|
259
257
|
@object
|
260
258
|
end
|
@@ -262,7 +260,7 @@ module Celerity
|
|
262
260
|
#
|
263
261
|
# Goto the last url - HtmlUnit doesn't have a 'back' functionality, so we only have 1 history item :)
|
264
262
|
# @return [String, nil] The url of the resulting page, or nil if none was stored.
|
265
|
-
#
|
263
|
+
#
|
266
264
|
|
267
265
|
def back
|
268
266
|
# TODO: this is naive, need capability from HtmlUnit
|
@@ -271,7 +269,7 @@ module Celerity
|
|
271
269
|
|
272
270
|
#
|
273
271
|
# Wait for javascript jobs to finish
|
274
|
-
#
|
272
|
+
#
|
275
273
|
|
276
274
|
def wait
|
277
275
|
assert_exists
|
@@ -280,7 +278,7 @@ module Celerity
|
|
280
278
|
|
281
279
|
#
|
282
280
|
# Refresh the current page
|
283
|
-
#
|
281
|
+
#
|
284
282
|
|
285
283
|
def refresh
|
286
284
|
assert_exists
|
@@ -289,41 +287,49 @@ module Celerity
|
|
289
287
|
|
290
288
|
#
|
291
289
|
# Clears all cookies. (Celerity only)
|
292
|
-
#
|
290
|
+
#
|
293
291
|
|
294
292
|
def clear_cookies
|
295
293
|
@webclient.getCookieManager.clearCookies
|
296
294
|
end
|
297
295
|
|
296
|
+
#
|
297
|
+
# Clears the cache of "compiled JavaScript files and parsed CSS snippets"
|
298
|
+
#
|
299
|
+
|
300
|
+
def clear_cache
|
301
|
+
@webclient.cache.clear
|
302
|
+
end
|
303
|
+
|
298
304
|
#
|
299
305
|
# Get the cookies for this session. (Celerity only)
|
300
|
-
#
|
301
|
-
# @return [Hash<domain, Hash<name, value>>]
|
306
|
+
#
|
307
|
+
# @return [Hash<domain, Hash<name, value>>]
|
302
308
|
#
|
303
309
|
|
304
310
|
def cookies
|
305
311
|
result = Hash.new { |hash, key| hash[key] = {} }
|
306
|
-
|
312
|
+
|
307
313
|
cookies = @webclient.getCookieManager.getCookies
|
308
314
|
cookies.each do |cookie|
|
309
315
|
result[cookie.getDomain][cookie.getName] = cookie.getValue
|
310
316
|
end
|
311
|
-
|
317
|
+
|
312
318
|
result
|
313
319
|
end
|
314
|
-
|
320
|
+
|
315
321
|
#
|
316
322
|
# Add a cookie with the given parameters (Celerity only)
|
317
|
-
#
|
323
|
+
#
|
318
324
|
# @param [String] domain
|
319
325
|
# @param [String] name
|
320
326
|
# @param [String] value
|
321
327
|
#
|
322
|
-
# @option opts :path [String] ("/") A path
|
328
|
+
# @option opts :path [String] ("/") A path
|
323
329
|
# @option opts :max_age [Fixnum] (??) A max age
|
324
|
-
# @option opts :secure [Boolean] (false)
|
330
|
+
# @option opts :secure [Boolean] (false)
|
325
331
|
#
|
326
|
-
|
332
|
+
|
327
333
|
def add_cookie(domain, name, value, opts = {})
|
328
334
|
path = opts.delete(:path) || "/"
|
329
335
|
max_age = opts.delete(:max_age) || (Time.now + 60*60*24) # not sure if this is correct
|
@@ -334,22 +340,22 @@ module Celerity
|
|
334
340
|
cookie = Cookie.new(domain, name, value, path, max_age, secure)
|
335
341
|
@webclient.getCookieManager.addCookie(cookie)
|
336
342
|
end
|
337
|
-
|
343
|
+
|
338
344
|
#
|
339
345
|
# Remove the cookie with the given domain and name (Celerity only)
|
340
346
|
#
|
341
347
|
# @param [String] domain
|
342
348
|
# @param [String] name
|
343
349
|
#
|
344
|
-
|
350
|
+
|
345
351
|
def remove_cookie(domain, name)
|
346
352
|
cm = @webclient.getCookieManager
|
347
353
|
cookie = cm.getCookies.find { |c| c.getDomain == domain && c.getName == name }
|
348
|
-
|
354
|
+
|
349
355
|
if cookie.nil?
|
350
356
|
raise "no cookie with domain #{domain.inspect} and name #{name.inspect}"
|
351
357
|
end
|
352
|
-
|
358
|
+
|
353
359
|
cm.removeCookie(cookie)
|
354
360
|
end
|
355
361
|
|
@@ -386,7 +392,7 @@ module Celerity
|
|
386
392
|
# @yieldparam [Celerity::Browser] browser The browser instance.
|
387
393
|
# @see Celerity::Browser#resynchronized
|
388
394
|
#
|
389
|
-
|
395
|
+
|
390
396
|
def wait_until(timeout = 30, &block)
|
391
397
|
Timeout.timeout(timeout) do
|
392
398
|
until yield(self)
|
@@ -402,7 +408,7 @@ module Celerity
|
|
402
408
|
# @param [Fixnum] timeout Number of seconds to wait before timing out (default: 30).
|
403
409
|
# @yieldparam [Celerity::Browser] browser The browser instance.
|
404
410
|
# @see Celerity::Browser#resynchronized
|
405
|
-
#
|
411
|
+
#
|
406
412
|
|
407
413
|
def wait_while(timeout = 30, &block)
|
408
414
|
Timeout.timeout(timeout) do
|
@@ -430,15 +436,15 @@ module Celerity
|
|
430
436
|
yield self
|
431
437
|
@webclient.setAjaxController(old_controller)
|
432
438
|
end
|
433
|
-
|
439
|
+
|
434
440
|
#
|
435
441
|
# Allows you to temporarliy switch to HtmlUnit's default AjaxController, so ajax calls are performed asynchronously.
|
436
442
|
# This is useful if you have created the Browser with :resynchronize => true, but want to switch it off temporarily.
|
437
|
-
#
|
443
|
+
#
|
438
444
|
# @yieldparam [Celerity::Browser] browser The current browser object.
|
439
445
|
# @see Celerity::Browser#new
|
440
446
|
#
|
441
|
-
|
447
|
+
|
442
448
|
def asynchronized(&block)
|
443
449
|
old_controller = @webclient.ajaxController
|
444
450
|
@webclient.setAjaxController(::HtmlUnit::AjaxController.new)
|
@@ -452,7 +458,7 @@ module Celerity
|
|
452
458
|
#
|
453
459
|
# @param [Boolean] bool start or stop
|
454
460
|
# @param [String] name required if bool is true
|
455
|
-
#
|
461
|
+
#
|
456
462
|
|
457
463
|
def debug_web_connection(bool, name = nil)
|
458
464
|
if bool
|
@@ -482,37 +488,37 @@ module Celerity
|
|
482
488
|
#
|
483
489
|
# @param [Symbol] type One of the above symbols.
|
484
490
|
# @param [Proc] block A block to be executed for events of this type.
|
485
|
-
#
|
491
|
+
#
|
486
492
|
|
487
493
|
def add_listener(type, &block)
|
488
494
|
listener.add_listener(type, &block)
|
489
495
|
end
|
490
|
-
|
496
|
+
|
491
497
|
#
|
492
498
|
# Specify a boolean value to click either 'OK' or 'Cancel' in any confirm
|
493
|
-
# dialogs that might show up during the duration of the given block.
|
494
|
-
#
|
499
|
+
# dialogs that might show up during the duration of the given block.
|
500
|
+
#
|
495
501
|
# (Celerity only)
|
496
502
|
#
|
497
503
|
# @param [Boolean] bool true to click 'OK', false to click 'cancel'
|
498
504
|
# @param [Proc] block A block that will trigger the confirm() call(s).
|
499
505
|
#
|
500
|
-
|
506
|
+
|
501
507
|
def confirm(bool, &block)
|
502
508
|
blk = lambda { bool }
|
503
|
-
|
509
|
+
|
504
510
|
listener.add_listener(:confirm, &blk)
|
505
511
|
yield
|
506
512
|
listener.remove_listener(:confirm, blk)
|
507
513
|
end
|
508
|
-
|
514
|
+
|
509
515
|
#
|
510
516
|
# Add a 'checker' proc that will be run on every page load
|
511
517
|
#
|
512
518
|
# @param [Proc] checker The proc to be run (can also be given as a block)
|
513
519
|
# @yieldparam [Celerity::Browser] browser The current browser object.
|
514
520
|
# @raise [ArgumentError] if no Proc or block was given.
|
515
|
-
#
|
521
|
+
#
|
516
522
|
|
517
523
|
def add_checker(checker = nil, &block)
|
518
524
|
if block_given?
|
@@ -527,7 +533,7 @@ module Celerity
|
|
527
533
|
#
|
528
534
|
# Remove the given checker from the list of checkers
|
529
535
|
# @param [Proc] checker The Proc to disable.
|
530
|
-
#
|
536
|
+
#
|
531
537
|
|
532
538
|
def disable_checker(checker)
|
533
539
|
@error_checkers.delete(checker)
|
@@ -535,9 +541,9 @@ module Celerity
|
|
535
541
|
|
536
542
|
#
|
537
543
|
# :finest, :finer, :fine, :config, :info, :warning, :severe, or :off, :all
|
538
|
-
#
|
544
|
+
#
|
539
545
|
# @return [Symbol] the current log level
|
540
|
-
#
|
546
|
+
#
|
541
547
|
|
542
548
|
def log_level
|
543
549
|
logger_for('com.gargoylesoftware.htmlunit').level.to_s.downcase.to_sym
|
@@ -547,13 +553,13 @@ module Celerity
|
|
547
553
|
# Set Java log level (default is :warning)
|
548
554
|
#
|
549
555
|
# @param [Symbol] level :finest, :finer, :fine, :config, :info, :warning, :severe, or :off, :all
|
550
|
-
#
|
556
|
+
#
|
551
557
|
|
552
558
|
def log_level=(level)
|
553
559
|
log_level = java.util.logging.Level.const_get(level.to_s.upcase)
|
554
560
|
|
555
561
|
# loggers = [
|
556
|
-
# logger_for('com.gargoylesoftware.htmlunit'),
|
562
|
+
# logger_for('com.gargoylesoftware.htmlunit'),
|
557
563
|
# logger_for("com.gargoylesoftware.htmlunit.html.HtmlElement")
|
558
564
|
# ]
|
559
565
|
# loggers.each { |logger| logger.level = log_level }
|
@@ -570,35 +576,63 @@ module Celerity
|
|
570
576
|
!!@page
|
571
577
|
end
|
572
578
|
alias_method :exists?, :exist?
|
573
|
-
|
579
|
+
|
574
580
|
#
|
575
581
|
# Turn on/off javascript exceptions
|
576
|
-
#
|
582
|
+
#
|
577
583
|
# @param [Bool]
|
578
|
-
#
|
584
|
+
#
|
579
585
|
|
580
586
|
def javascript_exceptions=(bool)
|
581
587
|
@webclient.throwExceptionOnScriptError = bool
|
582
588
|
end
|
583
|
-
|
589
|
+
|
584
590
|
def javascript_exceptions
|
585
591
|
@webclient.throwExceptionOnScriptError
|
586
592
|
end
|
587
|
-
|
593
|
+
|
588
594
|
#
|
589
595
|
# Turn on/off status code exceptions
|
590
|
-
#
|
596
|
+
#
|
591
597
|
# @param [Bool]
|
592
|
-
#
|
593
|
-
|
598
|
+
#
|
599
|
+
|
594
600
|
def status_code_exceptions=(bool)
|
595
601
|
@webclient.throwExceptionOnFailingStatusCode = bool
|
596
602
|
end
|
597
|
-
|
603
|
+
|
598
604
|
def status_code_exceptions
|
599
605
|
@webclient.throwExceptionOnFailingStatusCode
|
600
606
|
end
|
601
|
-
|
607
|
+
|
608
|
+
#
|
609
|
+
# Turn on/off CSS loading
|
610
|
+
#
|
611
|
+
# @param [Bool]
|
612
|
+
#
|
613
|
+
|
614
|
+
def css=(bool)
|
615
|
+
@webclient.cssEnabled = bool
|
616
|
+
end
|
617
|
+
|
618
|
+
def css
|
619
|
+
@webclient.cssEnabled
|
620
|
+
end
|
621
|
+
|
622
|
+
#
|
623
|
+
# Turn on/off secure SSL
|
624
|
+
#
|
625
|
+
# @param [Bool]
|
626
|
+
#
|
627
|
+
|
628
|
+
def secure_ssl=(bool)
|
629
|
+
@webclient.useInsecureSSL = !bool
|
630
|
+
end
|
631
|
+
|
632
|
+
def secure_ssl
|
633
|
+
!@webclient.useInsecureSSL
|
634
|
+
end
|
635
|
+
|
602
636
|
#
|
603
637
|
# Sets the current page object for the browser
|
604
638
|
#
|
@@ -627,19 +661,19 @@ module Celerity
|
|
627
661
|
#
|
628
662
|
# @raise [Celerity::Exception::UnknownObjectException] if no page is loaded.
|
629
663
|
# @api private
|
630
|
-
#
|
631
|
-
|
664
|
+
#
|
665
|
+
|
632
666
|
def assert_exists
|
633
667
|
raise UnknownObjectException, "no page loaded" unless exist?
|
634
668
|
end
|
635
|
-
|
669
|
+
|
636
670
|
#
|
637
671
|
# Returns the element that currently has the focus (Celerity only)
|
638
672
|
#
|
639
673
|
|
640
674
|
def focused_element
|
641
675
|
element_from_dom_node(page.getFocusedElement())
|
642
|
-
end
|
676
|
+
end
|
643
677
|
|
644
678
|
private
|
645
679
|
|
@@ -648,12 +682,12 @@ module Celerity
|
|
648
682
|
#
|
649
683
|
# @see add_checker
|
650
684
|
# @api private
|
651
|
-
#
|
652
|
-
|
685
|
+
#
|
686
|
+
|
653
687
|
def run_error_checks
|
654
688
|
@error_checkers.each { |e| e[self] }
|
655
689
|
end
|
656
|
-
|
690
|
+
|
657
691
|
#
|
658
692
|
# Configure the webclient according to the options given to #new.
|
659
693
|
# @see initialize
|
@@ -675,22 +709,22 @@ module Celerity
|
|
675
709
|
phost, pport = proxy.split(":")
|
676
710
|
@webclient = ::HtmlUnit::WebClient.new(browser_version, phost, pport.to_i)
|
677
711
|
else
|
678
|
-
@webclient = ::HtmlUnit::WebClient.new(browser_version)
|
712
|
+
@webclient = ::HtmlUnit::WebClient.new(browser_version)
|
679
713
|
end
|
680
|
-
|
714
|
+
|
681
715
|
self.javascript_exceptions = false unless opts.delete(:javascript_exceptions)
|
682
716
|
self.status_code_exceptions = false unless opts.delete(:status_code_exceptions)
|
683
|
-
|
684
|
-
|
717
|
+
self.css = false unless opts.delete(:css)
|
718
|
+
self.secure_ssl = opts.delete(:secure_ssl) == false
|
685
719
|
@webclient.setAjaxController(::HtmlUnit::NicelyResynchronizingAjaxController.new) if opts.delete(:resynchronize)
|
686
720
|
end
|
687
|
-
|
721
|
+
|
688
722
|
#
|
689
723
|
# This *should* be unneccessary, but sometimes the page we get from the
|
690
724
|
# window is different (ie. a different object) from our current @page
|
691
725
|
# (Used by #wait_while and #wait_until)
|
692
|
-
#
|
693
|
-
|
726
|
+
#
|
727
|
+
|
694
728
|
def refresh_page_from_window
|
695
729
|
new_page = @page.getEnclosingWindow.getEnclosedPage
|
696
730
|
|
@@ -700,11 +734,11 @@ module Celerity
|
|
700
734
|
Log.debug "unneccessary refresh"
|
701
735
|
end
|
702
736
|
end
|
703
|
-
|
737
|
+
|
704
738
|
#
|
705
739
|
# Render the current page on the viewer.
|
706
740
|
# @api private
|
707
|
-
#
|
741
|
+
#
|
708
742
|
|
709
743
|
def render
|
710
744
|
@viewer.render_html(self.send(@render_type), url)
|
@@ -715,7 +749,7 @@ module Celerity
|
|
715
749
|
#
|
716
750
|
# Check if we have a viewer available on druby://127.0.0.1:6429
|
717
751
|
# @api private
|
718
|
-
#
|
752
|
+
#
|
719
753
|
|
720
754
|
def find_viewer
|
721
755
|
viewer = DRbObject.new_with_uri("druby://127.0.0.1:6429")
|
@@ -728,10 +762,10 @@ module Celerity
|
|
728
762
|
@viewer = DefaultViewer
|
729
763
|
end
|
730
764
|
|
731
|
-
#
|
765
|
+
#
|
732
766
|
# Convert the given HtmlUnit object to a Celerity object
|
733
|
-
#
|
734
|
-
|
767
|
+
#
|
768
|
+
|
735
769
|
def element_from_dom_node(obj)
|
736
770
|
if element_class = Celerity::Util.htmlunit2celerity(obj.class)
|
737
771
|
element_class.new(self, :object, obj)
|
@@ -743,7 +777,7 @@ module Celerity
|
|
743
777
|
def logger_for(class_string)
|
744
778
|
java.util.logging.Logger.getLogger(class_string)
|
745
779
|
end
|
746
|
-
|
780
|
+
|
747
781
|
def listener
|
748
782
|
@listener ||= Celerity::Listener.new(@webclient)
|
749
783
|
end
|
data/lib/celerity/container.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Celerity
|
2
|
-
|
2
|
+
|
3
3
|
#
|
4
4
|
# This class contains methods for accessing elements inside a container,
|
5
5
|
# usually the Browser object, meaning the current page.
|
@@ -30,6 +30,7 @@ module Celerity
|
|
30
30
|
|
31
31
|
module Container
|
32
32
|
include Celerity::Exception
|
33
|
+
include Celerity::ShortInspect
|
33
34
|
|
34
35
|
# Points back to the Browser instance that contains this element
|
35
36
|
attr_reader :browser
|
@@ -39,8 +40,8 @@ module Celerity
|
|
39
40
|
#
|
40
41
|
# @param [String, Regexp] expected_text The text to look for.
|
41
42
|
# @return [Fixnum, nil] The index of the matched text, or nil if it doesn't match.
|
42
|
-
#
|
43
|
-
|
43
|
+
#
|
44
|
+
|
44
45
|
def contains_text(expected_text)
|
45
46
|
assert_exists
|
46
47
|
return nil unless respond_to? :text
|
@@ -54,12 +55,20 @@ module Celerity
|
|
54
55
|
raise TypeError, "expected String or Regexp, got #{expected_text.inspect}:#{expected_text.class}"
|
55
56
|
end
|
56
57
|
end
|
57
|
-
|
58
|
+
|
59
|
+
#
|
60
|
+
# Override inspect for readability
|
61
|
+
#
|
62
|
+
|
63
|
+
def inspect
|
64
|
+
short_inspect :exclude => %w[@browser @container]
|
65
|
+
end
|
66
|
+
|
58
67
|
#
|
59
68
|
# Used internally to update the container object.
|
60
69
|
# @api private
|
61
70
|
#
|
62
|
-
|
71
|
+
|
63
72
|
def container=(container)
|
64
73
|
@container = container
|
65
74
|
@browser = container.browser
|
@@ -70,11 +79,11 @@ module Celerity
|
|
70
79
|
# Used internally to update the page object.
|
71
80
|
# @api private
|
72
81
|
#
|
73
|
-
|
82
|
+
|
74
83
|
def update_page(page)
|
75
84
|
@browser.page = page
|
76
85
|
end
|
77
|
-
|
86
|
+
|
78
87
|
#--
|
79
88
|
# below methods sorted alphabetically
|
80
89
|
#++
|
@@ -82,23 +91,23 @@ module Celerity
|
|
82
91
|
#
|
83
92
|
# @return [Celerity::Area]
|
84
93
|
#
|
85
|
-
|
94
|
+
|
86
95
|
def area(*args)
|
87
96
|
Area.new(self, *args)
|
88
97
|
end
|
89
|
-
|
98
|
+
|
90
99
|
#
|
91
100
|
# @return [Celerity::Areas]
|
92
101
|
#
|
93
|
-
|
102
|
+
|
94
103
|
def areas
|
95
104
|
Areas.new(self)
|
96
105
|
end
|
97
|
-
|
106
|
+
|
98
107
|
#
|
99
108
|
# @return [Celerity::Button]
|
100
109
|
#
|
101
|
-
|
110
|
+
|
102
111
|
def button(*args)
|
103
112
|
Button.new(self, *args)
|
104
113
|
end
|
@@ -106,23 +115,23 @@ module Celerity
|
|
106
115
|
#
|
107
116
|
# @return [Celerity::Buttons]
|
108
117
|
#
|
109
|
-
|
118
|
+
|
110
119
|
def buttons
|
111
120
|
Buttons.new(self)
|
112
121
|
end
|
113
|
-
|
122
|
+
|
114
123
|
#
|
115
124
|
# @return [Celerity::TableCell]
|
116
125
|
#
|
117
|
-
|
126
|
+
|
118
127
|
def cell(*args)
|
119
128
|
TableCell.new(self, *args)
|
120
129
|
end
|
121
|
-
|
130
|
+
|
122
131
|
#
|
123
132
|
# @return [Celerity::TableCells]
|
124
133
|
#
|
125
|
-
|
134
|
+
|
126
135
|
def cells
|
127
136
|
TableCells.new(self)
|
128
137
|
end
|
@@ -158,7 +167,7 @@ module Celerity
|
|
158
167
|
def dd(*args)
|
159
168
|
Dd.new(self, *args)
|
160
169
|
end
|
161
|
-
|
170
|
+
|
162
171
|
#
|
163
172
|
# @return [Celerity::Dds]
|
164
173
|
#
|
@@ -166,7 +175,7 @@ module Celerity
|
|
166
175
|
def dds
|
167
176
|
Dds.new(self)
|
168
177
|
end
|
169
|
-
|
178
|
+
|
170
179
|
#
|
171
180
|
# @return [Celerity::Div]
|
172
181
|
#
|
@@ -174,7 +183,7 @@ module Celerity
|
|
174
183
|
def div(*args)
|
175
184
|
Div.new(self, *args)
|
176
185
|
end
|
177
|
-
|
186
|
+
|
178
187
|
#
|
179
188
|
# @return [Celerity::Divs]
|
180
189
|
#
|
@@ -182,7 +191,7 @@ module Celerity
|
|
182
191
|
def divs
|
183
192
|
Divs.new(self)
|
184
193
|
end
|
185
|
-
|
194
|
+
|
186
195
|
#
|
187
196
|
# @return [Celerity::Dl]
|
188
197
|
#
|
@@ -198,7 +207,7 @@ module Celerity
|
|
198
207
|
def dls
|
199
208
|
Dls.new(self)
|
200
209
|
end
|
201
|
-
|
210
|
+
|
202
211
|
#
|
203
212
|
# @return [Celerity::Dt]
|
204
213
|
#
|
@@ -214,19 +223,19 @@ module Celerity
|
|
214
223
|
def dts
|
215
224
|
Dts.new(self)
|
216
225
|
end
|
217
|
-
|
226
|
+
|
218
227
|
#
|
219
228
|
# @return [Celerity::Em]
|
220
|
-
#
|
221
|
-
|
229
|
+
#
|
230
|
+
|
222
231
|
def em(*args)
|
223
232
|
Em.new(self, *args)
|
224
233
|
end
|
225
|
-
|
234
|
+
|
226
235
|
#
|
227
236
|
# @return [Celerity::Ems]
|
228
|
-
#
|
229
|
-
|
237
|
+
#
|
238
|
+
|
230
239
|
def ems
|
231
240
|
Ems.new(self)
|
232
241
|
end
|
@@ -270,7 +279,7 @@ module Celerity
|
|
270
279
|
def frame(*args)
|
271
280
|
Frame.new(self, *args)
|
272
281
|
end
|
273
|
-
|
282
|
+
|
274
283
|
#
|
275
284
|
# @return [Celerity::Frames]
|
276
285
|
#
|
@@ -286,7 +295,7 @@ module Celerity
|
|
286
295
|
def h1(*args)
|
287
296
|
H1.new(self, *args)
|
288
297
|
end
|
289
|
-
|
298
|
+
|
290
299
|
#
|
291
300
|
# @return [Celerity::H1s]
|
292
301
|
#
|
@@ -326,7 +335,7 @@ module Celerity
|
|
326
335
|
def h3s
|
327
336
|
H3s.new(self)
|
328
337
|
end
|
329
|
-
|
338
|
+
|
330
339
|
#
|
331
340
|
# @return [Celerity::H4]
|
332
341
|
#
|
@@ -342,7 +351,7 @@ module Celerity
|
|
342
351
|
def h4s
|
343
352
|
H4s.new(self)
|
344
353
|
end
|
345
|
-
|
354
|
+
|
346
355
|
#
|
347
356
|
# @return [Celerity::H5]
|
348
357
|
#
|
@@ -358,7 +367,7 @@ module Celerity
|
|
358
367
|
def h5s
|
359
368
|
H5s.new(self)
|
360
369
|
end
|
361
|
-
|
370
|
+
|
362
371
|
#
|
363
372
|
# @return [Celerity::H6]
|
364
373
|
#
|
@@ -554,7 +563,7 @@ module Celerity
|
|
554
563
|
#
|
555
564
|
# @return [Celerity::Radio]
|
556
565
|
#
|
557
|
-
|
566
|
+
|
558
567
|
def radio(*args)
|
559
568
|
Radio.new(self, *args)
|
560
569
|
end
|
@@ -598,7 +607,7 @@ module Celerity
|
|
598
607
|
def select_lists
|
599
608
|
SelectLists.new(self)
|
600
609
|
end
|
601
|
-
|
610
|
+
|
602
611
|
#
|
603
612
|
# @return [Celerity::Span]
|
604
613
|
#
|
@@ -662,7 +671,7 @@ module Celerity
|
|
662
671
|
def tbodies
|
663
672
|
TableBodies.new(self)
|
664
673
|
end
|
665
|
-
|
674
|
+
|
666
675
|
#
|
667
676
|
# @return [Celerity::TextField]
|
668
677
|
#
|
@@ -678,7 +687,7 @@ module Celerity
|
|
678
687
|
def text_fields
|
679
688
|
TextFields.new(self)
|
680
689
|
end
|
681
|
-
|
690
|
+
|
682
691
|
#
|
683
692
|
# @return [Celerity::TableFooter]
|
684
693
|
#
|
@@ -695,14 +704,14 @@ module Celerity
|
|
695
704
|
TableFooters.new(self)
|
696
705
|
end
|
697
706
|
alias_method :tfeet, :tfoots # :-)
|
698
|
-
|
707
|
+
|
699
708
|
#
|
700
709
|
# Watir's cells() won't find <th> elements.
|
701
710
|
# This is a workaround.
|
702
711
|
#
|
703
712
|
# @return [Celerity::Th]
|
704
713
|
#
|
705
|
-
|
714
|
+
|
706
715
|
def th(*args)
|
707
716
|
Th.new(self, *args)
|
708
717
|
end
|
@@ -715,7 +724,7 @@ module Celerity
|
|
715
724
|
def ths
|
716
725
|
raise NotImplementedError
|
717
726
|
end
|
718
|
-
|
727
|
+
|
719
728
|
#
|
720
729
|
# @return [Celerity::TableHeader]
|
721
730
|
#
|
@@ -747,9 +756,9 @@ module Celerity
|
|
747
756
|
def uls
|
748
757
|
Uls.new(self)
|
749
758
|
end
|
750
|
-
|
759
|
+
|
751
760
|
private
|
752
|
-
|
761
|
+
|
753
762
|
#
|
754
763
|
# Used internally.
|
755
764
|
#
|
@@ -759,16 +768,16 @@ module Celerity
|
|
759
768
|
#
|
760
769
|
# @api private
|
761
770
|
#
|
762
|
-
|
771
|
+
|
763
772
|
def matches?(string, what)
|
764
773
|
Regexp === what ? string =~ what : string == what.to_s
|
765
774
|
end
|
766
|
-
|
775
|
+
|
767
776
|
#
|
768
|
-
# Rescues HtmlUnit::FailingHttpStatusCodeException and re-raises as
|
777
|
+
# Rescues HtmlUnit::FailingHttpStatusCodeException and re-raises as
|
769
778
|
# Celerity::NavigationException to avoid the huge JRuby backtrace
|
770
|
-
#
|
771
|
-
|
779
|
+
#
|
780
|
+
|
772
781
|
def rescue_status_code_exception(&blk)
|
773
782
|
yield
|
774
783
|
rescue HtmlUnit::FailingHttpStatusCodeException => e
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Celerity
|
2
|
+
module ShortInspect
|
3
|
+
|
4
|
+
def short_inspect(opts)
|
5
|
+
if excluded_ivars = opts[:exclude]
|
6
|
+
ivars = (instance_variables - excluded_ivars)
|
7
|
+
elsif included_ivars = opts[:include]
|
8
|
+
ivars = included_ivars
|
9
|
+
else
|
10
|
+
raise ArgumentError, "unknown arg: #{opts.inspect}"
|
11
|
+
end
|
12
|
+
|
13
|
+
ivars.map! { |ivar| "#{ivar}=#{instance_variable_get(ivar).inspect}" }
|
14
|
+
'#<%s:0x%s %s>' % [self.class.name, self.hash.to_s(16), ivars.join(" ")]
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
data/lib/celerity/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jarib-celerity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.6.
|
4
|
+
version: 0.0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jari Bakken
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2009-04-
|
14
|
+
date: 2009-04-15 00:00:00 -07:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- lib/celerity/listener.rb
|
92
92
|
- lib/celerity/resources
|
93
93
|
- lib/celerity/resources/no_viewer.png
|
94
|
+
- lib/celerity/short_inspect.rb
|
94
95
|
- lib/celerity/util.rb
|
95
96
|
- lib/celerity/version.rb
|
96
97
|
- lib/celerity/watir_compatibility.rb
|