davidtrogers-webrat 0.4.4.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. data/.gitignore +3 -1
  2. data/Gemfile +19 -0
  3. data/History.txt +99 -9
  4. data/Rakefile +141 -207
  5. data/Thorfile +118 -0
  6. data/lib/webrat.rb +10 -23
  7. data/lib/webrat/{mechanize.rb → adapters/mechanize.rb} +6 -2
  8. data/lib/webrat/adapters/merb.rb +11 -0
  9. data/lib/webrat/adapters/rack.rb +25 -0
  10. data/lib/webrat/{rails.rb → adapters/rails.rb} +5 -37
  11. data/lib/webrat/adapters/sinatra.rb +9 -0
  12. data/lib/webrat/core.rb +0 -1
  13. data/lib/webrat/core/configuration.rb +22 -18
  14. data/lib/webrat/core/elements/area.rb +2 -2
  15. data/lib/webrat/core/elements/element.rb +3 -3
  16. data/lib/webrat/core/elements/field.rb +113 -31
  17. data/lib/webrat/core/elements/form.rb +4 -4
  18. data/lib/webrat/core/elements/label.rb +4 -4
  19. data/lib/webrat/core/elements/link.rb +8 -7
  20. data/lib/webrat/core/elements/select_option.rb +15 -2
  21. data/lib/webrat/core/locators.rb +1 -1
  22. data/lib/webrat/core/locators/area_locator.rb +3 -3
  23. data/lib/webrat/core/locators/button_locator.rb +6 -6
  24. data/lib/webrat/core/locators/field_by_id_locator.rb +3 -3
  25. data/lib/webrat/core/locators/field_labeled_locator.rb +2 -2
  26. data/lib/webrat/core/locators/field_named_locator.rb +3 -3
  27. data/lib/webrat/core/locators/form_locator.rb +1 -1
  28. data/lib/webrat/core/locators/label_locator.rb +2 -2
  29. data/lib/webrat/core/locators/link_locator.rb +16 -8
  30. data/lib/webrat/core/locators/select_option_locator.rb +5 -5
  31. data/lib/webrat/core/logging.rb +4 -5
  32. data/lib/webrat/core/matchers/have_content.rb +3 -8
  33. data/lib/webrat/core/matchers/have_xpath.rb +3 -28
  34. data/lib/webrat/core/methods.rb +5 -4
  35. data/lib/webrat/core/mime.rb +11 -22
  36. data/lib/webrat/core/save_and_open_page.rb +7 -29
  37. data/lib/webrat/core/scope.rb +17 -2
  38. data/lib/webrat/core/session.rb +31 -19
  39. data/lib/webrat/core/xml.rb +41 -84
  40. data/lib/webrat/integrations/merb.rb +10 -0
  41. data/lib/webrat/integrations/rails.rb +25 -0
  42. data/lib/webrat/integrations/rspec-rails.rb +11 -0
  43. data/lib/webrat/integrations/selenium.rb +11 -0
  44. data/lib/webrat/rspec-rails.rb +2 -13
  45. data/lib/webrat/selenium.rb +0 -11
  46. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  47. data/lib/webrat/selenium/application_servers.rb +5 -0
  48. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  49. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  50. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  51. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  52. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  53. data/lib/webrat/selenium/location_strategy_javascript/label.js +30 -3
  54. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +1 -0
  55. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +24 -4
  56. data/lib/webrat/selenium/matchers/have_content.rb +22 -10
  57. data/lib/webrat/selenium/matchers/have_selector.rb +8 -0
  58. data/lib/webrat/selenium/matchers/have_xpath.rb +8 -0
  59. data/lib/webrat/selenium/selenium_rc_server.rb +8 -6
  60. data/lib/webrat/selenium/selenium_session.rb +43 -14
  61. data/lib/webrat/selenium/silence_stream.rb +2 -2
  62. data/spec/fakes/{test_session.rb → test_adapter.rb} +4 -5
  63. data/spec/integration/mechanize/Rakefile +7 -0
  64. data/spec/integration/mechanize/config.ru +2 -0
  65. data/spec/integration/mechanize/sample_app.rb +20 -0
  66. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  67. data/spec/integration/mechanize/spec/spec_helper.rb +29 -0
  68. data/spec/integration/merb/app/controllers/testing.rb +9 -0
  69. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  70. data/spec/integration/merb/config/router.rb +1 -0
  71. data/spec/integration/merb/spec/spec_helper.rb +2 -0
  72. data/spec/integration/merb/spec/webrat_spec.rb +7 -0
  73. data/spec/integration/rack/app.rb +89 -0
  74. data/spec/integration/rack/test/helper.rb +21 -0
  75. data/spec/integration/rack/test/webrat_rack_test.rb +57 -51
  76. data/spec/integration/rails/app/controllers/{application.rb → application_controller.rb} +0 -0
  77. data/spec/integration/rails/app/controllers/webrat_controller.rb +16 -9
  78. data/spec/integration/rails/app/views/buttons/show.html.erb +0 -2
  79. data/spec/integration/rails/app/views/links/show.html.erb +2 -1
  80. data/spec/integration/rails/app/views/webrat/buttons.html.erb +0 -2
  81. data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
  82. data/spec/integration/rails/config/environment.rb +1 -1
  83. data/spec/integration/rails/config/routes.rb +2 -0
  84. data/spec/integration/rails/test/integration/button_click_test.rb +12 -26
  85. data/spec/integration/rails/test/integration/fill_in_test.rb +1 -1
  86. data/spec/integration/rails/test/integration/link_click_test.rb +8 -2
  87. data/spec/integration/rails/test/integration/webrat_test.rb +53 -5
  88. data/spec/integration/rails/test/test_helper.rb +7 -5
  89. data/spec/integration/sinatra/test/test_helper.rb +3 -2
  90. data/spec/private/core/configuration_spec.rb +8 -27
  91. data/spec/private/core/field_spec.rb +14 -16
  92. data/spec/private/core/link_spec.rb +1 -1
  93. data/spec/private/core/session_spec.rb +23 -26
  94. data/spec/private/mechanize/{mechanize_session_spec.rb → mechanize_adapter_spec.rb} +4 -12
  95. data/spec/private/nokogiri_spec.rb +2 -2
  96. data/spec/private/rails/{rails_session_spec.rb → rails_adapter_spec.rb} +11 -42
  97. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  98. data/spec/public/basic_auth_spec.rb +13 -2
  99. data/spec/public/click_button_spec.rb +10 -12
  100. data/spec/public/click_link_spec.rb +21 -0
  101. data/spec/public/fill_in_spec.rb +15 -0
  102. data/spec/public/matchers/contain_spec.rb +12 -19
  103. data/spec/public/matchers/have_selector_spec.rb +6 -2
  104. data/spec/public/matchers/have_xpath_spec.rb +3 -3
  105. data/spec/public/save_and_open_spec.rb +15 -17
  106. data/spec/public/select_spec.rb +232 -26
  107. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  108. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  109. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  110. data/spec/spec_helper.rb +5 -1
  111. data/vendor/selenium-server.jar +0 -0
  112. metadata +119 -69
  113. data/.dotest/0001 +0 -34
  114. data/.dotest/0002 +0 -34
  115. data/.dotest/binary +0 -1
  116. data/.dotest/final-commit +0 -1
  117. data/.dotest/head-name +0 -1
  118. data/.dotest/info +0 -5
  119. data/.dotest/keep +0 -1
  120. data/.dotest/last +0 -1
  121. data/.dotest/msg +0 -0
  122. data/.dotest/msg-clean +0 -0
  123. data/.dotest/next +0 -1
  124. data/.dotest/onto +0 -1
  125. data/.dotest/orig-head +0 -1
  126. data/.dotest/patch +0 -29
  127. data/.dotest/sign +0 -1
  128. data/.dotest/utf8 +0 -1
  129. data/.dotest/whitespace +0 -1
  130. data/VERSION +0 -1
  131. data/lib/webrat/core/xml/hpricot.rb +0 -19
  132. data/lib/webrat/core/xml/nokogiri.rb +0 -76
  133. data/lib/webrat/core/xml/rexml.rb +0 -24
  134. data/lib/webrat/merb_session.rb +0 -65
  135. data/lib/webrat/rack.rb +0 -24
  136. data/lib/webrat/rack_test.rb +0 -32
  137. data/lib/webrat/selenium/application_server.rb +0 -73
  138. data/lib/webrat/selenium/merb_application_server.rb +0 -48
  139. data/lib/webrat/selenium/rails_application_server.rb +0 -42
  140. data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
  141. data/lib/webrat/sinatra.rb +0 -44
  142. data/spec/integration/rack/rack_app.rb +0 -16
  143. data/spec/integration/rack/test/test_helper.rb +0 -20
  144. data/spec/private/core/logging_spec.rb +0 -10
  145. data/spec/private/merb/merb_session_spec.rb +0 -42
@@ -32,16 +32,21 @@ module Webrat
32
32
 
33
33
  def self.load(session, element)
34
34
  return nil if element.nil?
35
- session.elements[Webrat::XML.xpath_to(element)] ||= field_class(element).new(session, element)
35
+ session.elements[element.path] ||= 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
41
- when "select" then SelectField
41
+ when "select"
42
+ if element.attributes["multiple"].nil?
43
+ SelectField
44
+ else
45
+ MultipleSelectField
46
+ end
42
47
  when "textarea" then TextareaField
43
48
  else
44
- case Webrat::XML.attribute(element, "type")
49
+ case element["type"]
45
50
  when "checkbox" then CheckboxField
46
51
  when "hidden" then HiddenField
47
52
  when "radio" then RadioField
@@ -67,11 +72,11 @@ module Webrat
67
72
  end
68
73
 
69
74
  def id
70
- Webrat::XML.attribute(@element, "id")
75
+ @element["id"]
71
76
  end
72
77
 
73
78
  def disabled?
74
- @element.attributes.has_key?("disabled") && Webrat::XML.attribute(@element, "disabled") != 'false'
79
+ @element.attributes.has_key?("disabled") && @element["disabled"] != 'false'
75
80
  end
76
81
 
77
82
  def raise_error_if_disabled
@@ -82,16 +87,16 @@ module Webrat
82
87
  def to_param
83
88
  return nil if disabled?
84
89
 
85
- case Webrat.configuration.mode
90
+ params = case Webrat.configuration.mode
86
91
  when :rails
87
92
  parse_rails_request_params("#{name}=#{escaped_value}")
88
93
  when :merb
89
94
  ::Merb::Parse.query("#{name}=#{escaped_value}")
90
- when :mechanize
91
- { name => value }
92
95
  else
93
- { name => escaped_value }
96
+ { name => [*@value].first.to_s }
94
97
  end
98
+
99
+ unescape_params(params)
95
100
  end
96
101
 
97
102
  def set(value)
@@ -130,13 +135,28 @@ module Webrat
130
135
  end
131
136
 
132
137
  def name
133
- Webrat::XML.attribute(@element, "name")
138
+ @element["name"]
134
139
  end
135
140
 
136
141
  def escaped_value
137
142
  CGI.escape(@value.to_s)
138
143
  end
139
144
 
145
+ # Because we have to escape it before sending it to the above case statement,
146
+ # we have to make sure we unescape each value when it gets back so assertions
147
+ # involving characters like <, >, and & work as expected
148
+ def unescape_params(params)
149
+ case params.class.name
150
+ when 'Hash', 'Mash'
151
+ params.each { |key,value| params[key] = unescape_params(value) }
152
+ params
153
+ when 'Array'
154
+ params.collect { |value| unescape_params(value) }
155
+ else
156
+ CGI.unescapeHTML(params)
157
+ end
158
+ end
159
+
140
160
  def labels
141
161
  @labels ||= label_elements.map do |element|
142
162
  Label.load(@session, element)
@@ -157,14 +177,14 @@ module Webrat
157
177
  end
158
178
 
159
179
  unless id.blank?
160
- @label_elements += Webrat::XML.xpath_search(form.element, ".//label[@for = '#{id}']")
180
+ @label_elements += form.element.xpath(".//label[@for = '#{id}']")
161
181
  end
162
182
 
163
183
  @label_elements
164
184
  end
165
185
 
166
186
  def default_value
167
- Webrat::XML.attribute(@element, "value")
187
+ @element["value"]
168
188
  end
169
189
 
170
190
  def replace_param_value(params, oval, nval)
@@ -201,7 +221,7 @@ module Webrat
201
221
 
202
222
  def click
203
223
  raise_error_if_disabled
204
- set(Webrat::XML.attribute(@element, "value")) unless Webrat::XML.attribute(@element, "name").blank?
224
+ set(@element["value"]) unless @element["name"].blank?
205
225
  form.submit
206
226
  end
207
227
 
@@ -248,11 +268,11 @@ module Webrat
248
268
 
249
269
  def check
250
270
  raise_error_if_disabled
251
- set(Webrat::XML.attribute(@element, "value") || "on")
271
+ set(@element["value"] || "on")
252
272
  end
253
273
 
254
274
  def checked?
255
- Webrat::XML.attribute(@element, "checked") == "checked"
275
+ @element["checked"] == "checked"
256
276
  end
257
277
 
258
278
  def uncheck
@@ -263,8 +283,8 @@ module Webrat
263
283
  protected
264
284
 
265
285
  def default_value
266
- if Webrat::XML.attribute(@element, "checked") == "checked"
267
- Webrat::XML.attribute(@element, "value") || "on"
286
+ if @element["checked"] == "checked"
287
+ @element["value"] || "on"
268
288
  else
269
289
  nil
270
290
  end
@@ -297,11 +317,11 @@ module Webrat
297
317
  option.set(nil)
298
318
  end
299
319
 
300
- set(Webrat::XML.attribute(@element, "value") || "on")
320
+ set(@element["value"] || "on")
301
321
  end
302
322
 
303
323
  def checked?
304
- Webrat::XML.attribute(@element, "checked") == "checked"
324
+ @element["checked"] == "checked"
305
325
  end
306
326
 
307
327
  protected
@@ -311,8 +331,8 @@ module Webrat
311
331
  end
312
332
 
313
333
  def default_value
314
- if Webrat::XML.attribute(@element, "checked") == "checked"
315
- Webrat::XML.attribute(@element, "value") || "on"
334
+ if @element["checked"] == "checked"
335
+ @element["value"] || "on"
316
336
  else
317
337
  nil
318
338
  end
@@ -329,7 +349,7 @@ module Webrat
329
349
  protected
330
350
 
331
351
  def default_value
332
- Webrat::XML.inner_html(@element)
352
+ @element.inner_html
333
353
  end
334
354
 
335
355
  end
@@ -358,10 +378,15 @@ module Webrat
358
378
  protected
359
379
 
360
380
  def test_uploaded_file
361
- if content_type
362
- ActionController::TestUploadedFile.new(@value, content_type)
363
- else
364
- ActionController::TestUploadedFile.new(@value)
381
+ case Webrat.configuration.mode
382
+ when :rails
383
+ if content_type
384
+ ActionController::TestUploadedFile.new(@value, content_type)
385
+ else
386
+ ActionController::TestUploadedFile.new(@value)
387
+ end
388
+ when :rack, :merb
389
+ Rack::Test::UploadedFile.new(@value, content_type)
365
390
  end
366
391
  end
367
392
 
@@ -375,31 +400,88 @@ module Webrat
375
400
 
376
401
  class ResetField < Field #:nodoc:
377
402
  def self.xpath_search
378
- ".//input[@type = 'reset']"
403
+ [".//input[@type = 'reset']"]
379
404
  end
380
405
  end
381
406
 
382
407
  class SelectField < Field #:nodoc:
383
408
 
384
409
  def self.xpath_search
385
- ".//select"
410
+ [".//select[not(@multiple)]"]
386
411
  end
387
412
 
388
413
  def options
389
414
  @options ||= SelectOption.load_all(@session, @element)
390
415
  end
391
416
 
417
+ def unset(value)
418
+ @value = nil
419
+ end
420
+
392
421
  protected
393
422
 
394
423
  def default_value
395
- selected_options = Webrat::XML.xpath_search(@element, ".//option[@selected = 'selected']")
396
- selected_options = Webrat::XML.xpath_search(@element, ".//option[position() = 1]") if selected_options.empty?
424
+ selected_options = @element.xpath(".//option[@selected = 'selected']")
425
+ selected_options = @element.xpath(".//option[position() = 1]") if selected_options.empty?
397
426
 
398
427
  selected_options.map do |option|
399
428
  return "" if option.nil?
400
- Webrat::XML.attribute(option, "value") || Webrat::XML.inner_html(option)
429
+ option["value"] || option.inner_html
430
+ end.uniq.first
431
+ end
432
+
433
+ end
434
+
435
+ class MultipleSelectField < Field #:nodoc:
436
+
437
+ def self.xpath_search
438
+ [".//select[@multiple='multiple']"]
439
+ end
440
+
441
+ def options
442
+ @options ||= SelectOption.load_all(@session, @element)
443
+ end
444
+
445
+ def set(value)
446
+ @value << value
447
+ end
448
+
449
+ def unset(value)
450
+ @value.delete(value)
451
+ end
452
+
453
+ # We have to overide how the uri string is formed when dealing with multiples
454
+ # Where normally a select field might produce name=value with a multiple,
455
+ # we need to form something like name[]=value1&name[]=value2
456
+ def to_param
457
+ return nil if disabled?
458
+
459
+ uri_string = @value.collect {|value| "#{name}=#{CGI.escape(value)}"}.join("&")
460
+ params = case Webrat.configuration.mode
461
+ when :rails
462
+ parse_rails_request_params(uri_string)
463
+ when :merb
464
+ ::Merb::Parse.query(uri_string)
465
+ else
466
+ { name => @value }
467
+ end
468
+
469
+ unescape_params(params)
470
+ end
471
+
472
+ protected
473
+
474
+ # Overwrite SelectField definition because we don't want to select the first option
475
+ # (mutliples don't select the first option unlike their non multiple versions)
476
+ def default_value
477
+ selected_options = @element.xpath(".//option[@selected = 'selected']")
478
+
479
+ selected_options.map do |option|
480
+ return "" if option.nil?
481
+ option["value"] || option.inner_html
401
482
  end.uniq
402
483
  end
403
484
 
404
485
  end
486
+
405
487
  end
@@ -9,7 +9,7 @@ module Webrat
9
9
  attr_reader :element
10
10
 
11
11
  def self.xpath_search
12
- ".//form"
12
+ [".//form"]
13
13
  end
14
14
 
15
15
  def fields
@@ -27,7 +27,7 @@ module Webrat
27
27
  protected
28
28
 
29
29
  def dom
30
- Webrat::XML.xpath_at(@session.dom, path)
30
+ @session.dom.xpath(path).first
31
31
  end
32
32
 
33
33
  def fields_by_type(field_types)
@@ -50,11 +50,11 @@ module Webrat
50
50
  end
51
51
 
52
52
  def form_method
53
- Webrat::XML.attribute(@element, "method").blank? ? :get : Webrat::XML.attribute(@element, "method").downcase
53
+ @element["method"].blank? ? :get : @element["method"].downcase
54
54
  end
55
55
 
56
56
  def form_action
57
- Webrat::XML.attribute(@element, "action").blank? ? @session.current_url : Webrat::XML.attribute(@element, "action")
57
+ @element["action"].blank? ? @session.current_url : @element["action"]
58
58
  end
59
59
 
60
60
  def merge(all_params, new_param)
@@ -6,11 +6,11 @@ module Webrat
6
6
  attr_reader :element
7
7
 
8
8
  def self.xpath_search
9
- ".//label"
9
+ [".//label"]
10
10
  end
11
11
 
12
12
  def for_id
13
- Webrat::XML.attribute(@element, "for")
13
+ @element["for"]
14
14
  end
15
15
 
16
16
  def field
@@ -21,9 +21,9 @@ module Webrat
21
21
 
22
22
  def field_element
23
23
  if for_id.blank?
24
- Webrat::XML.xpath_at(@element, *Field.xpath_search_excluding_hidden)
24
+ @element.xpath(*Field.xpath_search_excluding_hidden).first
25
25
  else
26
- Webrat::XML.css_search(@session.current_dom, "#" + for_id).first
26
+ @session.current_dom.css("#" + for_id).first
27
27
  end
28
28
  end
29
29
 
@@ -1,12 +1,13 @@
1
- require "webrat/core_extensions/blank"
1
+ require "English"
2
2
 
3
+ require "webrat/core_extensions/blank"
3
4
  require "webrat/core/elements/element"
4
5
 
5
6
  module Webrat
6
7
  class Link < Element #:nodoc:
7
8
 
8
9
  def self.xpath_search
9
- ".//a[@href]"
10
+ [".//a[@href]"]
10
11
  end
11
12
 
12
13
  def click(options = {})
@@ -25,7 +26,7 @@ module Webrat
25
26
  protected
26
27
 
27
28
  def id
28
- Webrat::XML.attribute(@element, "id")
29
+ @element["id"]
29
30
  end
30
31
 
31
32
  def data
@@ -33,11 +34,11 @@ module Webrat
33
34
  end
34
35
 
35
36
  def title
36
- Webrat::XML.attribute(@element, "title")
37
+ @element["title"]
37
38
  end
38
39
 
39
40
  def href
40
- Webrat::XML.attribute(@element, "href")
41
+ @element["href"]
41
42
  end
42
43
 
43
44
  def absolute_href
@@ -52,12 +53,12 @@ module Webrat
52
53
 
53
54
  def authenticity_token
54
55
  return unless onclick && onclick.include?("s.setAttribute('name', 'authenticity_token');") &&
55
- onclick =~ /s\.setAttribute\('value', '([a-f0-9]{40})'\);/
56
+ ( onclick =~ /s\.setAttribute\('value', '([a-f0-9]{40})'\);/ || onclick =~ /s\.setAttribute\('value', '(.{44})'\);/ )
56
57
  $LAST_MATCH_INFO.captures.first
57
58
  end
58
59
 
59
60
  def onclick
60
- Webrat::XML.attribute(@element, "onclick")
61
+ @element["onclick"]
61
62
  end
62
63
 
63
64
  def http_method
@@ -4,7 +4,7 @@ module Webrat
4
4
  class SelectOption < Element #:nodoc:
5
5
 
6
6
  def self.xpath_search
7
- ".//option"
7
+ [".//option"]
8
8
  end
9
9
 
10
10
  def choose
@@ -12,6 +12,15 @@ module Webrat
12
12
  select.set(value)
13
13
  end
14
14
 
15
+ def unchoose
16
+ select.raise_error_if_disabled
17
+ select.unset(value)
18
+ end
19
+
20
+ def inner_text
21
+ @element.inner_text
22
+ end
23
+
15
24
  protected
16
25
 
17
26
  def select
@@ -28,7 +37,11 @@ module Webrat
28
37
  end
29
38
 
30
39
  def value
31
- Webrat::XML.attribute(@element, "value") || Webrat::XML.inner_html(@element)
40
+ @element["value"] || @element.inner_html
41
+ end
42
+
43
+ def label
44
+ @element.inner_html
32
45
  end
33
46
 
34
47
  end
@@ -13,7 +13,7 @@ module Webrat
13
13
  module Locators
14
14
 
15
15
  def field_by_xpath(xpath)
16
- Field.load(@session, Webrat::XML.xpath_at(dom, xpath))
16
+ Field.load(@session, dom.xpath(xpath).first)
17
17
  end
18
18
 
19
19
  end
@@ -11,8 +11,8 @@ module Webrat
11
11
 
12
12
  def area_element
13
13
  area_elements.detect do |area_element|
14
- Webrat::XML.attribute(area_element, "title") =~ matcher ||
15
- Webrat::XML.attribute(area_element, "id") =~ matcher
14
+ area_element["title"] =~ matcher ||
15
+ area_element["id"] =~ matcher
16
16
  end
17
17
  end
18
18
 
@@ -21,7 +21,7 @@ module Webrat
21
21
  end
22
22
 
23
23
  def area_elements
24
- Webrat::XML.xpath_search(@dom, Area.xpath_search)
24
+ @dom.xpath(*Area.xpath_search)
25
25
  end
26
26
 
27
27
  def error_message