celerity 0.0.3 → 0.0.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.
Files changed (136) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +14 -0
  3. data/Manifest.txt +127 -151
  4. data/README.txt +15 -20
  5. data/lib/celerity.rb +13 -5
  6. data/lib/celerity/browser.rb +296 -0
  7. data/lib/celerity/clickable_element.rb +1 -0
  8. data/lib/celerity/collections.rb +4 -0
  9. data/lib/celerity/container.rb +69 -2
  10. data/lib/celerity/disabled_element.rb +1 -0
  11. data/lib/celerity/element.rb +103 -38
  12. data/lib/celerity/element_collections.rb +14 -8
  13. data/lib/celerity/element_locator.rb +61 -50
  14. data/lib/celerity/element_map.rb +51 -0
  15. data/lib/celerity/elements/button.rb +1 -0
  16. data/lib/celerity/elements/file_field.rb +3 -2
  17. data/lib/celerity/elements/form.rb +1 -0
  18. data/lib/celerity/elements/frame.rb +16 -1
  19. data/lib/celerity/elements/image.rb +15 -13
  20. data/lib/celerity/elements/link.rb +4 -1
  21. data/lib/celerity/elements/option.rb +1 -0
  22. data/lib/celerity/elements/radio_check.rb +19 -7
  23. data/lib/celerity/elements/select_list.rb +17 -2
  24. data/lib/celerity/elements/table.rb +34 -20
  25. data/lib/celerity/elements/table_body.rb +2 -2
  26. data/lib/celerity/elements/table_cell.rb +3 -1
  27. data/lib/celerity/elements/table_footer.rb +2 -2
  28. data/lib/celerity/elements/table_header.rb +2 -2
  29. data/lib/celerity/elements/table_row.rb +4 -2
  30. data/lib/celerity/elements/text_field.rb +20 -9
  31. data/lib/celerity/exception.rb +11 -18
  32. data/lib/celerity/extra/method_generator.rb +13 -8
  33. data/lib/celerity/htmlunit/download.sh +23 -0
  34. data/lib/celerity/htmlunit/htmlunit-2.2.jar +0 -0
  35. data/lib/celerity/htmlunit/htmlunit-core-js-2.2.jar +0 -0
  36. data/lib/celerity/htmlunit/{nekohtml-1.9.7.jar → nekohtml-1.9.8.jar} +0 -0
  37. data/lib/celerity/input_element.rb +1 -1
  38. data/lib/celerity/version.rb +1 -1
  39. data/lib/celerity/watir_compatibility.rb +37 -23
  40. data/spec/area_spec.rb +19 -4
  41. data/spec/areas_spec.rb +2 -3
  42. data/spec/{ie_spec.rb → browser_spec.rb} +66 -15
  43. data/spec/button_spec.rb +36 -3
  44. data/spec/buttons_spec.rb +2 -3
  45. data/spec/checkbox_spec.rb +43 -8
  46. data/spec/checkboxes_spec.rb +2 -3
  47. data/spec/div_spec.rb +31 -4
  48. data/spec/divs_spec.rb +2 -3
  49. data/spec/element_spec.rb +36 -6
  50. data/spec/filefield_spec.rb +28 -13
  51. data/spec/filefields_spec.rb +2 -3
  52. data/spec/form_spec.rb +6 -3
  53. data/spec/forms_spec.rb +2 -3
  54. data/spec/frame_spec.rb +14 -5
  55. data/spec/frames_spec.rb +71 -0
  56. data/spec/hidden_spec.rb +21 -3
  57. data/spec/hiddens_spec.rb +2 -3
  58. data/spec/hn_spec.rb +30 -12
  59. data/spec/hns_spec.rb +14 -10
  60. data/spec/html/form_js_bug.html +11 -0
  61. data/spec/html/forms_with_input_elements.html +2 -1
  62. data/spec/html/invalid_js.html +11 -0
  63. data/spec/html/latin1_text.html +1 -0
  64. data/spec/html/non_control_elements.html +8 -4
  65. data/spec/html/simple_ajax.html +22 -0
  66. data/spec/htmlunit_spec.rb +4 -5
  67. data/spec/image_spec.rb +33 -3
  68. data/spec/images_spec.rb +2 -3
  69. data/spec/label_spec.rb +16 -3
  70. data/spec/labels_spec.rb +2 -3
  71. data/spec/li_spec.rb +25 -3
  72. data/spec/link_spec.rb +35 -3
  73. data/spec/links_spec.rb +2 -3
  74. data/spec/lis_spec.rb +2 -3
  75. data/spec/map_spec.rb +19 -3
  76. data/spec/maps_spec.rb +2 -3
  77. data/spec/meta_spec.rb +3 -1
  78. data/spec/ol_spec.rb +17 -3
  79. data/spec/ols_spec.rb +2 -3
  80. data/spec/option_spec.rb +28 -3
  81. data/spec/p_spec.rb +30 -2
  82. data/spec/pre_spec.rb +25 -3
  83. data/spec/pres_spec.rb +2 -3
  84. data/spec/ps_spec.rb +2 -3
  85. data/spec/radio_spec.rb +47 -3
  86. data/spec/radios_spec.rb +2 -3
  87. data/spec/select_list_spec.rb +42 -3
  88. data/spec/select_lists_spec.rb +2 -3
  89. data/spec/span_spec.rb +32 -7
  90. data/spec/spans_spec.rb +2 -4
  91. data/spec/spec_helper.rb +5 -25
  92. data/spec/table_bodies_spec.rb +7 -5
  93. data/spec/table_body_spec.rb +11 -4
  94. data/spec/table_cell_spec.rb +15 -4
  95. data/spec/table_cells_spec.rb +3 -4
  96. data/spec/table_footer_spec.rb +11 -4
  97. data/spec/table_footers_spec.rb +7 -5
  98. data/spec/table_header_spec.rb +11 -4
  99. data/spec/table_headers_spec.rb +7 -5
  100. data/spec/table_row_spec.rb +31 -7
  101. data/spec/table_rows_spec.rb +5 -4
  102. data/spec/table_spec.rb +36 -7
  103. data/spec/tables_spec.rb +2 -3
  104. data/spec/text_field_spec.rb +51 -13
  105. data/spec/text_fields_spec.rb +2 -3
  106. data/spec/ul_spec.rb +18 -3
  107. data/spec/uls_spec.rb +2 -3
  108. data/spec/{watir_compatability_spec.rb → watir_compatibility_spec.rb} +42 -35
  109. data/support/spec_server.rb +9 -0
  110. metadata +167 -161
  111. metadata.gz.sig +0 -0
  112. data/benchmark/bm_2000_spans.rb +0 -48
  113. data/benchmark/bm_digg.rb +0 -26
  114. data/benchmark/bm_google_images.rb +0 -36
  115. data/benchmark/bm_input_locator.rb +0 -69
  116. data/benchmark/loader.rb +0 -9
  117. data/config/hoe.rb +0 -68
  118. data/config/requirements.rb +0 -15
  119. data/lib/celerity/htmlunit/htmlunit-2.2-SNAPSHOT.jar +0 -0
  120. data/lib/celerity/htmlunit/js-1.7R1.jar +0 -0
  121. data/lib/celerity/ie.rb +0 -195
  122. data/setup.rb +0 -1583
  123. data/support/celerity_viewer/rubycocoa/CelerityViewer.icns +0 -0
  124. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/classes.nib +0 -37
  125. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/info.nib +0 -19
  126. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/keyedobjects.nib +0 -0
  127. data/support/celerity_viewer/rubycocoa/Info.plist.erb +0 -28
  128. data/support/celerity_viewer/rubycocoa/MainController.rb +0 -23
  129. data/support/celerity_viewer/rubycocoa/README +0 -94
  130. data/support/celerity_viewer/rubycocoa/Rakefile +0 -100
  131. data/support/celerity_viewer/rubycocoa/distributed_viewer.rb +0 -86
  132. data/support/celerity_viewer/rubycocoa/main.m +0 -7
  133. data/support/celerity_viewer/rubycocoa/main.rb +0 -27
  134. data/tasks/benchmark.rake +0 -4
  135. data/tasks/environment.rake +0 -7
  136. data/tasks/simple_ci.rake +0 -94
@@ -1,6 +1,7 @@
1
1
  module Celerity
2
2
  module ClickableElement
3
3
 
4
+ # clicks the element
4
5
  def click
5
6
  assert_exists
6
7
  assert_enabled
@@ -1,5 +1,9 @@
1
1
  module Celerity
2
2
 
3
+ class Frames < ElementCollections
4
+ def element_class; Frame; end
5
+ end
6
+
3
7
  class Buttons < ElementCollections
4
8
  def element_class; Button; end
5
9
  end
@@ -1,15 +1,42 @@
1
1
  module Celerity
2
+
3
+ # This class contains methods for accessing elements inside a container.
4
+ # (usually the Browser object, meaning the current page).
5
+ #
6
+ # The most common syntax is
7
+ # browser.elem(:attribute, 'value')
8
+ #
9
+ # Note that the element is located lazily, so no exceptions will be thrown
10
+ # if the element doesn't exist until you call a method on the resulting object.
11
+ # To do this you would normally use +Element#exists?+ or an action method,
12
+ # like +ClickableElement#click+.
13
+ #
14
+ # You can also pass in a hash:
15
+ #
16
+ # browser.link(:index => 1).click
17
+ #
18
+ # All elements support multiple attributes identification using the
19
+ # hash syntax (though might not always be compatible with Watir):
20
+ #
21
+ # browser.span(:class_name => 'product', :index => 5).text
22
+ #
23
+ # You can also get all the elements of a certain type by using the plural form:
24
+ #
25
+ # browser.links => #<Celerity::Links:0x7a1c2da2 ...>
26
+ #
27
+ # See +Celerity::ElementCollections+ for details.
2
28
  module Container
3
29
  include Celerity::Exception
4
30
  attr_accessor :page_container
5
31
 
6
- def set_container(container)
32
+ def container=(container)
7
33
  @container = container
8
34
  @page_container = container.page_container
35
+ container
9
36
  end
10
37
 
11
38
  def update_page(page)
12
- @page_container.set_page(page)
39
+ @page_container.page = page
13
40
  end
14
41
 
15
42
  def frame(*args)
@@ -17,10 +44,16 @@ module Celerity
17
44
  Frame.new(self, *args)
18
45
  end
19
46
 
47
+ def frames
48
+ assert_exists
49
+ Frames.new(self)
50
+ end
51
+
20
52
  def table(*args)
21
53
  assert_exists
22
54
  Table.new(self, *args)
23
55
  end
56
+
24
57
  def tables
25
58
  assert_exists
26
59
  Tables.new(self)
@@ -30,6 +63,7 @@ module Celerity
30
63
  assert_exists
31
64
  TableHeader.new(self, *args)
32
65
  end
66
+
33
67
  def theads
34
68
  assert_exists
35
69
  TableHeaders.new(self)
@@ -39,6 +73,7 @@ module Celerity
39
73
  assert_exists
40
74
  TableBody.new(self, *args)
41
75
  end
76
+
42
77
  def tbodies
43
78
  assert_exists
44
79
  TableBodies.new(self)
@@ -48,6 +83,7 @@ module Celerity
48
83
  assert_exists
49
84
  TableFooter.new(self, *args)
50
85
  end
86
+
51
87
  def tfoots
52
88
  assert_exists
53
89
  TableFooters.new(self)
@@ -58,6 +94,7 @@ module Celerity
58
94
  assert_exists
59
95
  TableCell.new(self, *args)
60
96
  end
97
+
61
98
  def cells
62
99
  assert_exists
63
100
  TableCells.new(self)
@@ -67,6 +104,7 @@ module Celerity
67
104
  assert_exists
68
105
  TableRow.new(self, *args)
69
106
  end
107
+
70
108
  def rows
71
109
  assert_exists
72
110
  TableRows.new(self)
@@ -76,6 +114,7 @@ module Celerity
76
114
  assert_exists
77
115
  Button.new(self, *args)
78
116
  end
117
+
79
118
  def buttons
80
119
  assert_exists
81
120
  Buttons.new(self)
@@ -85,6 +124,7 @@ module Celerity
85
124
  assert_exists
86
125
  FileField.new(self, *args)
87
126
  end
127
+
88
128
  def file_fields
89
129
  assert_exists
90
130
  FileFields.new(self)
@@ -94,6 +134,7 @@ module Celerity
94
134
  assert_exists
95
135
  TextField.new(self, *args)
96
136
  end
137
+
97
138
  def text_fields
98
139
  assert_exists
99
140
  TextFields.new(self)
@@ -103,6 +144,7 @@ module Celerity
103
144
  assert_exists
104
145
  Hidden.new(self, *args)
105
146
  end
147
+
106
148
  def hiddens
107
149
  assert_exists
108
150
  Hiddens.new(self)
@@ -112,6 +154,7 @@ module Celerity
112
154
  assert_exists
113
155
  SelectList.new(self, *args)
114
156
  end
157
+
115
158
  def select_lists
116
159
  assert_exists
117
160
  SelectLists.new(self)
@@ -136,6 +179,7 @@ module Celerity
136
179
  assert_exists
137
180
  Radio.new(self, *args)
138
181
  end
182
+
139
183
  def radios
140
184
  assert_exists
141
185
  Radios.new(self)
@@ -155,6 +199,7 @@ module Celerity
155
199
  assert_exists
156
200
  Ul.new(self, *args)
157
201
  end
202
+
158
203
  def uls
159
204
  assert_exists
160
205
  Uls.new(self)
@@ -164,6 +209,7 @@ module Celerity
164
209
  assert_exists
165
210
  Ol.new(self, *args)
166
211
  end
212
+
167
213
  def ols
168
214
  assert_exists
169
215
  Ols.new(self)
@@ -173,6 +219,7 @@ module Celerity
173
219
  assert_exists
174
220
  Li.new(self, *args)
175
221
  end
222
+
176
223
  def lis
177
224
  assert_exists
178
225
  Lis.new(self)
@@ -182,6 +229,7 @@ module Celerity
182
229
  assert_exists
183
230
  Map.new(self, *args)
184
231
  end
232
+
185
233
  def maps
186
234
  assert_exists
187
235
  Maps.new(self)
@@ -191,6 +239,7 @@ module Celerity
191
239
  assert_exists
192
240
  Area.new(self, *args)
193
241
  end
242
+
194
243
  def areas
195
244
  assert_exists
196
245
  Areas.new(self)
@@ -200,6 +249,7 @@ module Celerity
200
249
  assert_exists
201
250
  Image.new(self, *args)
202
251
  end
252
+
203
253
  def images
204
254
  assert_exists
205
255
  Images.new(self)
@@ -209,6 +259,7 @@ module Celerity
209
259
  assert_exists
210
260
  Div.new(self, *args)
211
261
  end
262
+
212
263
  def divs
213
264
  assert_exists
214
265
  Divs.new(self)
@@ -218,6 +269,7 @@ module Celerity
218
269
  assert_exists
219
270
  Form.new(self, *args)
220
271
  end
272
+
221
273
  def forms
222
274
  assert_exists
223
275
  Forms.new(self)
@@ -227,6 +279,7 @@ module Celerity
227
279
  assert_exists
228
280
  Span.new(self, *args)
229
281
  end
282
+
230
283
  def spans
231
284
  assert_exists
232
285
  Spans.new(self)
@@ -236,6 +289,7 @@ module Celerity
236
289
  assert_exists
237
290
  P.new(self, *args)
238
291
  end
292
+
239
293
  def ps
240
294
  assert_exists
241
295
  Ps.new(self)
@@ -245,6 +299,7 @@ module Celerity
245
299
  assert_exists
246
300
  Pre.new(self, *args)
247
301
  end
302
+
248
303
  def pres
249
304
  assert_exists
250
305
  Pres.new(self)
@@ -254,6 +309,7 @@ module Celerity
254
309
  assert_exists
255
310
  Label.new(self, *args)
256
311
  end
312
+
257
313
  def labels
258
314
  assert_exists
259
315
  Labels.new(self)
@@ -263,46 +319,57 @@ module Celerity
263
319
  assert_exists
264
320
  H1.new(self, *args)
265
321
  end
322
+
266
323
  def h2(*args)
267
324
  assert_exists
268
325
  H2.new(self, *args)
269
326
  end
327
+
270
328
  def h3(*args)
271
329
  assert_exists
272
330
  H3.new(self, *args)
273
331
  end
332
+
274
333
  def h4(*args)
275
334
  assert_exists
276
335
  H4.new(self, *args)
277
336
  end
337
+
278
338
  def h5(*args)
279
339
  assert_exists
280
340
  H5.new(self, *args)
281
341
  end
342
+
282
343
  def h6(*args)
283
344
  assert_exists
284
345
  H6.new(self, *args)
285
346
  end
347
+
286
348
  def h1s
287
349
  assert_exists
288
350
  H1s.new(self)
289
351
  end
352
+
290
353
  def h2s
291
354
  assert_exists
292
355
  H2s.new(self)
293
356
  end
357
+
294
358
  def h3s
295
359
  assert_exists
296
360
  H3s.new(self)
297
361
  end
362
+
298
363
  def h4s
299
364
  assert_exists
300
365
  H4s.new(self)
301
366
  end
367
+
302
368
  def h5s
303
369
  assert_exists
304
370
  H5s.new(self)
305
371
  end
372
+
306
373
  def h6s
307
374
  assert_exists
308
375
  H6s.new(self)
@@ -1,4 +1,5 @@
1
1
  module Celerity
2
+ # Module mixed in to all elements that can have the 'disabled' attribute.
2
3
  module DisabledElement
3
4
  include Celerity::Exception
4
5
 
@@ -1,8 +1,11 @@
1
1
  module Celerity
2
+
3
+ # Superclass for all HTML elements.
2
4
  class Element
3
5
  include Exception
4
6
  include Container
5
- attr_accessor :container, :object
7
+
8
+ attr_reader :container, :object
6
9
 
7
10
  # number of spaces that separate the property from the value in the create_string method
8
11
  TO_S_SIZE = 14
@@ -13,7 +16,8 @@ module Celerity
13
16
  :cell_halign => [:align, :char, :charoff],
14
17
  :cell_valign => [:valign],
15
18
  :i18n => [:dir, :lang],
16
- :event => [:onclick, :ondblclick, :onmousedown, :onmouseup, :onmouseover, :onmousemove, :onmouseout, :onkeypress, :onkeydown, :onkeyup],
19
+ :event => [:onclick, :ondblclick, :onmousedown, :onmouseup, :onmouseover,
20
+ :onmousemove, :onmouseout, :onkeypress, :onkeydown, :onkeyup],
17
21
  :sloppy => [:name, :value]
18
22
  }
19
23
 
@@ -21,15 +25,18 @@ module Celerity
21
25
  CELLVALIGN_ATTRIBUTES = HTML_401_TRANSITIONAL[:cell_valign]
22
26
  BASE_ATTRIBUTES = HTML_401_TRANSITIONAL.values_at(:core, :i18n, :event, :sloppy).flatten
23
27
  ATTRIBUTES = BASE_ATTRIBUTES
28
+
29
+ DEFAULT_HOW = nil
24
30
 
31
+ # @api internal
25
32
  def initialize(container, *args)
26
- set_container container
33
+ self.container = container
27
34
 
28
35
  case args.size
29
36
  when 2
30
37
  @conditions = { args[0] => args[1] }
31
38
  when 1
32
- if Hash === args.first
39
+ if args.first.is_a? Hash
33
40
  @conditions = args.first
34
41
  elsif self.class::DEFAULT_HOW
35
42
  @conditions = { self.class::DEFAULT_HOW => args.first }
@@ -41,20 +48,49 @@ module Celerity
41
48
  end
42
49
  end
43
50
 
51
+ # Get the parent element (experimental, avoid if possible)
52
+ # @return [Celerity::Element] subclass
53
+ def parent
54
+ assert_exists
55
+
56
+ obj = @object.getParentNode
57
+ until element_class = HtmlUnit2CelerityElement[obj.class]
58
+ return nil if obj.nil?
59
+ obj = obj.parentNode
60
+ end
61
+
62
+ element_class.new(@container, :object, obj)
63
+ end
64
+
65
+ # Sets the focus to this element.
66
+ def focus
67
+ assert_exists
68
+ @object.focus
69
+ end
70
+
71
+ # Locates the element
72
+ # @api internal
44
73
  def locate
45
74
  @object = ElementLocator.new(@container.object, self.class).find_by_conditions(@conditions)
46
75
  end
47
76
 
77
+ # @return [String] A string representation of the element.
48
78
  def to_s
49
79
  assert_exists
50
80
  create_string(@object)
51
81
  end
52
82
 
83
+ # @param [String, #to_s] The attribute.
84
+ # @return [String] The value of the given attribute.
53
85
  def attribute_value(attribute)
54
86
  assert_exists
55
- @object.getAttribute(attribute)
87
+ @object.getAttribute(attribute.to_s)
56
88
  end
57
89
 
90
+ # Locates the element.
91
+ #
92
+ # @raise UnknownObjectException
93
+ # @api internal
58
94
  def assert_exists
59
95
  locate
60
96
  unless @object
@@ -62,29 +98,40 @@ module Celerity
62
98
  end
63
99
  end
64
100
 
101
+ # Checks if the element exists.
102
+ # @return [true, false]
65
103
  def exists?
66
- begin
67
- assert_exists
68
- true
69
- rescue UnknownObjectException, UnknownFrameException
70
- false
71
- end
104
+ assert_exists
105
+ true
106
+ rescue UnknownObjectException, UnknownFrameException
107
+ false
72
108
  end
73
109
  alias_method :exist?, :exists?
74
110
  alias_method :exists, :exists?
75
111
 
112
+ # Return a text representation of the element.
113
+ # @return [String]
76
114
  def text
77
115
  assert_exists
116
+
117
+ # this could work, but breaks some tests atm
118
+ # @object.getTextContent.strip
119
+
78
120
  @object.asText.strip
79
121
  end
80
122
  alias_method :innerText, :text
81
123
  alias_method :inner_text, :text
82
124
 
125
+ # Check if the element contains the given text.
126
+ #
127
+ # @param [String, Regexp] expected_text The text to look for.
128
+ # @return [Fixnum, nil] The index of the matched text, or nil if it doesn't match.
83
129
  def contains_text(expected_text)
84
130
  assert_exists
131
+
85
132
  case expected_text
86
133
  when Regexp
87
- text().match(expected_text)
134
+ text() =~ expected_text
88
135
  when String
89
136
  text().index(expected_text)
90
137
  else
@@ -92,25 +139,36 @@ module Celerity
92
139
  end
93
140
  end
94
141
 
142
+ # @return [String] The normative XML representation of the element (including children).
95
143
  def to_xml
96
144
  assert_exists
97
145
  @object.asXml
98
146
  end
99
- alias_method :asXml, :to_xml
147
+ alias_method :asXml, :to_xml
100
148
  alias_method :as_xml, :to_xml
101
- alias_method :html, :to_xml
149
+ alias_method :html, :to_xml
102
150
 
103
- # used to get attributes
104
- def method_missing(meth, *args, &blk)
105
- case meth
106
- when :class_name
107
- meth = :class
108
- when :caption
109
- meth = :value
110
- when :url
111
- meth = :href
151
+ # @return [String] A string representation of the element's attributes.
152
+ def attribute_string
153
+ assert_exists
154
+
155
+ result = ''
156
+ iterator = @object.getAttributeEntriesIterator
157
+
158
+ while iterator.hasNext
159
+ attribute = iterator.next
160
+ result << "#{attribute.getName}=\"#{attribute.getHtmlValue.to_s}\" "
112
161
  end
162
+
163
+ result
164
+ end
113
165
 
166
+ # Dynamically get element attributes.
167
+ # @return [String] The resulting attribute.
168
+ # @raise NoMethodError If the element doesn't have this attribute.
169
+ def method_missing(meth, *args, &blk)
170
+ meth = selector_to_attribute(meth)
171
+
114
172
  if self.class::ATTRIBUTES.include?(meth)
115
173
  assert_exists
116
174
  @object.getAttributeValue(meth.to_s)
@@ -119,30 +177,28 @@ module Celerity
119
177
  super
120
178
  end
121
179
  end
122
-
123
- def attribute_string
124
- assert_exists
125
- n = ''
126
- iterator = @object.getAttributeEntriesIterator
127
- while iterator.hasNext
128
- attribute = iterator.next
129
- n += "#{attribute.getName}=\"#{attribute.getHtmlValue.to_s}\" "
130
- end
131
- return n
180
+
181
+ def respond_to?(meth, include_private = false)
182
+ meth = selector_to_attribute(meth)
183
+ return true if self.class::ATTRIBUTES.include?(meth)
184
+ super
132
185
  end
133
186
 
134
187
  private
135
188
 
136
189
  def create_string(element)
137
- n = []
138
- n << "tag:".ljust(TO_S_SIZE) + element.getTagName unless element.getTagName.empty?
190
+ ret = []
191
+ ret << "tag:".ljust(TO_S_SIZE) + element.getTagName unless element.getTagName.empty?
192
+
139
193
  iterator = element.getAttributeEntriesIterator
140
194
  while iterator.hasNext
141
195
  attribute = iterator.next
142
- n << " #{attribute.getName}:".ljust(TO_S_SIZE+2) + attribute.getHtmlValue.to_s
196
+ ret << " #{attribute.getName}:".ljust(TO_S_SIZE+2) + attribute.getHtmlValue.to_s
143
197
  end
144
- n << " text:".ljust(TO_S_SIZE+2) + element.asText unless element.asText.empty?
145
- return n.join("\n")
198
+
199
+ ret << " text:".ljust(TO_S_SIZE+2) + element.asText unless element.asText.empty?
200
+
201
+ ret.join("\n")
146
202
  end
147
203
 
148
204
  def identifier_string
@@ -154,5 +210,14 @@ module Celerity
154
210
  end
155
211
  end
156
212
 
213
+ def selector_to_attribute(meth)
214
+ case meth
215
+ when :class_name then :class
216
+ when :caption then :value
217
+ when :url then :href
218
+ else meth
219
+ end
220
+ end
221
+
157
222
  end # Element
158
223
  end # Celerity