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.
- data/.gitignore +3 -1
- data/Gemfile +19 -0
- data/History.txt +99 -9
- data/Rakefile +141 -207
- data/Thorfile +118 -0
- data/lib/webrat.rb +10 -23
- data/lib/webrat/{mechanize.rb → adapters/mechanize.rb} +6 -2
- data/lib/webrat/adapters/merb.rb +11 -0
- data/lib/webrat/adapters/rack.rb +25 -0
- data/lib/webrat/{rails.rb → adapters/rails.rb} +5 -37
- data/lib/webrat/adapters/sinatra.rb +9 -0
- data/lib/webrat/core.rb +0 -1
- data/lib/webrat/core/configuration.rb +22 -18
- data/lib/webrat/core/elements/area.rb +2 -2
- data/lib/webrat/core/elements/element.rb +3 -3
- data/lib/webrat/core/elements/field.rb +113 -31
- data/lib/webrat/core/elements/form.rb +4 -4
- data/lib/webrat/core/elements/label.rb +4 -4
- data/lib/webrat/core/elements/link.rb +8 -7
- data/lib/webrat/core/elements/select_option.rb +15 -2
- data/lib/webrat/core/locators.rb +1 -1
- data/lib/webrat/core/locators/area_locator.rb +3 -3
- data/lib/webrat/core/locators/button_locator.rb +6 -6
- data/lib/webrat/core/locators/field_by_id_locator.rb +3 -3
- data/lib/webrat/core/locators/field_labeled_locator.rb +2 -2
- data/lib/webrat/core/locators/field_named_locator.rb +3 -3
- data/lib/webrat/core/locators/form_locator.rb +1 -1
- data/lib/webrat/core/locators/label_locator.rb +2 -2
- data/lib/webrat/core/locators/link_locator.rb +16 -8
- data/lib/webrat/core/locators/select_option_locator.rb +5 -5
- data/lib/webrat/core/logging.rb +4 -5
- data/lib/webrat/core/matchers/have_content.rb +3 -8
- data/lib/webrat/core/matchers/have_xpath.rb +3 -28
- data/lib/webrat/core/methods.rb +5 -4
- data/lib/webrat/core/mime.rb +11 -22
- data/lib/webrat/core/save_and_open_page.rb +7 -29
- data/lib/webrat/core/scope.rb +17 -2
- data/lib/webrat/core/session.rb +31 -19
- data/lib/webrat/core/xml.rb +41 -84
- data/lib/webrat/integrations/merb.rb +10 -0
- data/lib/webrat/integrations/rails.rb +25 -0
- data/lib/webrat/integrations/rspec-rails.rb +11 -0
- data/lib/webrat/integrations/selenium.rb +11 -0
- data/lib/webrat/rspec-rails.rb +2 -13
- data/lib/webrat/selenium.rb +0 -11
- data/lib/webrat/selenium/application_server_factory.rb +40 -0
- data/lib/webrat/selenium/application_servers.rb +5 -0
- data/lib/webrat/selenium/application_servers/base.rb +46 -0
- data/lib/webrat/selenium/application_servers/external.rb +26 -0
- data/lib/webrat/selenium/application_servers/merb.rb +50 -0
- data/lib/webrat/selenium/application_servers/rails.rb +44 -0
- data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/lib/webrat/selenium/location_strategy_javascript/label.js +30 -3
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +1 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +24 -4
- data/lib/webrat/selenium/matchers/have_content.rb +22 -10
- data/lib/webrat/selenium/matchers/have_selector.rb +8 -0
- data/lib/webrat/selenium/matchers/have_xpath.rb +8 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +8 -6
- data/lib/webrat/selenium/selenium_session.rb +43 -14
- data/lib/webrat/selenium/silence_stream.rb +2 -2
- data/spec/fakes/{test_session.rb → test_adapter.rb} +4 -5
- data/spec/integration/mechanize/Rakefile +7 -0
- data/spec/integration/mechanize/config.ru +2 -0
- data/spec/integration/mechanize/sample_app.rb +20 -0
- data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
- data/spec/integration/mechanize/spec/spec_helper.rb +29 -0
- data/spec/integration/merb/app/controllers/testing.rb +9 -0
- data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
- data/spec/integration/merb/config/router.rb +1 -0
- data/spec/integration/merb/spec/spec_helper.rb +2 -0
- data/spec/integration/merb/spec/webrat_spec.rb +7 -0
- data/spec/integration/rack/app.rb +89 -0
- data/spec/integration/rack/test/helper.rb +21 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +57 -51
- data/spec/integration/rails/app/controllers/{application.rb → application_controller.rb} +0 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +16 -9
- data/spec/integration/rails/app/views/buttons/show.html.erb +0 -2
- data/spec/integration/rails/app/views/links/show.html.erb +2 -1
- data/spec/integration/rails/app/views/webrat/buttons.html.erb +0 -2
- data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
- data/spec/integration/rails/config/environment.rb +1 -1
- data/spec/integration/rails/config/routes.rb +2 -0
- data/spec/integration/rails/test/integration/button_click_test.rb +12 -26
- data/spec/integration/rails/test/integration/fill_in_test.rb +1 -1
- data/spec/integration/rails/test/integration/link_click_test.rb +8 -2
- data/spec/integration/rails/test/integration/webrat_test.rb +53 -5
- data/spec/integration/rails/test/test_helper.rb +7 -5
- data/spec/integration/sinatra/test/test_helper.rb +3 -2
- data/spec/private/core/configuration_spec.rb +8 -27
- data/spec/private/core/field_spec.rb +14 -16
- data/spec/private/core/link_spec.rb +1 -1
- data/spec/private/core/session_spec.rb +23 -26
- data/spec/private/mechanize/{mechanize_session_spec.rb → mechanize_adapter_spec.rb} +4 -12
- data/spec/private/nokogiri_spec.rb +2 -2
- data/spec/private/rails/{rails_session_spec.rb → rails_adapter_spec.rb} +11 -42
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/spec/public/basic_auth_spec.rb +13 -2
- data/spec/public/click_button_spec.rb +10 -12
- data/spec/public/click_link_spec.rb +21 -0
- data/spec/public/fill_in_spec.rb +15 -0
- data/spec/public/matchers/contain_spec.rb +12 -19
- data/spec/public/matchers/have_selector_spec.rb +6 -2
- data/spec/public/matchers/have_xpath_spec.rb +3 -3
- data/spec/public/save_and_open_spec.rb +15 -17
- data/spec/public/select_spec.rb +232 -26
- data/spec/public/selenium/application_server_factory_spec.rb +49 -0
- data/spec/public/selenium/application_servers/external_spec.rb +12 -0
- data/spec/public/selenium/selenium_session_spec.rb +37 -0
- data/spec/spec_helper.rb +5 -1
- data/vendor/selenium-server.jar +0 -0
- metadata +119 -69
- data/.dotest/0001 +0 -34
- data/.dotest/0002 +0 -34
- data/.dotest/binary +0 -1
- data/.dotest/final-commit +0 -1
- data/.dotest/head-name +0 -1
- data/.dotest/info +0 -5
- data/.dotest/keep +0 -1
- data/.dotest/last +0 -1
- data/.dotest/msg +0 -0
- data/.dotest/msg-clean +0 -0
- data/.dotest/next +0 -1
- data/.dotest/onto +0 -1
- data/.dotest/orig-head +0 -1
- data/.dotest/patch +0 -29
- data/.dotest/sign +0 -1
- data/.dotest/utf8 +0 -1
- data/.dotest/whitespace +0 -1
- data/VERSION +0 -1
- data/lib/webrat/core/xml/hpricot.rb +0 -19
- data/lib/webrat/core/xml/nokogiri.rb +0 -76
- data/lib/webrat/core/xml/rexml.rb +0 -24
- data/lib/webrat/merb_session.rb +0 -65
- data/lib/webrat/rack.rb +0 -24
- data/lib/webrat/rack_test.rb +0 -32
- data/lib/webrat/selenium/application_server.rb +0 -73
- data/lib/webrat/selenium/merb_application_server.rb +0 -48
- data/lib/webrat/selenium/rails_application_server.rb +0 -42
- data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
- data/lib/webrat/sinatra.rb +0 -44
- data/spec/integration/rack/rack_app.rb +0 -16
- data/spec/integration/rack/test/test_helper.rb +0 -20
- data/spec/private/core/logging_spec.rb +0 -10
- 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[
|
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"
|
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
|
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
|
-
|
75
|
+
@element["id"]
|
71
76
|
end
|
72
77
|
|
73
78
|
def disabled?
|
74
|
-
@element.attributes.has_key?("disabled") &&
|
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 =>
|
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
|
-
|
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 +=
|
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
|
-
|
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(
|
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(
|
271
|
+
set(@element["value"] || "on")
|
252
272
|
end
|
253
273
|
|
254
274
|
def checked?
|
255
|
-
|
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
|
267
|
-
|
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(
|
320
|
+
set(@element["value"] || "on")
|
301
321
|
end
|
302
322
|
|
303
323
|
def checked?
|
304
|
-
|
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
|
315
|
-
|
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
|
-
|
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
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
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 =
|
396
|
-
selected_options =
|
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
|
-
|
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
|
-
|
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
|
-
|
53
|
+
@element["method"].blank? ? :get : @element["method"].downcase
|
54
54
|
end
|
55
55
|
|
56
56
|
def form_action
|
57
|
-
|
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
|
-
|
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
|
-
|
24
|
+
@element.xpath(*Field.xpath_search_excluding_hidden).first
|
25
25
|
else
|
26
|
-
|
26
|
+
@session.current_dom.css("#" + for_id).first
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -1,12 +1,13 @@
|
|
1
|
-
require "
|
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
|
-
|
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
|
-
|
37
|
+
@element["title"]
|
37
38
|
end
|
38
39
|
|
39
40
|
def href
|
40
|
-
|
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
|
-
|
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
|
-
|
40
|
+
@element["value"] || @element.inner_html
|
41
|
+
end
|
42
|
+
|
43
|
+
def label
|
44
|
+
@element.inner_html
|
32
45
|
end
|
33
46
|
|
34
47
|
end
|
data/lib/webrat/core/locators.rb
CHANGED
@@ -11,8 +11,8 @@ module Webrat
|
|
11
11
|
|
12
12
|
def area_element
|
13
13
|
area_elements.detect do |area_element|
|
14
|
-
|
15
|
-
|
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
|
-
|
24
|
+
@dom.xpath(*Area.xpath_search)
|
25
25
|
end
|
26
26
|
|
27
27
|
def error_message
|