webrat 0.4.4 → 0.4.5

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 (203) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +44 -8
  4. data/Rakefile +80 -66
  5. data/VERSION +1 -0
  6. data/lib/webrat.rb +7 -12
  7. data/lib/webrat/core/configuration.rb +7 -3
  8. data/lib/webrat/core/elements/area.rb +7 -7
  9. data/lib/webrat/core/elements/element.rb +11 -11
  10. data/lib/webrat/core/elements/field.rb +63 -55
  11. data/lib/webrat/core/elements/form.rb +17 -17
  12. data/lib/webrat/core/elements/label.rb +6 -6
  13. data/lib/webrat/core/elements/link.rb +13 -12
  14. data/lib/webrat/core/elements/select_option.rb +9 -9
  15. data/lib/webrat/core/locators.rb +2 -2
  16. data/lib/webrat/core/locators/area_locator.rb +10 -10
  17. data/lib/webrat/core/locators/button_locator.rb +13 -13
  18. data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
  19. data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
  20. data/lib/webrat/core/locators/field_locator.rb +7 -7
  21. data/lib/webrat/core/locators/field_named_locator.rb +10 -10
  22. data/lib/webrat/core/locators/form_locator.rb +6 -6
  23. data/lib/webrat/core/locators/label_locator.rb +9 -9
  24. data/lib/webrat/core/locators/link_locator.rb +21 -13
  25. data/lib/webrat/core/locators/locator.rb +5 -5
  26. data/lib/webrat/core/locators/select_option_locator.rb +11 -11
  27. data/lib/webrat/core/logging.rb +7 -4
  28. data/lib/webrat/core/matchers/have_content.rb +12 -12
  29. data/lib/webrat/core/matchers/have_selector.rb +9 -9
  30. data/lib/webrat/core/matchers/have_tag.rb +4 -4
  31. data/lib/webrat/core/matchers/have_xpath.rb +26 -26
  32. data/lib/webrat/core/methods.rb +13 -11
  33. data/lib/webrat/core/mime.rb +3 -3
  34. data/lib/webrat/core/save_and_open_page.rb +14 -16
  35. data/lib/webrat/core/scope.rb +53 -53
  36. data/lib/webrat/core/session.rb +23 -14
  37. data/lib/webrat/core/xml.rb +16 -16
  38. data/lib/webrat/core/xml/hpricot.rb +3 -3
  39. data/lib/webrat/core/xml/nokogiri.rb +11 -11
  40. data/lib/webrat/core/xml/rexml.rb +3 -3
  41. data/lib/webrat/core_extensions/blank.rb +1 -1
  42. data/lib/webrat/core_extensions/deprecate.rb +1 -1
  43. data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
  44. data/lib/webrat/core_extensions/meta_class.rb +1 -1
  45. data/lib/webrat/core_extensions/tcp_socket.rb +8 -8
  46. data/lib/webrat/mechanize.rb +9 -9
  47. data/lib/webrat/merb.rb +1 -1
  48. data/lib/webrat/merb_multipart_support.rb +27 -0
  49. data/lib/webrat/merb_session.rb +39 -24
  50. data/lib/webrat/rack_test.rb +32 -0
  51. data/lib/webrat/rails.rb +2 -2
  52. data/lib/webrat/rspec-rails.rb +3 -6
  53. data/lib/webrat/selenium.rb +2 -1
  54. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  55. data/lib/webrat/selenium/application_servers.rb +5 -0
  56. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  57. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  58. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  59. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  60. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  61. data/lib/webrat/selenium/location_strategy_javascript/button.js +14 -7
  62. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +4 -1
  63. data/lib/webrat/selenium/matchers.rb +1 -1
  64. data/lib/webrat/selenium/matchers/have_content.rb +4 -4
  65. data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
  66. data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
  67. data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
  68. data/lib/webrat/selenium/selenium_rc_server.rb +25 -19
  69. data/lib/webrat/selenium/selenium_session.rb +24 -17
  70. data/lib/webrat/selenium/silence_stream.rb +18 -0
  71. data/spec/fakes/test_session.rb +34 -0
  72. data/spec/integration/merb/.gitignore +21 -0
  73. data/spec/integration/merb/Rakefile +35 -0
  74. data/spec/integration/merb/app/controllers/application.rb +2 -0
  75. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  76. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  77. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  78. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  79. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  80. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  81. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  82. data/spec/integration/merb/config/environments/development.rb +15 -0
  83. data/spec/integration/merb/config/environments/rake.rb +11 -0
  84. data/spec/integration/merb/config/environments/test.rb +14 -0
  85. data/spec/integration/merb/config/init.rb +25 -0
  86. data/spec/integration/merb/config/rack.rb +11 -0
  87. data/spec/integration/merb/config/router.rb +34 -0
  88. data/spec/integration/merb/spec/spec.opts +1 -0
  89. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  90. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  91. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  92. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  93. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  94. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  95. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  96. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  97. data/spec/integration/rack/Rakefile +5 -0
  98. data/spec/integration/rack/rack_app.rb +16 -0
  99. data/spec/integration/rack/test/test_helper.rb +20 -0
  100. data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  101. data/spec/integration/rails/.gitignore +3 -0
  102. data/spec/integration/rails/Rakefile +30 -0
  103. data/spec/integration/rails/app/controllers/application.rb +15 -0
  104. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  105. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  106. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  107. data/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
  108. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  109. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  110. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  111. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  112. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  113. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  114. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  115. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  116. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  117. data/spec/integration/rails/config/boot.rb +109 -0
  118. data/spec/integration/rails/config/environment.rb +12 -0
  119. data/spec/integration/rails/config/environments/development.rb +17 -0
  120. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  121. data/spec/integration/rails/config/environments/test.rb +22 -0
  122. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  123. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  124. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  125. data/spec/integration/rails/config/locales/en.yml +5 -0
  126. data/spec/integration/rails/config/routes.rb +18 -0
  127. data/spec/integration/rails/public/404.html +30 -0
  128. data/spec/integration/rails/public/422.html +30 -0
  129. data/spec/integration/rails/public/500.html +33 -0
  130. data/spec/integration/rails/script/about +4 -0
  131. data/spec/integration/rails/script/console +3 -0
  132. data/spec/integration/rails/script/dbconsole +3 -0
  133. data/spec/integration/rails/script/destroy +3 -0
  134. data/spec/integration/rails/script/generate +3 -0
  135. data/spec/integration/rails/script/performance/benchmarker +3 -0
  136. data/spec/integration/rails/script/performance/profiler +3 -0
  137. data/spec/integration/rails/script/performance/request +3 -0
  138. data/spec/integration/rails/script/plugin +3 -0
  139. data/spec/integration/rails/script/process/inspector +3 -0
  140. data/spec/integration/rails/script/process/reaper +3 -0
  141. data/spec/integration/rails/script/process/spawner +3 -0
  142. data/spec/integration/rails/script/runner +3 -0
  143. data/spec/integration/rails/script/server +3 -0
  144. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  145. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  146. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  147. data/spec/integration/rails/test/integration/webrat_test.rb +97 -0
  148. data/spec/integration/rails/test/test_helper.rb +25 -0
  149. data/spec/integration/sinatra/Rakefile +5 -0
  150. data/spec/integration/sinatra/classic_app.rb +64 -0
  151. data/spec/integration/sinatra/modular_app.rb +16 -0
  152. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  153. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  154. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  155. data/spec/private/core/configuration_spec.rb +116 -0
  156. data/spec/private/core/field_spec.rb +85 -0
  157. data/spec/private/core/link_spec.rb +24 -0
  158. data/spec/private/core/logging_spec.rb +10 -0
  159. data/spec/private/core/session_spec.rb +195 -0
  160. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  161. data/spec/private/merb/attaches_file_spec.rb +93 -0
  162. data/spec/private/merb/merb_session_spec.rb +61 -0
  163. data/spec/private/nokogiri_spec.rb +77 -0
  164. data/spec/private/rails/attaches_file_spec.rb +81 -0
  165. data/spec/private/rails/rails_session_spec.rb +110 -0
  166. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  167. data/spec/public/basic_auth_spec.rb +24 -0
  168. data/spec/public/check_spec.rb +191 -0
  169. data/spec/public/choose_spec.rb +118 -0
  170. data/spec/public/click_area_spec.rb +106 -0
  171. data/spec/public/click_button_spec.rb +496 -0
  172. data/spec/public/click_link_spec.rb +511 -0
  173. data/spec/public/fill_in_spec.rb +209 -0
  174. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  175. data/spec/public/locators/field_labeled_spec.rb +172 -0
  176. data/spec/public/locators/field_with_id_spec.rb +16 -0
  177. data/spec/public/matchers/contain_spec.rb +114 -0
  178. data/spec/public/matchers/have_selector_spec.rb +142 -0
  179. data/spec/public/matchers/have_tag_spec.rb +39 -0
  180. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  181. data/spec/public/reload_spec.rb +10 -0
  182. data/spec/public/save_and_open_spec.rb +70 -0
  183. data/spec/public/select_date_spec.rb +112 -0
  184. data/spec/public/select_datetime_spec.rb +137 -0
  185. data/spec/public/select_spec.rb +249 -0
  186. data/spec/public/select_time_spec.rb +100 -0
  187. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  188. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  189. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  190. data/spec/public/set_hidden_field_spec.rb +5 -0
  191. data/spec/public/submit_form_spec.rb +5 -0
  192. data/spec/public/visit_spec.rb +58 -0
  193. data/spec/public/within_spec.rb +177 -0
  194. data/spec/rcov.opts +1 -0
  195. data/spec/spec.opts +2 -0
  196. data/spec/spec_helper.rb +50 -0
  197. data/vendor/selenium-server.jar +0 -0
  198. data/webrat.gemspec +340 -0
  199. metadata +248 -33
  200. data/lib/webrat/selenium/application_server.rb +0 -71
  201. data/lib/webrat/selenium/merb_application_server.rb +0 -48
  202. data/lib/webrat/selenium/rails_application_server.rb +0 -42
  203. data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
@@ -8,10 +8,10 @@ module Webrat
8
8
  # Raised when Webrat is asked to manipulate a disabled form field
9
9
  class DisabledFieldError < WebratError
10
10
  end
11
-
11
+
12
12
  class Field < Element #:nodoc:
13
13
  attr_reader :value
14
-
14
+
15
15
  def self.xpath_search
16
16
  [".//button", ".//input", ".//textarea", ".//select"]
17
17
  end
@@ -19,22 +19,22 @@ module Webrat
19
19
  def self.xpath_search_excluding_hidden
20
20
  [".//button", ".//input[ @type != 'hidden']", ".//textarea", ".//select"]
21
21
  end
22
-
22
+
23
23
  def self.field_classes
24
24
  @field_classes || []
25
25
  end
26
-
26
+
27
27
  def self.inherited(klass)
28
28
  @field_classes ||= []
29
29
  @field_classes << klass
30
30
  # raise args.inspect
31
31
  end
32
-
32
+
33
33
  def self.load(session, element)
34
34
  return nil if element.nil?
35
35
  session.elements[Webrat::XML.xpath_to(element)] ||= field_class(element).new(session, element)
36
36
  end
37
-
37
+
38
38
  def self.field_class(element)
39
39
  case element.name
40
40
  when "button" then ButtonField
@@ -55,7 +55,7 @@ module Webrat
55
55
  end
56
56
  end
57
57
  end
58
-
58
+
59
59
  def initialize(*args)
60
60
  super
61
61
  @value = default_value
@@ -65,7 +65,7 @@ module Webrat
65
65
  return nil if labels.empty?
66
66
  labels.first.text
67
67
  end
68
-
68
+
69
69
  def id
70
70
  Webrat::XML.attribute(@element, "id")
71
71
  end
@@ -73,35 +73,37 @@ module Webrat
73
73
  def disabled?
74
74
  @element.attributes.has_key?("disabled") && Webrat::XML.attribute(@element, "disabled") != 'false'
75
75
  end
76
-
76
+
77
77
  def raise_error_if_disabled
78
78
  return unless disabled?
79
79
  raise DisabledFieldError.new("Cannot interact with disabled form element (#{self})")
80
80
  end
81
-
81
+
82
82
  def to_param
83
83
  return nil if disabled?
84
-
84
+
85
85
  case Webrat.configuration.mode
86
86
  when :rails
87
87
  parse_rails_request_params("#{name}=#{escaped_value}")
88
88
  when :merb
89
89
  ::Merb::Parse.query("#{name}=#{escaped_value}")
90
+ when :mechanize
91
+ { name => value }
90
92
  else
91
93
  { name => escaped_value }
92
94
  end
93
95
  end
94
-
96
+
95
97
  def set(value)
96
98
  @value = value
97
99
  end
98
-
100
+
99
101
  def unset
100
102
  @value = default_value
101
103
  end
102
-
104
+
103
105
  protected
104
-
106
+
105
107
  def parse_rails_request_params(params)
106
108
  if defined?(ActionController::AbstractRequest)
107
109
  ActionController::AbstractRequest.parse_query_parameters(params)
@@ -113,38 +115,38 @@ module Webrat
113
115
  Rack::Utils.parse_nested_query(params)
114
116
  end
115
117
  end
116
-
118
+
117
119
  def form
118
120
  Form.load(@session, form_element)
119
121
  end
120
-
122
+
121
123
  def form_element
122
124
  parent = @element.parent
123
-
125
+
124
126
  while parent.respond_to?(:parent)
125
127
  return parent if parent.name == 'form'
126
128
  parent = parent.parent
127
129
  end
128
130
  end
129
-
131
+
130
132
  def name
131
133
  Webrat::XML.attribute(@element, "name")
132
134
  end
133
-
135
+
134
136
  def escaped_value
135
- CGI.escape(@value.to_s)
137
+ CGI.escape([*@value].first.to_s)
136
138
  end
137
-
139
+
138
140
  def labels
139
141
  @labels ||= label_elements.map do |element|
140
142
  Label.load(@session, element)
141
143
  end
142
144
  end
143
-
145
+
144
146
  def label_elements
145
147
  return @label_elements unless @label_elements.nil?
146
148
  @label_elements = []
147
-
149
+
148
150
  parent = @element.parent
149
151
  while parent.respond_to?(:parent)
150
152
  if parent.name == 'label'
@@ -153,18 +155,18 @@ module Webrat
153
155
  end
154
156
  parent = parent.parent
155
157
  end
156
-
158
+
157
159
  unless id.blank?
158
160
  @label_elements += Webrat::XML.xpath_search(form.element, ".//label[@for = '#{id}']")
159
161
  end
160
-
162
+
161
163
  @label_elements
162
164
  end
163
-
165
+
164
166
  def default_value
165
167
  Webrat::XML.attribute(@element, "value")
166
168
  end
167
-
169
+
168
170
  def replace_param_value(params, oval, nval)
169
171
  output = Hash.new
170
172
  params.each do |key, value|
@@ -181,13 +183,13 @@ module Webrat
181
183
  output
182
184
  end
183
185
  end
184
-
186
+
185
187
  class ButtonField < Field #:nodoc:
186
188
 
187
189
  def self.xpath_search
188
190
  [".//button", ".//input[@type = 'submit']", ".//input[@type = 'button']", ".//input[@type = 'image']"]
189
191
  end
190
-
192
+
191
193
  def to_param
192
194
  return nil if @value.nil?
193
195
  super
@@ -210,7 +212,7 @@ module Webrat
210
212
  def self.xpath_search
211
213
  ".//input[@type = 'hidden']"
212
214
  end
213
-
215
+
214
216
  def to_param
215
217
  if collection_name?
216
218
  super
@@ -238,7 +240,7 @@ module Webrat
238
240
  def self.xpath_search
239
241
  ".//input[@type = 'checkbox']"
240
242
  end
241
-
243
+
242
244
  def to_param
243
245
  return nil if @value.nil?
244
246
  super
@@ -248,7 +250,7 @@ module Webrat
248
250
  raise_error_if_disabled
249
251
  set(Webrat::XML.attribute(@element, "value") || "on")
250
252
  end
251
-
253
+
252
254
  def checked?
253
255
  Webrat::XML.attribute(@element, "checked") == "checked"
254
256
  end
@@ -271,11 +273,11 @@ module Webrat
271
273
  end
272
274
 
273
275
  class PasswordField < Field #:nodoc:
274
-
276
+
275
277
  def self.xpath_search
276
278
  ".//input[@type = 'password']"
277
279
  end
278
-
280
+
279
281
  end
280
282
 
281
283
  class RadioField < Field #:nodoc:
@@ -283,31 +285,31 @@ module Webrat
283
285
  def self.xpath_search
284
286
  ".//input[@type = 'radio']"
285
287
  end
286
-
288
+
287
289
  def to_param
288
290
  return nil if @value.nil?
289
291
  super
290
292
  end
291
-
293
+
292
294
  def choose
293
295
  raise_error_if_disabled
294
296
  other_options.each do |option|
295
297
  option.set(nil)
296
298
  end
297
-
299
+
298
300
  set(Webrat::XML.attribute(@element, "value") || "on")
299
301
  end
300
-
302
+
301
303
  def checked?
302
304
  Webrat::XML.attribute(@element, "checked") == "checked"
303
305
  end
304
-
306
+
305
307
  protected
306
308
 
307
309
  def other_options
308
310
  form.fields.select { |f| f.name == name }
309
311
  end
310
-
312
+
311
313
  def default_value
312
314
  if Webrat::XML.attribute(@element, "checked") == "checked"
313
315
  Webrat::XML.attribute(@element, "value") || "on"
@@ -323,7 +325,7 @@ module Webrat
323
325
  def self.xpath_search
324
326
  ".//textarea"
325
327
  end
326
-
328
+
327
329
  protected
328
330
 
329
331
  def default_value
@@ -331,13 +333,13 @@ module Webrat
331
333
  end
332
334
 
333
335
  end
334
-
336
+
335
337
  class FileField < Field #:nodoc:
336
-
338
+
337
339
  def self.xpath_search
338
340
  ".//input[@type = 'file']"
339
341
  end
340
-
342
+
341
343
  attr_accessor :content_type
342
344
 
343
345
  def set(value, content_type = nil)
@@ -352,14 +354,20 @@ module Webrat
352
354
  replace_param_value(super, @value, test_uploaded_file)
353
355
  end
354
356
  end
355
-
357
+
356
358
  protected
357
-
359
+
358
360
  def test_uploaded_file
359
- if content_type
360
- ActionController::TestUploadedFile.new(@value, content_type)
361
- else
362
- ActionController::TestUploadedFile.new(@value)
361
+ case Webrat.configuration.mode
362
+ when :rails
363
+ if content_type
364
+ ActionController::TestUploadedFile.new(@value, content_type)
365
+ else
366
+ ActionController::TestUploadedFile.new(@value)
367
+ end
368
+ when :merb
369
+ # TODO: support content_type
370
+ File.new(@value)
363
371
  end
364
372
  end
365
373
 
@@ -386,17 +394,17 @@ module Webrat
386
394
  def options
387
395
  @options ||= SelectOption.load_all(@session, @element)
388
396
  end
389
-
397
+
390
398
  protected
391
399
 
392
400
  def default_value
393
401
  selected_options = Webrat::XML.xpath_search(@element, ".//option[@selected = 'selected']")
394
- selected_options = Webrat::XML.xpath_search(@element, ".//option[position() = 1]") if selected_options.empty?
395
-
402
+ selected_options = Webrat::XML.xpath_search(@element, ".//option[position() = 1]") if selected_options.empty?
403
+
396
404
  selected_options.map do |option|
397
405
  return "" if option.nil?
398
406
  Webrat::XML.attribute(option, "value") || Webrat::XML.inner_html(option)
399
- end
407
+ end.uniq
400
408
  end
401
409
 
402
410
  end
@@ -7,7 +7,7 @@ require "webrat/core/locators/field_named_locator"
7
7
  module Webrat
8
8
  class Form < Element #:nodoc:
9
9
  attr_reader :element
10
-
10
+
11
11
  def self.xpath_search
12
12
  ".//form"
13
13
  end
@@ -15,21 +15,21 @@ module Webrat
15
15
  def fields
16
16
  @fields ||= Field.load_all(@session, @element)
17
17
  end
18
-
18
+
19
19
  def submit
20
20
  @session.request_page(form_action, form_method, params)
21
21
  end
22
-
22
+
23
23
  def field_named(name, *field_types)
24
24
  Webrat::Locators::FieldNamedLocator.new(@session, dom, name, *field_types).locate
25
25
  end
26
-
26
+
27
27
  protected
28
-
28
+
29
29
  def dom
30
30
  Webrat::XML.xpath_at(@session.dom, path)
31
31
  end
32
-
32
+
33
33
  def fields_by_type(field_types)
34
34
  if field_types.any?
35
35
  fields.select { |f| field_types.include?(f.class) }
@@ -37,26 +37,26 @@ module Webrat
37
37
  fields
38
38
  end
39
39
  end
40
-
40
+
41
41
  def params
42
42
  all_params = {}
43
-
43
+
44
44
  fields.each do |field|
45
45
  next if field.to_param.nil?
46
46
  merge(all_params, field.to_param)
47
47
  end
48
-
48
+
49
49
  all_params
50
50
  end
51
-
51
+
52
52
  def form_method
53
53
  Webrat::XML.attribute(@element, "method").blank? ? :get : Webrat::XML.attribute(@element, "method").downcase
54
54
  end
55
-
55
+
56
56
  def form_action
57
57
  Webrat::XML.attribute(@element, "action").blank? ? @session.current_url : Webrat::XML.attribute(@element, "action")
58
58
  end
59
-
59
+
60
60
  def merge(all_params, new_param)
61
61
  new_param.each do |key, value|
62
62
  case all_params[key]
@@ -69,7 +69,7 @@ module Webrat
69
69
  end
70
70
  end
71
71
  end
72
-
72
+
73
73
  def merge_hash_values(a, b) # :nodoc:
74
74
  a.keys.each do |k|
75
75
  if b.has_key?(k)
@@ -85,19 +85,19 @@ module Webrat
85
85
  end
86
86
  a.merge!(b)
87
87
  end
88
-
88
+
89
89
  def hash_classes
90
90
  klasses = [Hash]
91
-
91
+
92
92
  case Webrat.configuration.mode
93
93
  when :rails
94
94
  klasses << HashWithIndifferentAccess
95
95
  when :merb
96
96
  klasses << Mash
97
97
  end
98
-
98
+
99
99
  klasses
100
100
  end
101
-
101
+
102
102
  end
103
103
  end
@@ -2,9 +2,9 @@ require "webrat/core/elements/element"
2
2
 
3
3
  module Webrat
4
4
  class Label < Element #:nodoc:
5
-
5
+
6
6
  attr_reader :element
7
-
7
+
8
8
  def self.xpath_search
9
9
  ".//label"
10
10
  end
@@ -12,13 +12,13 @@ module Webrat
12
12
  def for_id
13
13
  Webrat::XML.attribute(@element, "for")
14
14
  end
15
-
15
+
16
16
  def field
17
17
  Field.load(@session, field_element)
18
18
  end
19
-
19
+
20
20
  protected
21
-
21
+
22
22
  def field_element
23
23
  if for_id.blank?
24
24
  Webrat::XML.xpath_at(@element, *Field.xpath_search_excluding_hidden)
@@ -26,6 +26,6 @@ module Webrat
26
26
  Webrat::XML.css_search(@session.current_dom, "#" + for_id).first
27
27
  end
28
28
  end
29
-
29
+
30
30
  end
31
31
  end