celerity 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. data/History.txt +15 -1
  2. data/Manifest.txt +174 -0
  3. data/README.txt +19 -10
  4. data/config/hoe.rb +68 -0
  5. data/config/requirements.rb +15 -0
  6. data/lib/celerity.rb +14 -11
  7. data/lib/celerity/collections.rb +37 -8
  8. data/lib/celerity/container.rb +100 -3
  9. data/lib/celerity/disabled_element.rb +4 -2
  10. data/lib/celerity/element.rb +21 -8
  11. data/lib/celerity/element_collections.rb +4 -7
  12. data/lib/celerity/element_locator.rb +1 -0
  13. data/lib/celerity/elements/button.rb +6 -2
  14. data/lib/celerity/elements/file_field.rb +1 -1
  15. data/lib/celerity/elements/form.rb +1 -2
  16. data/lib/celerity/elements/frame.rb +0 -3
  17. data/lib/celerity/elements/image.rb +1 -4
  18. data/lib/celerity/elements/label.rb +1 -0
  19. data/lib/celerity/elements/link.rb +2 -0
  20. data/lib/celerity/elements/option.rb +1 -0
  21. data/lib/celerity/elements/radio_check.rb +3 -5
  22. data/lib/celerity/elements/select_list.rb +3 -10
  23. data/lib/celerity/elements/table.rb +8 -22
  24. data/lib/celerity/elements/table_body.rb +5 -11
  25. data/lib/celerity/elements/table_cell.rb +1 -0
  26. data/lib/celerity/elements/table_footer.rb +30 -0
  27. data/lib/celerity/elements/table_header.rb +30 -0
  28. data/lib/celerity/elements/table_row.rb +5 -3
  29. data/lib/celerity/elements/text_field.rb +18 -13
  30. data/lib/celerity/exception.rb +8 -8
  31. data/lib/celerity/extra/method_generator.rb +5 -2
  32. data/lib/celerity/htmlunit/htmlunit-2.2-SNAPSHOT.jar +0 -0
  33. data/lib/celerity/ie.rb +195 -141
  34. data/lib/celerity/non_control_elements.rb +30 -4
  35. data/lib/celerity/version.rb +1 -1
  36. data/lib/celerity/watir_compatibility.rb +62 -0
  37. data/setup.rb +0 -2
  38. data/spec/area_spec.rb +4 -1
  39. data/spec/areas_spec.rb +1 -1
  40. data/spec/button_spec.rb +35 -17
  41. data/spec/buttons_spec.rb +1 -1
  42. data/spec/checkbox_spec.rb +6 -4
  43. data/spec/checkboxes_spec.rb +1 -1
  44. data/spec/div_spec.rb +20 -19
  45. data/spec/divs_spec.rb +2 -2
  46. data/spec/element_spec.rb +13 -2
  47. data/spec/filefield_spec.rb +6 -3
  48. data/spec/filefields_spec.rb +1 -1
  49. data/spec/form_spec.rb +4 -1
  50. data/spec/forms_spec.rb +1 -1
  51. data/spec/frame_spec.rb +6 -2
  52. data/spec/hidden_spec.rb +8 -4
  53. data/spec/hiddens_spec.rb +1 -1
  54. data/spec/hn_spec.rb +86 -0
  55. data/spec/hns_spec.rb +41 -0
  56. data/spec/html/bug_duplicate_attributes.html +14 -0
  57. data/spec/html/bug_javascript_001.html +11 -0
  58. data/spec/html/forms_with_input_elements.html +11 -11
  59. data/spec/html/images.html +18 -15
  60. data/spec/html/latin1_text.html +16 -0
  61. data/spec/html/non_control_elements.html +28 -4
  62. data/spec/html/tables.html +3 -3
  63. data/spec/html/utf8_text.html +15 -0
  64. data/spec/htmlunit_spec.rb +27 -0
  65. data/spec/ie_spec.rb +47 -12
  66. data/spec/image_spec.rb +4 -7
  67. data/spec/images_spec.rb +3 -2
  68. data/spec/label_spec.rb +4 -3
  69. data/spec/labels_spec.rb +1 -1
  70. data/spec/li_spec.rb +11 -8
  71. data/spec/link_spec.rb +5 -1
  72. data/spec/links_spec.rb +2 -1
  73. data/spec/lis_spec.rb +3 -2
  74. data/spec/map_spec.rb +4 -1
  75. data/spec/maps_spec.rb +1 -1
  76. data/spec/meta_spec.rb +6 -0
  77. data/spec/ol_spec.rb +73 -0
  78. data/spec/ols_spec.rb +41 -0
  79. data/spec/option_spec.rb +129 -0
  80. data/spec/p_spec.rb +4 -1
  81. data/spec/pre_spec.rb +4 -1
  82. data/spec/pres_spec.rb +1 -1
  83. data/spec/ps_spec.rb +2 -1
  84. data/spec/radio_spec.rb +7 -19
  85. data/spec/radios_spec.rb +1 -1
  86. data/spec/select_list_spec.rb +19 -57
  87. data/spec/select_lists_spec.rb +3 -2
  88. data/spec/span_spec.rb +8 -5
  89. data/spec/spans_spec.rb +2 -1
  90. data/spec/spec_helper.rb +8 -43
  91. data/spec/table_bodies_spec.rb +17 -4
  92. data/spec/table_body_spec.rb +47 -16
  93. data/spec/table_cell_spec.rb +5 -3
  94. data/spec/table_cells_spec.rb +1 -1
  95. data/spec/table_footer_spec.rb +94 -0
  96. data/spec/table_footers_spec.rb +53 -0
  97. data/spec/table_header_spec.rb +94 -0
  98. data/spec/table_headers_spec.rb +53 -0
  99. data/spec/table_row_spec.rb +25 -4
  100. data/spec/table_rows_spec.rb +1 -1
  101. data/spec/table_spec.rb +22 -2
  102. data/spec/tables_spec.rb +2 -1
  103. data/spec/text_field_spec.rb +52 -20
  104. data/spec/text_fields_spec.rb +1 -1
  105. data/spec/ul_spec.rb +73 -0
  106. data/spec/uls_spec.rb +41 -0
  107. data/spec/watir_compatability_spec.rb +253 -0
  108. data/support/celerity_viewer/rubycocoa/CelerityViewer.icns +0 -0
  109. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/classes.nib +37 -0
  110. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/info.nib +19 -0
  111. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/keyedobjects.nib +0 -0
  112. data/support/celerity_viewer/rubycocoa/Info.plist.erb +28 -0
  113. data/support/celerity_viewer/rubycocoa/MainController.rb +23 -0
  114. data/support/celerity_viewer/rubycocoa/README +94 -0
  115. data/support/celerity_viewer/rubycocoa/Rakefile +100 -0
  116. data/support/celerity_viewer/rubycocoa/distributed_viewer.rb +86 -0
  117. data/support/celerity_viewer/rubycocoa/main.m +7 -0
  118. data/support/celerity_viewer/rubycocoa/main.rb +27 -0
  119. data/support/spec_server.rb +64 -0
  120. data/tasks/benchmark.rake +1 -0
  121. data/tasks/rdoc.rake +4 -0
  122. data/tasks/rspec.rake +10 -3
  123. data/tasks/simple_ci.rake +94 -0
  124. data/tasks/specserver.rake +21 -0
  125. metadata +160 -114
  126. data/spec/table_bodies.rb +0 -40
  127. data/tasks/testserver.rake +0 -32
@@ -25,6 +25,34 @@ module Celerity
25
25
  assert_exists
26
26
  Tables.new(self)
27
27
  end
28
+
29
+ def thead(*args)
30
+ assert_exists
31
+ TableHeader.new(self, *args)
32
+ end
33
+ def theads
34
+ assert_exists
35
+ TableHeaders.new(self)
36
+ end
37
+
38
+ def tbody(*args)
39
+ assert_exists
40
+ TableBody.new(self, *args)
41
+ end
42
+ def tbodies
43
+ assert_exists
44
+ TableBodies.new(self)
45
+ end
46
+
47
+ def tfoot(*args)
48
+ assert_exists
49
+ TableFooter.new(self, *args)
50
+ end
51
+ def tfoots
52
+ assert_exists
53
+ TableFooters.new(self)
54
+ end
55
+ alias_method :tfeet, :tfoots # :-)
28
56
 
29
57
  def cell(*args)
30
58
  assert_exists
@@ -88,13 +116,16 @@ module Celerity
88
116
  assert_exists
89
117
  SelectLists.new(self)
90
118
  end
119
+
120
+ def option(*args)
121
+ assert_exists
122
+ Option.new(self, *args)
123
+ end
91
124
 
92
125
  def check_box(*args)
93
126
  assert_exists
94
127
  CheckBox.new(self, *args)
95
128
  end
96
- alias_method :checkbox, :check_box
97
- alias_method :checkBox, :check_box
98
129
 
99
130
  def checkboxes
100
131
  assert_exists
@@ -119,6 +150,24 @@ module Celerity
119
150
  assert_exists
120
151
  Links.new(self)
121
152
  end
153
+
154
+ def ul(*args)
155
+ assert_exists
156
+ Ul.new(self, *args)
157
+ end
158
+ def uls
159
+ assert_exists
160
+ Uls.new(self)
161
+ end
162
+
163
+ def ol(*args)
164
+ assert_exists
165
+ Ol.new(self, *args)
166
+ end
167
+ def ols
168
+ assert_exists
169
+ Ols.new(self)
170
+ end
122
171
 
123
172
  def li(*args)
124
173
  assert_exists
@@ -160,7 +209,6 @@ module Celerity
160
209
  assert_exists
161
210
  Div.new(self, *args)
162
211
  end
163
-
164
212
  def divs
165
213
  assert_exists
166
214
  Divs.new(self)
@@ -210,6 +258,55 @@ module Celerity
210
258
  assert_exists
211
259
  Labels.new(self)
212
260
  end
261
+
262
+ def h1(*args)
263
+ assert_exists
264
+ H1.new(self, *args)
265
+ end
266
+ def h2(*args)
267
+ assert_exists
268
+ H2.new(self, *args)
269
+ end
270
+ def h3(*args)
271
+ assert_exists
272
+ H3.new(self, *args)
273
+ end
274
+ def h4(*args)
275
+ assert_exists
276
+ H4.new(self, *args)
277
+ end
278
+ def h5(*args)
279
+ assert_exists
280
+ H5.new(self, *args)
281
+ end
282
+ def h6(*args)
283
+ assert_exists
284
+ H6.new(self, *args)
285
+ end
286
+ def h1s
287
+ assert_exists
288
+ H1s.new(self)
289
+ end
290
+ def h2s
291
+ assert_exists
292
+ H2s.new(self)
293
+ end
294
+ def h3s
295
+ assert_exists
296
+ H3s.new(self)
297
+ end
298
+ def h4s
299
+ assert_exists
300
+ H4s.new(self)
301
+ end
302
+ def h5s
303
+ assert_exists
304
+ H5s.new(self)
305
+ end
306
+ def h6s
307
+ assert_exists
308
+ H6s.new(self)
309
+ end
213
310
 
214
311
  private
215
312
 
@@ -1,18 +1,20 @@
1
1
  module Celerity
2
2
  module DisabledElement
3
+ include Celerity::Exception
4
+
3
5
  def enabled?
4
6
  !disabled?
5
7
  end
6
8
 
7
9
  def disabled?
8
- assert_exists unless @object
10
+ assert_exists unless defined?(@object) && @object
9
11
  @object.isDisabled
10
12
  end
11
13
  alias_method :disabled, :disabled?
12
14
 
13
15
  def assert_enabled
14
16
  if disabled?
15
- raise ObjectDisabledException, "Object #{@how.inspect} and #{@what.inspect} is disabled"
17
+ raise ObjectDisabledException, "Object #{identifier_string} is disabled"
16
18
  end
17
19
  end
18
20
 
@@ -9,10 +9,10 @@ module Celerity
9
9
 
10
10
  # HTML 4.01 Transitional DTD
11
11
  HTML_401_TRANSITIONAL = {
12
- :core => [:class, :id, :style, :title], # Not valid in base, head, html, meta, param, script, style, and title elements.
12
+ :core => [:class, :id, :style, :title],
13
13
  :cell_halign => [:align, :char, :charoff],
14
14
  :cell_valign => [:valign],
15
- :i18n => [:dir, :lang], # Not valid in base, br, frame, frameset, hr, iframe, param, and script elements.
15
+ :i18n => [:dir, :lang],
16
16
  :event => [:onclick, :ondblclick, :onmousedown, :onmouseup, :onmouseover, :onmousemove, :onmouseout, :onkeypress, :onkeydown, :onkeyup],
17
17
  :sloppy => [:name, :value]
18
18
  }
@@ -27,27 +27,29 @@ module Celerity
27
27
 
28
28
  case args.size
29
29
  when 2
30
- @conditions = {args[0] => args[1]}
30
+ @conditions = { args[0] => args[1] }
31
31
  when 1
32
32
  if Hash === args.first
33
33
  @conditions = args.first
34
- elsif defined?(self.class::DEFAULT_HOW)
35
- @conditions = {self.class::DEFAULT_HOW => args.first}
34
+ elsif self.class::DEFAULT_HOW
35
+ @conditions = { self.class::DEFAULT_HOW => args.first }
36
36
  else
37
37
  raise ArgumentError, "wrong number of arguments (1 for 2)"
38
38
  end
39
+ else
40
+ raise ArgumentError, "wrong number of arguments (#{args.size} for 2)"
39
41
  end
40
42
  end
41
43
 
42
44
  def locate
43
- @object ||= ElementLocator.new(@container.object, self.class).find_by_conditions(@conditions)
45
+ @object = ElementLocator.new(@container.object, self.class).find_by_conditions(@conditions)
44
46
  end
45
47
 
46
48
  def to_s
47
49
  assert_exists
48
50
  create_string(@object)
49
51
  end
50
-
52
+
51
53
  def attribute_value(attribute)
52
54
  assert_exists
53
55
  @object.getAttribute(attribute)
@@ -117,6 +119,17 @@ module Celerity
117
119
  super
118
120
  end
119
121
  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
132
+ end
120
133
 
121
134
  private
122
135
 
@@ -124,7 +137,7 @@ module Celerity
124
137
  n = []
125
138
  n << "tag:".ljust(TO_S_SIZE) + element.getTagName unless element.getTagName.empty?
126
139
  iterator = element.getAttributeEntriesIterator
127
- while (iterator.hasNext)
140
+ while iterator.hasNext
128
141
  attribute = iterator.next
129
142
  n << " #{attribute.getName}:".ljust(TO_S_SIZE+2) + attribute.getHtmlValue.to_s
130
143
  end
@@ -7,13 +7,9 @@ module Celerity
7
7
  def initialize(container, how = nil, what = nil)
8
8
  @container = container
9
9
  @object = (how == :object ? what : nil)
10
- @length = length # defined by subclasses
10
+ @length = length
11
11
  end
12
12
 
13
- def element_tags
14
- element_class::TAGS
15
- end
16
-
17
13
  def length
18
14
  if @object
19
15
  @object.length
@@ -27,13 +23,14 @@ module Celerity
27
23
  def each
28
24
  if @elements
29
25
  @elements.each { |e| yield(element_class.new(@container, :object, e)) }
26
+ @length
30
27
  else
31
28
  0.upto(@length - 1) { |i| yield iterator_object(i) }
32
29
  end
33
30
  end
34
31
 
35
32
  def [](n)
36
- @elements ? element_class.new(@container, :object, @elements[n - 1]) : iterator_object(n-1)
33
+ @elements ? element_class.new(@container, :object, @elements[n - 1]) : iterator_object(n - 1)
37
34
  end
38
35
 
39
36
  def to_s
@@ -44,7 +41,7 @@ module Celerity
44
41
 
45
42
  # this method creates an object of the correct type that the iterators use
46
43
  def iterator_object(i)
47
- element_class.new(@container, :index, i+1)
44
+ element_class.new(@container, :index, i + 1)
48
45
  end
49
46
 
50
47
  end # ElementCollections
@@ -5,6 +5,7 @@ module Celerity
5
5
  # everything in our 'query'.
6
6
  # Jari - 2008-05-11
7
7
  class ElementLocator
8
+ include Celerity::Exception
8
9
  attr_accessor :idents
9
10
 
10
11
 
@@ -7,17 +7,21 @@ module Celerity
7
7
  class Button < InputElement
8
8
  TAGS = [ Identifier.new('button'),
9
9
  Identifier.new('input', :type => %w(submit reset image button)) ]
10
+ # A little wierd attribute list due to button being both <button> and <input type="submit|reset|image|button" />
11
+ ATTRIBUTES = BASE_ATTRIBUTES | [:type, :disabled, :tabindex, :accesskey, :onfocus, :onblur] | [:src, :usemap, :ismap]
10
12
  DEFAULT_HOW = :value
11
13
 
12
14
  def locate
13
15
  # ugly..
14
- if (val = @conditions.delete(:value))
16
+ if (val = @conditions[:value])
15
17
  locator = ElementLocator.new(@container.object, self.class)
16
18
  button_ident = Identifier.new('button')
17
19
  button_ident.text = val
18
20
  input_ident = Identifier.new('input', :type => %w(submit reset image button), :value => [val])
19
21
  locator.idents = [button_ident, input_ident]
20
- @object = locator.find_by_conditions(@conditions)
22
+ conditions = @conditions.dup
23
+ conditions.delete(:value)
24
+ @object = locator.find_by_conditions(conditions)
21
25
  else
22
26
  super
23
27
  end
@@ -2,10 +2,10 @@ module Celerity
2
2
  # For fields that accept file uploads
3
3
  class FileField < InputElement
4
4
  TAGS = [ Identifier.new('input', :type => %w(file)) ]
5
+ DEFAULT_HOW = :name
5
6
 
6
7
  def set(value)
7
8
  assert_exists
8
- # TODO: trigger events?
9
9
  @object.setValueAttribute(value.to_s)
10
10
  end
11
11
  end
@@ -8,8 +8,7 @@ module Celerity
8
8
 
9
9
  def submit
10
10
  assert_exists
11
- raise NotImplementedError
12
- # waiting for HtmlUnit fix?
11
+ @container.update_page @object.submit(nil)
13
12
  end
14
13
 
15
14
  end
@@ -4,7 +4,6 @@ module Celerity
4
4
  attr_accessor :page
5
5
 
6
6
  TAGS = [Identifier.new('frame'), Identifier.new('iframe')]
7
-
8
7
  ATTRIBUTES = BASE_ATTRIBUTES | [:longdesc, :name, :src, :frameborder, :marginwidth, :marginheight, :noresize, :scrolling]
9
8
  DEFAULT_HOW = :name
10
9
 
@@ -14,8 +13,6 @@ module Celerity
14
13
  @inline_frame_object = @object.getEnclosedWindow.getFrameElement
15
14
  if (frame = @object.getEnclosedPage.getDocumentElement)
16
15
  @object = frame
17
- else
18
- @object = nil
19
16
  end
20
17
  end
21
18
  end
@@ -11,6 +11,7 @@ module Celerity
11
11
 
12
12
  TAGS = [ Identifier.new('img') ]
13
13
  ATTRIBUTES = BASE_ATTRIBUTES | [:src, :alt, :longdesc, :name, :height, :width, :usemap, :ismap, :align, :border, :hspace, :vspace]
14
+ DEFAULT_HOW = :src
14
15
 
15
16
  # this method returns the file created date of the image
16
17
  def file_created_date
@@ -18,7 +19,6 @@ module Celerity
18
19
  web_response = @object.getWebResponse(true)
19
20
  return Time.parse(web_response.getResponseHeaderValue("Last-Modified").to_s)
20
21
  end
21
- alias_method :fileCreatedDate, :file_created_date
22
22
 
23
23
  # this method returns the filesize of the image
24
24
  def file_size
@@ -26,7 +26,6 @@ module Celerity
26
26
  web_response = @object.getWebResponse(true)
27
27
  return web_response.getResponseBody().length
28
28
  end
29
- alias_method :fileSize, :file_size
30
29
 
31
30
  # returns the width in pixels of the image, as a string
32
31
  def width
@@ -49,8 +48,6 @@ module Celerity
49
48
  return false
50
49
  end
51
50
  end
52
- alias_method :hasLoaded?, :loaded?
53
- alias_method :has_loaded?, :loaded?
54
51
 
55
52
  def save(filename)
56
53
  assert_exists
@@ -3,6 +3,7 @@ module Celerity
3
3
  class Label < Element
4
4
  TAGS = [ Identifier.new('label') ]
5
5
  ATTRIBUTES = BASE_ATTRIBUTES | [:for, :accesskey, :onfocus, :onblur]
6
+ DEFAULT_HOW = :text
6
7
  end
7
8
 
8
9
  end
@@ -1,7 +1,9 @@
1
1
  module Celerity
2
2
  class Link < Element
3
+
3
4
  TAGS = [ Identifier.new('a') ]
4
5
  ATTRIBUTES = BASE_ATTRIBUTES | [:charset, :type, :name, :href, :hreflang, :target, :rel, :rev, :accesskey, :shape, :coords, :tabindex, :onfocus, :onblur]
6
+ DEFAULT_HOW = :href
5
7
 
6
8
  def click
7
9
  assert_exists
@@ -5,6 +5,7 @@ module Celerity
5
5
 
6
6
  TAGS = [ Identifier.new('option')]
7
7
  ATTRIBUTES = BASE_ATTRIBUTES | [:selected, :disabled, :label, :value]
8
+ DEFAULT_HOW = :text
8
9
 
9
10
  alias_method :select, :click
10
11
 
@@ -6,9 +6,10 @@ module Celerity
6
6
  # most of the methods available to this element are inherited from the Element class
7
7
  #
8
8
  class RadioCheckCommon < InputElement
9
+ DEFAULT_HOW = :name
10
+
9
11
  def initialize(container, type, *args)
10
12
  @type = type
11
-
12
13
  case args.size
13
14
  when 2
14
15
  super(container, args[0] => args[1])
@@ -23,10 +24,6 @@ module Celerity
23
24
  assert_exists
24
25
  @object.isChecked
25
26
  end
26
- alias_method :is_set?, :set?
27
- alias_method :isSet?, :set?
28
- alias_method :get_state, :set?
29
- alias_method :getState, :set?
30
27
  alias_method :checked?, :set?
31
28
 
32
29
  def clear
@@ -62,6 +59,7 @@ module Celerity
62
59
  assert_exists
63
60
  assert_enabled
64
61
  if (value && !set?) || (!value && set?)
62
+ Log.debug(@object.inspect)
65
63
  @container.update_page(@object.click)
66
64
  end
67
65
  end
@@ -6,24 +6,22 @@ module Celerity
6
6
  # Normally a user would not need to create this object as it is returned by the Watir::Container#select_list method
7
7
  class SelectList < InputElement
8
8
  TAGS = [ Identifier.new('select') ]
9
+ DEFAULT_HOW = :name
9
10
 
10
11
  def get_all_contents
11
12
  assert_exists
12
13
  @object.getOptions.map { |e| e.asText }
13
14
  end
14
- alias_method :getAllContents, :get_all_contents
15
15
 
16
16
  def get_selected_items
17
17
  assert_exists
18
18
  @object.getSelectedOptions.map { |e| e.asText }
19
19
  end
20
- alias_method :getSelectedItems, :get_selected_items
21
20
 
22
21
  def clear_selection
23
22
  # assert_exists called by SelectList#type here
24
23
  @object.getSelectedOptions.each { |e| e.setSelected(false) } unless type() == 'select-one'
25
24
  end
26
- alias_method :clearSelection, :clear_selection
27
25
 
28
26
  def select(value)
29
27
  assert_exists
@@ -32,7 +30,6 @@ module Celerity
32
30
  @container.update_page(option.click)
33
31
  end
34
32
  end
35
- alias_method :select_value, :select
36
33
  alias_method :set, :select
37
34
 
38
35
  def include?(value)
@@ -43,11 +40,11 @@ module Celerity
43
40
 
44
41
  def selected?(value)
45
42
  assert_exists
46
- # This should probably raise NoValueFoundException?
47
43
  raise UnknownObjectException, "unknown option with value #{value.inspect}" unless include?(value)
48
44
  !!@object.getOptions.find { |e| matches?(e.asText, value) && e.isSelected }
49
45
  end
50
46
 
47
+ # TODO: Move to watir_compatibility or delete it 2008-05-23 Alexander
51
48
  def type
52
49
  assert_exists
53
50
  'select-' + (@object.isAttributeDefined('multiple') ? 'multiple' : 'one')
@@ -59,10 +56,6 @@ module Celerity
59
56
  optn.getValueAttribute
60
57
  end
61
58
  end
62
-
63
- def option(attribute, value)
64
- assert_exists
65
- Option.new(self, attribute, value)
66
- end
59
+
67
60
  end
68
61
  end