jarib-celerity 0.0.5.5 → 0.0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/celerity/browser.rb +220 -83
- data/lib/celerity/collections.rb +39 -39
- data/lib/celerity/container.rb +272 -20
- data/lib/celerity/disabled_element.rb +16 -3
- data/lib/celerity/element.rb +48 -3
- data/lib/celerity/element_locator.rb +3 -0
- data/lib/celerity/elements/button.rb +16 -6
- data/lib/celerity/elements/file_field.rb +10 -2
- data/lib/celerity/elements/form.rb +7 -2
- data/lib/celerity/elements/frame.rb +25 -4
- data/lib/celerity/elements/image.rb +22 -3
- data/lib/celerity/elements/non_control_elements.rb +6 -1
- data/lib/celerity/elements/option.rb +9 -1
- data/lib/celerity/elements/radio_check.rb +44 -14
- data/lib/celerity/elements/select_list.rb +29 -5
- data/lib/celerity/elements/table.rb +30 -7
- data/lib/celerity/elements/table_cell.rb +2 -2
- data/lib/celerity/elements/table_row.rb +14 -3
- data/lib/celerity/elements/text_field.rb +46 -9
- data/lib/celerity/exception.rb +43 -6
- data/lib/celerity/extra/method_generator.rb +13 -1
- data/lib/celerity/htmlunit.rb +6 -1
- data/lib/celerity/listener.rb +37 -8
- data/lib/celerity/util.rb +3 -0
- data/lib/celerity/version.rb +1 -1
- data/lib/celerity/watir_compatibility.rb +12 -11
- data/lib/celerity.rb +1 -1
- metadata +4 -3
- data/lib/celerity/element_collections.rb +0 -82
data/lib/celerity/container.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Celerity
|
2
|
-
|
2
|
+
|
3
|
+
#
|
3
4
|
# This class contains methods for accessing elements inside a container,
|
4
5
|
# usually the Browser object, meaning the current page.
|
5
6
|
# The most common syntax is
|
@@ -22,21 +23,24 @@ module Celerity
|
|
22
23
|
#
|
23
24
|
# browser.check_box(:name, 'a_name', '1234').set
|
24
25
|
#
|
25
|
-
# You can also get all the elements of a certain type by using the plural form (@see Celerity::
|
26
|
+
# You can also get all the elements of a certain type by using the plural form (@see Celerity::ElementCollection):
|
26
27
|
#
|
27
28
|
# browser.links # => #<Celerity::Links:0x7a1c2da2 ...>
|
28
29
|
#
|
30
|
+
|
29
31
|
module Container
|
30
32
|
include Celerity::Exception
|
31
33
|
|
32
34
|
# Points back to the Browser instance that contains this element
|
33
35
|
attr_reader :browser
|
34
36
|
|
35
|
-
|
37
|
+
#
|
36
38
|
# Check if the element contains the given text.
|
37
39
|
#
|
38
40
|
# @param [String, Regexp] expected_text The text to look for.
|
39
41
|
# @return [Fixnum, nil] The index of the matched text, or nil if it doesn't match.
|
42
|
+
#
|
43
|
+
|
40
44
|
def contains_text(expected_text)
|
41
45
|
assert_exists
|
42
46
|
return nil unless respond_to? :text
|
@@ -50,66 +54,94 @@ module Celerity
|
|
50
54
|
raise TypeError, "expected String or Regexp, got #{expected_text.inspect}:#{expected_text.class}"
|
51
55
|
end
|
52
56
|
end
|
53
|
-
|
57
|
+
|
58
|
+
#
|
54
59
|
# Used internally to update the container object.
|
55
60
|
# @api private
|
61
|
+
#
|
62
|
+
|
56
63
|
def container=(container)
|
57
64
|
@container = container
|
58
65
|
@browser = container.browser
|
59
66
|
container
|
60
67
|
end
|
61
68
|
|
69
|
+
#
|
62
70
|
# Used internally to update the page object.
|
63
71
|
# @api private
|
72
|
+
#
|
73
|
+
|
64
74
|
def update_page(page)
|
65
75
|
@browser.page = page
|
66
76
|
end
|
67
77
|
|
78
|
+
#
|
68
79
|
# Used internally.
|
69
80
|
#
|
70
81
|
# @param [String] string The string to match against.
|
71
82
|
# @param [Regexp, String, #to_s] what The match we're looking for.
|
72
|
-
# @return [
|
83
|
+
# @return [Fixnum, true, false, nil]
|
73
84
|
#
|
74
85
|
# @api private
|
86
|
+
#
|
87
|
+
|
75
88
|
def matches?(string, what)
|
76
89
|
Regexp === what ? string =~ what : string == what.to_s
|
77
90
|
end
|
78
91
|
|
79
|
-
|
92
|
+
#--
|
80
93
|
# below methods sorted alphabetically
|
81
|
-
|
94
|
+
#++
|
82
95
|
|
96
|
+
#
|
83
97
|
# @return [Celerity::Area]
|
98
|
+
#
|
99
|
+
|
84
100
|
def area(*args)
|
85
101
|
Area.new(self, *args)
|
86
102
|
end
|
87
|
-
|
103
|
+
|
104
|
+
#
|
88
105
|
# @return [Celerity::Areas]
|
106
|
+
#
|
107
|
+
|
89
108
|
def areas
|
90
109
|
Areas.new(self)
|
91
110
|
end
|
92
111
|
|
112
|
+
#
|
93
113
|
# @return [Celerity::Button]
|
114
|
+
#
|
115
|
+
|
94
116
|
def button(*args)
|
95
117
|
Button.new(self, *args)
|
96
118
|
end
|
97
119
|
|
120
|
+
#
|
98
121
|
# @return [Celerity::Buttons]
|
122
|
+
#
|
123
|
+
|
99
124
|
def buttons
|
100
125
|
Buttons.new(self)
|
101
126
|
end
|
102
|
-
|
127
|
+
|
128
|
+
#
|
103
129
|
# @return [Celerity::TableCell]
|
130
|
+
#
|
131
|
+
|
104
132
|
def cell(*args)
|
105
133
|
TableCell.new(self, *args)
|
106
134
|
end
|
107
|
-
|
135
|
+
|
136
|
+
#
|
108
137
|
# @return [Celerity::TableCells]
|
138
|
+
#
|
139
|
+
|
109
140
|
def cells
|
110
141
|
TableCells.new(self)
|
111
142
|
end
|
112
143
|
|
144
|
+
#
|
113
145
|
# Since finding checkboxes by value is very common, you can use this shorthand:
|
114
146
|
#
|
115
147
|
# browser.check_box(:name, 'a_name', '1234').set
|
@@ -119,248 +151,397 @@ module Celerity
|
|
119
151
|
# browser.check_box(:name => 'a_name', :value => '1234').set
|
120
152
|
#
|
121
153
|
# @return [Celerity::CheckBox]
|
154
|
+
#
|
155
|
+
|
122
156
|
def check_box(*args)
|
123
157
|
CheckBox.new(self, *args)
|
124
158
|
end
|
125
159
|
|
160
|
+
#
|
126
161
|
# @return [Celerity::CheckBoxes]
|
162
|
+
#
|
163
|
+
|
127
164
|
def checkboxes
|
128
165
|
CheckBoxes.new(self)
|
129
166
|
end
|
130
167
|
|
168
|
+
#
|
131
169
|
# @return [Celerity::Dd]
|
170
|
+
#
|
171
|
+
|
132
172
|
def dd(*args)
|
133
173
|
Dd.new(self, *args)
|
134
174
|
end
|
135
|
-
|
175
|
+
|
176
|
+
#
|
136
177
|
# @return [Celerity::Dds]
|
178
|
+
#
|
179
|
+
|
137
180
|
def dds
|
138
181
|
Dds.new(self)
|
139
182
|
end
|
140
|
-
|
183
|
+
|
184
|
+
#
|
141
185
|
# @return [Celerity::Div]
|
186
|
+
#
|
187
|
+
|
142
188
|
def div(*args)
|
143
189
|
Div.new(self, *args)
|
144
190
|
end
|
145
|
-
|
191
|
+
|
192
|
+
#
|
146
193
|
# @return [Celerity::Divs]
|
194
|
+
#
|
195
|
+
|
147
196
|
def divs
|
148
197
|
Divs.new(self)
|
149
198
|
end
|
150
|
-
|
199
|
+
|
200
|
+
#
|
151
201
|
# @return [Celerity::Dl]
|
202
|
+
#
|
203
|
+
|
152
204
|
def dl(*args)
|
153
205
|
Dl.new(self, *args)
|
154
206
|
end
|
155
207
|
|
208
|
+
#
|
156
209
|
# @return [Celerity::Dls]
|
210
|
+
#
|
211
|
+
|
157
212
|
def dls
|
158
213
|
Dls.new(self)
|
159
214
|
end
|
160
|
-
|
215
|
+
|
216
|
+
#
|
161
217
|
# @return [Celerity::Dt]
|
218
|
+
#
|
219
|
+
|
162
220
|
def dt(*args)
|
163
221
|
Dt.new(self, *args)
|
164
222
|
end
|
165
223
|
|
224
|
+
#
|
166
225
|
# @return [Celerity::Dts]
|
226
|
+
#
|
227
|
+
|
167
228
|
def dts
|
168
229
|
Dts.new(self)
|
169
230
|
end
|
170
231
|
|
232
|
+
#
|
171
233
|
# @return [Celerity::FileField]
|
234
|
+
#
|
235
|
+
|
172
236
|
def file_field(*args)
|
173
237
|
FileField.new(self, *args)
|
174
238
|
end
|
175
239
|
|
240
|
+
#
|
176
241
|
# @return [Celerity::FileFields]
|
242
|
+
#
|
243
|
+
|
177
244
|
def file_fields
|
178
245
|
FileFields.new(self)
|
179
246
|
end
|
180
247
|
|
248
|
+
#
|
181
249
|
# @return [Celerity::Form]
|
250
|
+
#
|
251
|
+
|
182
252
|
def form(*args)
|
183
253
|
Form.new(self, *args)
|
184
254
|
end
|
185
255
|
|
256
|
+
#
|
186
257
|
# @return [Celerity::Forms]
|
258
|
+
#
|
259
|
+
|
187
260
|
def forms
|
188
261
|
Forms.new(self)
|
189
262
|
end
|
190
263
|
|
264
|
+
#
|
191
265
|
# @return [Celerity::Frame]
|
266
|
+
#
|
267
|
+
|
192
268
|
def frame(*args)
|
193
269
|
Frame.new(self, *args)
|
194
270
|
end
|
195
|
-
|
271
|
+
|
272
|
+
#
|
196
273
|
# @return [Celerity::Frames]
|
274
|
+
#
|
275
|
+
|
197
276
|
def frames
|
198
277
|
Frames.new(self)
|
199
278
|
end
|
200
279
|
|
280
|
+
#
|
201
281
|
# @return [Celerity::H1]
|
282
|
+
#
|
283
|
+
|
202
284
|
def h1(*args)
|
203
285
|
H1.new(self, *args)
|
204
286
|
end
|
205
|
-
|
287
|
+
|
288
|
+
#
|
206
289
|
# @return [Celerity::H1s]
|
290
|
+
#
|
291
|
+
|
207
292
|
def h1s
|
208
293
|
H1s.new(self)
|
209
294
|
end
|
210
295
|
|
296
|
+
#
|
211
297
|
# @return [Celerity::H2]
|
298
|
+
#
|
299
|
+
|
212
300
|
def h2(*args)
|
213
301
|
H2.new(self, *args)
|
214
302
|
end
|
215
303
|
|
304
|
+
#
|
216
305
|
# @return [Celerity::H2s]
|
306
|
+
#
|
307
|
+
|
217
308
|
def h2s
|
218
309
|
H2s.new(self)
|
219
310
|
end
|
220
311
|
|
312
|
+
#
|
221
313
|
# @return [Celerity::H3]
|
314
|
+
#
|
315
|
+
|
222
316
|
def h3(*args)
|
223
317
|
H3.new(self, *args)
|
224
318
|
end
|
225
319
|
|
320
|
+
#
|
226
321
|
# @return [Celerity::H3s]
|
322
|
+
#
|
323
|
+
|
227
324
|
def h3s
|
228
325
|
H3s.new(self)
|
229
326
|
end
|
230
327
|
|
328
|
+
#
|
231
329
|
# @return [Celerity::H4]
|
330
|
+
#
|
331
|
+
|
232
332
|
def h4(*args)
|
233
333
|
H4.new(self, *args)
|
234
334
|
end
|
235
335
|
|
336
|
+
#
|
236
337
|
# @return [Celerity::H4s]
|
338
|
+
#
|
339
|
+
|
237
340
|
def h4s
|
238
341
|
H4s.new(self)
|
239
342
|
end
|
240
343
|
|
344
|
+
#
|
241
345
|
# @return [Celerity::H5]
|
346
|
+
#
|
347
|
+
|
242
348
|
def h5(*args)
|
243
349
|
H5.new(self, *args)
|
244
350
|
end
|
245
351
|
|
352
|
+
#
|
246
353
|
# @return [Celerity::H5s]
|
354
|
+
#
|
355
|
+
|
247
356
|
def h5s
|
248
357
|
H5s.new(self)
|
249
358
|
end
|
250
359
|
|
360
|
+
#
|
251
361
|
# @return [Celerity::H6]
|
362
|
+
#
|
363
|
+
|
252
364
|
def h6(*args)
|
253
365
|
H6.new(self, *args)
|
254
366
|
end
|
255
367
|
|
368
|
+
#
|
256
369
|
# @return [Celerity::H6s]
|
370
|
+
#
|
371
|
+
|
257
372
|
def h6s
|
258
373
|
H6s.new(self)
|
259
374
|
end
|
260
375
|
|
376
|
+
#
|
261
377
|
# @return [Celerity::Hidden]
|
378
|
+
#
|
379
|
+
|
262
380
|
def hidden(*args)
|
263
381
|
Hidden.new(self, *args)
|
264
382
|
end
|
265
383
|
|
384
|
+
#
|
266
385
|
# @return [Celerity::Hiddens]
|
386
|
+
#
|
387
|
+
|
267
388
|
def hiddens
|
268
389
|
Hiddens.new(self)
|
269
390
|
end
|
270
391
|
|
392
|
+
#
|
271
393
|
# @return [Celerity::Image]
|
394
|
+
#
|
395
|
+
|
272
396
|
def image(*args)
|
273
397
|
Image.new(self, *args)
|
274
398
|
end
|
275
399
|
|
400
|
+
#
|
276
401
|
# @return [Celerity::Images]
|
402
|
+
#
|
403
|
+
|
277
404
|
def images
|
278
405
|
Images.new(self)
|
279
406
|
end
|
280
407
|
|
408
|
+
#
|
281
409
|
# @return [Celerity::Label]
|
410
|
+
#
|
411
|
+
|
282
412
|
def label(*args)
|
283
413
|
Label.new(self, *args)
|
284
414
|
end
|
285
415
|
|
416
|
+
#
|
286
417
|
# @return [Celerity::Labels]
|
418
|
+
#
|
419
|
+
|
287
420
|
def labels
|
288
421
|
Labels.new(self)
|
289
422
|
end
|
290
423
|
|
424
|
+
#
|
291
425
|
# @return [Celerity::Li]
|
426
|
+
#
|
427
|
+
|
292
428
|
def li(*args)
|
293
429
|
Li.new(self, *args)
|
294
430
|
end
|
295
431
|
|
432
|
+
#
|
296
433
|
# @return [Celerity::Lis]
|
434
|
+
#
|
435
|
+
|
297
436
|
def lis
|
298
437
|
Lis.new(self)
|
299
438
|
end
|
300
439
|
|
440
|
+
#
|
301
441
|
# @return [Celerity::Link]
|
442
|
+
#
|
443
|
+
|
302
444
|
def link(*args)
|
303
445
|
Link.new(self, *args)
|
304
446
|
end
|
305
447
|
|
448
|
+
#
|
306
449
|
# @return [Celerity::Links]
|
450
|
+
#
|
451
|
+
|
307
452
|
def links
|
308
453
|
Links.new(self)
|
309
454
|
end
|
310
455
|
|
456
|
+
#
|
311
457
|
# @return [Celerity::Map]
|
458
|
+
#
|
459
|
+
|
312
460
|
def map(*args)
|
313
461
|
Map.new(self, *args)
|
314
462
|
end
|
315
463
|
|
464
|
+
#
|
316
465
|
# @return [Celerity::Maps]
|
466
|
+
#
|
467
|
+
|
317
468
|
def maps
|
318
469
|
Maps.new(self)
|
319
470
|
end
|
320
471
|
|
472
|
+
#
|
473
|
+
# @return [Celerity::Meta]
|
474
|
+
#
|
475
|
+
|
321
476
|
def meta(*args)
|
322
477
|
Meta.new(self, *args)
|
323
478
|
end
|
324
479
|
|
480
|
+
#
|
481
|
+
# @return [Celerity::Metas]
|
482
|
+
#
|
483
|
+
|
325
484
|
def metas(*args)
|
326
485
|
Metas.new(self, *args)
|
327
486
|
end
|
328
487
|
|
488
|
+
#
|
329
489
|
# @return [Celerity::Ol]
|
490
|
+
#
|
491
|
+
|
330
492
|
def ol(*args)
|
331
493
|
Ol.new(self, *args)
|
332
494
|
end
|
333
495
|
|
496
|
+
#
|
334
497
|
# @return [Celerity::Ols]
|
498
|
+
#
|
499
|
+
|
335
500
|
def ols
|
336
501
|
Ols.new(self)
|
337
502
|
end
|
338
503
|
|
504
|
+
#
|
339
505
|
# @return [Celerity::Option]
|
506
|
+
#
|
507
|
+
|
340
508
|
def option(*args)
|
341
509
|
Option.new(self, *args)
|
342
510
|
end
|
343
511
|
|
512
|
+
#
|
344
513
|
# @return [Celerity::P]
|
514
|
+
#
|
515
|
+
|
345
516
|
def p(*args)
|
346
517
|
P.new(self, *args)
|
347
518
|
end
|
348
519
|
|
520
|
+
#
|
349
521
|
# @return [Celerity::Ps]
|
522
|
+
#
|
523
|
+
|
350
524
|
def ps
|
351
525
|
Ps.new(self)
|
352
526
|
end
|
353
527
|
|
528
|
+
#
|
354
529
|
# @return [Celerity::Pre]
|
530
|
+
#
|
531
|
+
|
355
532
|
def pre(*args)
|
356
533
|
Pre.new(self, *args)
|
357
534
|
end
|
358
535
|
|
536
|
+
#
|
359
537
|
# @return [Celerity::Pres]
|
538
|
+
#
|
539
|
+
|
360
540
|
def pres
|
361
541
|
Pres.new(self)
|
362
542
|
end
|
363
|
-
|
543
|
+
|
544
|
+
#
|
364
545
|
# Since finding radios by value is very common, you can use this shorthand:
|
365
546
|
#
|
366
547
|
# browser.radio(:name, 'a_name', '1234').set
|
@@ -370,126 +551,197 @@ module Celerity
|
|
370
551
|
# browser.radio(:name => 'a_name', :value => '1234').set
|
371
552
|
#
|
372
553
|
# @return [Celerity::Radio]
|
554
|
+
#
|
555
|
+
|
373
556
|
def radio(*args)
|
374
557
|
Radio.new(self, *args)
|
375
558
|
end
|
376
559
|
|
560
|
+
#
|
377
561
|
# @return [Celerity::Radios]
|
562
|
+
#
|
563
|
+
|
378
564
|
def radios
|
379
565
|
Radios.new(self)
|
380
566
|
end
|
381
567
|
|
568
|
+
#
|
382
569
|
# @return [Celerity::TableRow]
|
570
|
+
#
|
571
|
+
|
383
572
|
def row(*args)
|
384
573
|
TableRow.new(self, *args)
|
385
574
|
end
|
386
575
|
|
576
|
+
#
|
387
577
|
# @return [Celerity::TableRows]
|
578
|
+
#
|
579
|
+
|
388
580
|
def rows
|
389
581
|
TableRows.new(self)
|
390
582
|
end
|
391
583
|
|
584
|
+
#
|
392
585
|
# @return [Celerity::SelectList]
|
586
|
+
#
|
587
|
+
|
393
588
|
def select_list(*args)
|
394
589
|
SelectList.new(self, *args)
|
395
590
|
end
|
396
591
|
|
592
|
+
#
|
397
593
|
# @return [Celerity::SelectLists]
|
594
|
+
#
|
595
|
+
|
398
596
|
def select_lists
|
399
597
|
SelectLists.new(self)
|
400
598
|
end
|
401
599
|
|
600
|
+
#
|
402
601
|
# @return [Celerity::Span]
|
602
|
+
#
|
603
|
+
|
403
604
|
def span(*args)
|
404
605
|
Span.new(self, *args)
|
405
606
|
end
|
406
607
|
|
608
|
+
#
|
407
609
|
# @return [Celerity::Spans]
|
610
|
+
#
|
611
|
+
|
408
612
|
def spans
|
409
613
|
Spans.new(self)
|
410
614
|
end
|
411
615
|
|
616
|
+
#
|
412
617
|
# @return [Celerity::Spans]
|
618
|
+
#
|
619
|
+
|
413
620
|
def strong(*args)
|
414
621
|
Strong.new(self, *args)
|
415
622
|
end
|
416
623
|
|
624
|
+
#
|
417
625
|
# @return [Celerity::Strongs]
|
626
|
+
#
|
627
|
+
|
418
628
|
def strongs
|
419
629
|
Strongs.new(self)
|
420
630
|
end
|
421
631
|
|
632
|
+
#
|
422
633
|
# @return [Celerity::Table]
|
634
|
+
#
|
635
|
+
|
423
636
|
def table(*args)
|
424
637
|
Table.new(self, *args)
|
425
638
|
end
|
426
639
|
|
640
|
+
#
|
427
641
|
# @return [Celerity::Tables]
|
642
|
+
#
|
643
|
+
|
428
644
|
def tables
|
429
645
|
Tables.new(self)
|
430
646
|
end
|
431
647
|
|
648
|
+
#
|
432
649
|
# @return [Celerity::TableBody]
|
650
|
+
#
|
651
|
+
|
433
652
|
def tbody(*args)
|
434
653
|
TableBody.new(self, *args)
|
435
654
|
end
|
436
655
|
|
656
|
+
#
|
437
657
|
# @return [Celerity::TableBodies]
|
658
|
+
#
|
659
|
+
|
438
660
|
def tbodies
|
439
661
|
TableBodies.new(self)
|
440
662
|
end
|
441
663
|
|
664
|
+
#
|
442
665
|
# @return [Celerity::TextField]
|
666
|
+
#
|
667
|
+
|
443
668
|
def text_field(*args)
|
444
669
|
TextField.new(self, *args)
|
445
670
|
end
|
446
671
|
|
672
|
+
#
|
447
673
|
# @return [Celerity::TextFields]
|
674
|
+
#
|
675
|
+
|
448
676
|
def text_fields
|
449
677
|
TextFields.new(self)
|
450
678
|
end
|
451
679
|
|
680
|
+
#
|
452
681
|
# @return [Celerity::TableFooter]
|
682
|
+
#
|
683
|
+
|
453
684
|
def tfoot(*args)
|
454
685
|
TableFooter.new(self, *args)
|
455
686
|
end
|
456
687
|
|
688
|
+
#
|
457
689
|
# @return [Celerity::TableFooters]
|
690
|
+
#
|
691
|
+
|
458
692
|
def tfoots
|
459
693
|
TableFooters.new(self)
|
460
694
|
end
|
461
695
|
alias_method :tfeet, :tfoots # :-)
|
462
696
|
|
463
|
-
#
|
697
|
+
#
|
698
|
+
# Watir's cells() won't find <th> elements.
|
464
699
|
# This is a workaround.
|
465
700
|
#
|
466
701
|
# @return [Celerity::Th]
|
702
|
+
#
|
703
|
+
|
467
704
|
def th(*args)
|
468
705
|
Th.new(self, *args)
|
469
706
|
end
|
470
707
|
|
471
|
-
#
|
708
|
+
#
|
709
|
+
# FIXME: implement or change api,
|
472
710
|
# @see th
|
711
|
+
#
|
712
|
+
|
473
713
|
def ths
|
474
714
|
raise NotImplementedError
|
475
715
|
end
|
476
716
|
|
717
|
+
#
|
477
718
|
# @return [Celerity::TableHeader]
|
719
|
+
#
|
720
|
+
|
478
721
|
def thead(*args)
|
479
722
|
TableHeader.new(self, *args)
|
480
723
|
end
|
481
724
|
|
725
|
+
#
|
482
726
|
# @return [Celerity::TableHeaders]
|
727
|
+
#
|
728
|
+
|
483
729
|
def theads
|
484
730
|
TableHeaders.new(self)
|
485
731
|
end
|
486
732
|
|
733
|
+
#
|
487
734
|
# @return [Celerity::Ul]
|
735
|
+
#
|
736
|
+
|
488
737
|
def ul(*args)
|
489
738
|
Ul.new(self, *args)
|
490
739
|
end
|
491
740
|
|
741
|
+
#
|
492
742
|
# @return [Celerity::Uls]
|
743
|
+
#
|
744
|
+
|
493
745
|
def uls
|
494
746
|
Uls.new(self)
|
495
747
|
end
|