jwilger-webrat 0.4.3.4 → 0.4.4.2
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.
- data/History.txt +34 -0
- data/Rakefile +16 -3
- data/lib/webrat/core/configuration.rb +9 -16
- data/lib/webrat/core/elements/area.rb +7 -7
- data/lib/webrat/core/elements/element.rb +11 -11
- data/lib/webrat/core/elements/field.rb +50 -50
- data/lib/webrat/core/elements/form.rb +17 -17
- data/lib/webrat/core/elements/label.rb +6 -6
- data/lib/webrat/core/elements/link.rb +13 -11
- data/lib/webrat/core/elements/select_option.rb +9 -9
- data/lib/webrat/core/locators/area_locator.rb +10 -10
- data/lib/webrat/core/locators/button_locator.rb +13 -13
- data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
- data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
- data/lib/webrat/core/locators/field_locator.rb +7 -7
- data/lib/webrat/core/locators/field_named_locator.rb +10 -10
- data/lib/webrat/core/locators/form_locator.rb +6 -6
- data/lib/webrat/core/locators/label_locator.rb +9 -9
- data/lib/webrat/core/locators/link_locator.rb +12 -12
- data/lib/webrat/core/locators/locator.rb +5 -5
- data/lib/webrat/core/locators/select_option_locator.rb +11 -11
- data/lib/webrat/core/locators.rb +2 -2
- data/lib/webrat/core/logging.rb +7 -4
- data/lib/webrat/core/matchers/have_content.rb +12 -12
- data/lib/webrat/core/matchers/have_selector.rb +9 -9
- data/lib/webrat/core/matchers/have_tag.rb +4 -4
- data/lib/webrat/core/matchers/have_xpath.rb +24 -24
- data/lib/webrat/core/methods.rb +14 -10
- data/lib/webrat/core/mime.rb +3 -3
- data/lib/webrat/core/save_and_open_page.rb +9 -9
- data/lib/webrat/core/scope.rb +54 -52
- data/lib/webrat/core/session.rb +20 -13
- data/lib/webrat/core/xml/hpricot.rb +3 -3
- data/lib/webrat/core/xml/nokogiri.rb +11 -11
- data/lib/webrat/core/xml/rexml.rb +3 -3
- data/lib/webrat/core/xml.rb +16 -16
- data/lib/webrat/core_extensions/blank.rb +1 -1
- data/lib/webrat/core_extensions/deprecate.rb +1 -1
- data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
- data/lib/webrat/core_extensions/meta_class.rb +1 -1
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/lib/webrat/mechanize.rb +9 -9
- data/lib/webrat/merb.rb +1 -1
- data/lib/webrat/merb_session.rb +10 -10
- data/lib/webrat/rack_test.rb +32 -0
- data/lib/webrat/rails.rb +2 -2
- data/lib/webrat/rspec-rails.rb +2 -2
- data/lib/webrat/selenium/application_server.rb +75 -0
- data/lib/webrat/selenium/matchers/have_content.rb +4 -4
- data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
- data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
- data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
- data/lib/webrat/selenium/matchers.rb +1 -1
- data/lib/webrat/selenium/merb_application_server.rb +50 -0
- data/lib/webrat/selenium/rails_application_server.rb +44 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +90 -0
- data/lib/webrat/selenium/selenium_session.rb +22 -31
- data/lib/webrat/selenium/silence_stream.rb +14 -0
- data/lib/webrat/selenium/sinatra_application_server.rb +37 -0
- data/lib/webrat/selenium.rb +5 -81
- data/lib/webrat.rb +8 -11
- metadata +10 -2
data/lib/webrat/core/scope.rb
CHANGED
@@ -6,36 +6,36 @@ module Webrat
|
|
6
6
|
# An HTML element (link, button, field, etc.) that Webrat expected was not found on the page
|
7
7
|
class NotFoundError < WebratError
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
class Scope
|
11
11
|
include Logging
|
12
12
|
include Locators
|
13
|
-
|
13
|
+
|
14
14
|
def self.from_page(session, response, response_body) #:nodoc:
|
15
15
|
new(session) do
|
16
16
|
@response = response
|
17
17
|
@response_body = response_body
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def self.from_scope(session, scope, selector) #:nodoc:
|
22
22
|
new(session) do
|
23
23
|
@scope = scope
|
24
24
|
@selector = selector
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
attr_reader :session
|
29
|
-
|
29
|
+
|
30
30
|
def initialize(session, &block) #:nodoc:
|
31
31
|
@session = session
|
32
32
|
instance_eval(&block) if block_given?
|
33
|
-
|
33
|
+
|
34
34
|
if @selector && scoped_dom.nil?
|
35
35
|
raise Webrat::NotFoundError.new("The scope was not found on the page: #{@selector.inspect}")
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
# Verifies an input field or textarea exists on the current page, and stores a value for
|
40
40
|
# it which will be sent when the form is submitted.
|
41
41
|
#
|
@@ -53,7 +53,7 @@ module Webrat
|
|
53
53
|
end
|
54
54
|
|
55
55
|
webrat_deprecate :fills_in, :fill_in
|
56
|
-
|
56
|
+
|
57
57
|
# Verifies that a hidden field exists on the current page and sets
|
58
58
|
# the value to that given by the <tt>:to</tt> option.
|
59
59
|
#
|
@@ -63,7 +63,7 @@ module Webrat
|
|
63
63
|
field = locate_field(field_locator, HiddenField)
|
64
64
|
field.set(options[:to])
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
# Verifies that an input checkbox exists on the current page and marks it
|
68
68
|
# as checked, so that the value will be submitted with the form.
|
69
69
|
#
|
@@ -74,7 +74,7 @@ module Webrat
|
|
74
74
|
end
|
75
75
|
|
76
76
|
webrat_deprecate :checks, :check
|
77
|
-
|
77
|
+
|
78
78
|
# Verifies that an input checkbox exists on the current page and marks it
|
79
79
|
# as unchecked, so that the value will not be submitted with the form.
|
80
80
|
#
|
@@ -85,7 +85,7 @@ module Webrat
|
|
85
85
|
end
|
86
86
|
|
87
87
|
webrat_deprecate :unchecks, :uncheck
|
88
|
-
|
88
|
+
|
89
89
|
# Verifies that an input radio button exists on the current page and marks it
|
90
90
|
# as checked, so that the value will be submitted with the form.
|
91
91
|
#
|
@@ -96,7 +96,7 @@ module Webrat
|
|
96
96
|
end
|
97
97
|
|
98
98
|
webrat_deprecate :chooses, :choose
|
99
|
-
|
99
|
+
|
100
100
|
# Verifies that a an option element exists on the current page with the specified
|
101
101
|
# text. You can optionally restrict the search to a specific select list by
|
102
102
|
# assigning <tt>options[:from]</tt> the value of the select list's name or
|
@@ -111,7 +111,7 @@ module Webrat
|
|
111
111
|
end
|
112
112
|
|
113
113
|
webrat_deprecate :selects, :select
|
114
|
-
|
114
|
+
|
115
115
|
DATE_TIME_SUFFIXES = {
|
116
116
|
:year => '1i',
|
117
117
|
:month => '2i',
|
@@ -120,9 +120,9 @@ module Webrat
|
|
120
120
|
:minute => '5i'
|
121
121
|
}
|
122
122
|
|
123
|
-
# Verifies that date elements (year, month, day) exist on the current page
|
123
|
+
# Verifies that date elements (year, month, day) exist on the current page
|
124
124
|
# with the specified values. You can optionally restrict the search to a specific
|
125
|
-
# date's elements by assigning <tt>options[:from]</tt> the value of the date's
|
125
|
+
# date's elements by assigning <tt>options[:from]</tt> the value of the date's
|
126
126
|
# label. Selects all the date elements with date provided. The date provided may
|
127
127
|
# be a string or a Date/Time object.
|
128
128
|
#
|
@@ -136,15 +136,15 @@ module Webrat
|
|
136
136
|
# select_date Date.parse("December 25, 2000"), :from => "Event"
|
137
137
|
# select_date "April 26, 1982", :id_prefix => 'birthday'
|
138
138
|
def select_date(date_to_select, options ={})
|
139
|
-
date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
|
140
|
-
date_to_select : Date.parse(date_to_select)
|
141
|
-
|
139
|
+
date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
|
140
|
+
date_to_select : Date.parse(date_to_select)
|
141
|
+
|
142
142
|
id_prefix = locate_id_prefix(options) do
|
143
143
|
year_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:year]}$/).locate
|
144
144
|
raise NotFoundError.new("No date fields were found") unless year_field && year_field.id =~ /(.*?)_1i/
|
145
145
|
$1
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
select date.year, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:year]}"
|
149
149
|
select date.strftime('%B'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:month]}"
|
150
150
|
select date.day, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:day]}"
|
@@ -152,9 +152,9 @@ module Webrat
|
|
152
152
|
|
153
153
|
webrat_deprecate :selects_date, :select_date
|
154
154
|
|
155
|
-
# Verifies that time elements (hour, minute) exist on the current page
|
155
|
+
# Verifies that time elements (hour, minute) exist on the current page
|
156
156
|
# with the specified values. You can optionally restrict the search to a specific
|
157
|
-
# time's elements by assigning <tt>options[:from]</tt> the value of the time's
|
157
|
+
# time's elements by assigning <tt>options[:from]</tt> the value of the time's
|
158
158
|
# label. Selects all the time elements with date provided. The time provided may
|
159
159
|
# be a string or a Time object.
|
160
160
|
#
|
@@ -164,28 +164,28 @@ module Webrat
|
|
164
164
|
#
|
165
165
|
# Note: Just like Rails' time_select helper this assumes the form is using
|
166
166
|
# 24 hour select boxes, and not 12 hours with AM/PM.
|
167
|
-
#
|
167
|
+
#
|
168
168
|
# Examples:
|
169
169
|
# select_time "9:30"
|
170
170
|
# select_date "3:30PM", :from => "Party Time"
|
171
171
|
# select_date Time.parse("10:00PM"), :from => "Event"
|
172
172
|
# select_date "10:30AM", :id_prefix => 'meeting'
|
173
173
|
def select_time(time_to_select, options ={})
|
174
|
-
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
174
|
+
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
175
175
|
|
176
176
|
id_prefix = locate_id_prefix(options) do
|
177
177
|
hour_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:hour]}$/).locate
|
178
178
|
raise NotFoundError.new("No time fields were found") unless hour_field && hour_field.id =~ /(.*?)_4i/
|
179
179
|
$1
|
180
180
|
end
|
181
|
-
|
181
|
+
|
182
182
|
select time.hour.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:hour]}"
|
183
183
|
select time.min.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:minute]}"
|
184
184
|
end
|
185
185
|
|
186
186
|
webrat_deprecate :selects_time, :select_time
|
187
|
-
|
188
|
-
# Verifies and selects all the date and time elements on the current page.
|
187
|
+
|
188
|
+
# Verifies and selects all the date and time elements on the current page.
|
189
189
|
# See #select_time and #select_date for more details and available options.
|
190
190
|
#
|
191
191
|
# Examples:
|
@@ -194,23 +194,23 @@ module Webrat
|
|
194
194
|
# select_datetime Time.parse("December 25, 2000 15:30"), :from => "Event"
|
195
195
|
# select_datetime "April 26, 1982 5:50PM", :id_prefix => 'birthday'
|
196
196
|
def select_datetime(time_to_select, options ={})
|
197
|
-
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
198
|
-
|
197
|
+
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
198
|
+
|
199
199
|
options[:id_prefix] ||= (options[:from] ? FieldByIdLocator.new(@session, dom, options[:from]).locate : nil)
|
200
|
-
|
200
|
+
|
201
201
|
select_date time, options
|
202
202
|
select_time time, options
|
203
203
|
end
|
204
204
|
|
205
205
|
webrat_deprecate :selects_datetime, :select_datetime
|
206
|
-
|
206
|
+
|
207
207
|
# Verifies that an input file field exists on the current page and sets
|
208
208
|
# its value to the given +file+, so that the file will be uploaded
|
209
209
|
# along with the form. An optional <tt>content_type</tt> may be given.
|
210
210
|
#
|
211
211
|
# Example:
|
212
|
-
#
|
213
|
-
#
|
212
|
+
# attach_file "Resume", "/path/to/the/resume.txt"
|
213
|
+
# attach_file "Photo", "/path/to/the/image.png", "image/png"
|
214
214
|
def attach_file(field_locator, path, content_type = nil)
|
215
215
|
locate_field(field_locator, FileField).set(path, content_type)
|
216
216
|
end
|
@@ -229,13 +229,13 @@ module Webrat
|
|
229
229
|
def click_area(area_name)
|
230
230
|
find_area(area_name).click
|
231
231
|
end
|
232
|
-
|
232
|
+
|
233
233
|
webrat_deprecate :clicks_area, :click_area
|
234
|
-
|
234
|
+
|
235
235
|
# Issues a request for the URL pointed to by a link on the current page,
|
236
236
|
# follows any redirects, and verifies the final page load was successful.
|
237
|
-
#
|
238
|
-
# click_link has very basic support for detecting Rails-generated
|
237
|
+
#
|
238
|
+
# click_link has very basic support for detecting Rails-generated
|
239
239
|
# JavaScript onclick handlers for PUT, POST and DELETE links, as well as
|
240
240
|
# CSRF authenticity tokens if they are present.
|
241
241
|
#
|
@@ -243,15 +243,15 @@ module Webrat
|
|
243
243
|
#
|
244
244
|
# Passing a :method in the options hash overrides the HTTP method used
|
245
245
|
# for making the link request
|
246
|
-
#
|
246
|
+
#
|
247
247
|
# It will try to find links by (in order of precedence):
|
248
248
|
# innerHTML, with simple handling
|
249
249
|
# title
|
250
250
|
# id
|
251
|
-
#
|
251
|
+
#
|
252
252
|
# innerHTML and title are matchable by text subtring or Regexp
|
253
253
|
# id is matchable by full text equality or Regexp
|
254
|
-
#
|
254
|
+
#
|
255
255
|
# Example:
|
256
256
|
# click_link "Sign up"
|
257
257
|
# click_link "Sign up", :javascript => false
|
@@ -261,7 +261,7 @@ module Webrat
|
|
261
261
|
end
|
262
262
|
|
263
263
|
webrat_deprecate :clicks_link, :click_link
|
264
|
-
|
264
|
+
|
265
265
|
# Verifies that a submit button exists for the form, then submits the form, follows
|
266
266
|
# any redirects, and verifies the final page was successful.
|
267
267
|
#
|
@@ -288,36 +288,38 @@ module Webrat
|
|
288
288
|
def submit_form(id)
|
289
289
|
FormLocator.new(@session, dom, id).locate.submit
|
290
290
|
end
|
291
|
-
|
291
|
+
|
292
292
|
def dom # :nodoc:
|
293
293
|
return @dom if @dom
|
294
|
-
|
294
|
+
|
295
295
|
if @selector
|
296
296
|
@dom = scoped_dom
|
297
297
|
else
|
298
298
|
@dom = page_dom
|
299
299
|
end
|
300
|
-
|
300
|
+
|
301
301
|
return @dom
|
302
302
|
end
|
303
|
-
|
303
|
+
|
304
|
+
protected
|
305
|
+
|
304
306
|
def page_dom #:nodoc:
|
305
307
|
return @response.dom if @response.respond_to?(:dom)
|
306
|
-
|
308
|
+
|
307
309
|
if @session.xml_content_type?
|
308
310
|
dom = Webrat::XML.xml_document(@response_body)
|
309
311
|
else
|
310
312
|
dom = Webrat::XML.html_document(@response_body)
|
311
313
|
end
|
312
|
-
|
314
|
+
|
313
315
|
Webrat.define_dom_method(@response, dom)
|
314
316
|
return dom
|
315
317
|
end
|
316
|
-
|
318
|
+
|
317
319
|
def scoped_dom
|
318
320
|
Webrat::XML.css_at(@scope.dom, @selector)
|
319
321
|
end
|
320
|
-
|
322
|
+
|
321
323
|
def locate_field(field_locator, *field_types) #:nodoc:
|
322
324
|
if field_locator.is_a?(Field)
|
323
325
|
field_locator
|
@@ -325,10 +327,10 @@ module Webrat
|
|
325
327
|
field(field_locator, *field_types)
|
326
328
|
end
|
327
329
|
end
|
328
|
-
|
330
|
+
|
329
331
|
def locate_id_prefix(options, &location_strategy) #:nodoc:
|
330
332
|
return options[:id_prefix] if options[:id_prefix]
|
331
|
-
|
333
|
+
|
332
334
|
if options[:from]
|
333
335
|
if (label = LabelLocator.new(@session, dom, options[:from]).locate)
|
334
336
|
label.for_id
|
@@ -339,10 +341,10 @@ module Webrat
|
|
339
341
|
yield
|
340
342
|
end
|
341
343
|
end
|
342
|
-
|
344
|
+
|
343
345
|
def forms #:nodoc:
|
344
346
|
@forms ||= Form.load_all(@session, dom)
|
345
347
|
end
|
346
|
-
|
348
|
+
|
347
349
|
end
|
348
350
|
end
|
data/lib/webrat/core/session.rb
CHANGED
@@ -11,7 +11,7 @@ module Webrat
|
|
11
11
|
|
12
12
|
class InfiniteRedirectError < WebratError
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def self.session_class
|
16
16
|
case Webrat.configuration.mode
|
17
17
|
when :rails
|
@@ -26,6 +26,8 @@ module Webrat
|
|
26
26
|
SinatraSession
|
27
27
|
when :mechanize
|
28
28
|
MechanizeSession
|
29
|
+
when :rack_test
|
30
|
+
RackTestSession
|
29
31
|
else
|
30
32
|
raise WebratError.new(<<-STR)
|
31
33
|
Unknown Webrat mode: #{Webrat.configuration.mode.inspect}
|
@@ -77,7 +79,7 @@ For example:
|
|
77
79
|
def doc_root #:nodoc:
|
78
80
|
nil
|
79
81
|
end
|
80
|
-
|
82
|
+
|
81
83
|
def header(key, value)
|
82
84
|
@custom_headers[key] = value
|
83
85
|
end
|
@@ -100,11 +102,8 @@ For example:
|
|
100
102
|
h['HTTP_REFERER'] = @current_url if @current_url
|
101
103
|
|
102
104
|
debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}"
|
103
|
-
|
104
|
-
|
105
|
-
else
|
106
|
-
send "#{http_method}", url, data || {}, h
|
107
|
-
end
|
105
|
+
|
106
|
+
process_request(http_method, url, data, h)
|
108
107
|
|
109
108
|
save_and_open_page if exception_caught? && Webrat.configuration.open_error_files?
|
110
109
|
raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code?
|
@@ -122,13 +121,13 @@ For example:
|
|
122
121
|
|
123
122
|
return response
|
124
123
|
end
|
125
|
-
|
124
|
+
|
126
125
|
def check_for_infinite_redirects
|
127
126
|
if current_url == response_location
|
128
127
|
@_identical_redirect_count ||= 0
|
129
128
|
@_identical_redirect_count += 1
|
130
129
|
end
|
131
|
-
|
130
|
+
|
132
131
|
if infinite_redirect_limit_exceeded?
|
133
132
|
raise InfiniteRedirectError.new("#{Webrat.configuration.infinite_redirect_limit} redirects to the same URL (#{current_url.inspect})")
|
134
133
|
end
|
@@ -138,7 +137,7 @@ For example:
|
|
138
137
|
Webrat.configuration.infinite_redirect_limit &&
|
139
138
|
(@_identical_redirect_count || 0) > Webrat.configuration.infinite_redirect_limit
|
140
139
|
end
|
141
|
-
|
140
|
+
|
142
141
|
def success_code? #:nodoc:
|
143
142
|
(200..499).include?(response_code)
|
144
143
|
end
|
@@ -154,7 +153,7 @@ For example:
|
|
154
153
|
response_location_host_domain = response_location_host.split('.')[-2..-1].join('.') rescue response_location_host
|
155
154
|
current_host_domain == response_location_host_domain
|
156
155
|
end
|
157
|
-
|
156
|
+
|
158
157
|
#easy helper to pull out where we were redirected to
|
159
158
|
def redirected_to
|
160
159
|
redirect? ? response_location : nil
|
@@ -259,12 +258,20 @@ For example:
|
|
259
258
|
|
260
259
|
private
|
261
260
|
|
261
|
+
def process_request(http_method, url, data, headers)
|
262
|
+
if headers.empty?
|
263
|
+
send "#{http_method}", url, data || {}
|
264
|
+
else
|
265
|
+
send "#{http_method}", url, data || {}, headers
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
262
269
|
def response_location
|
263
270
|
response.headers["Location"]
|
264
271
|
end
|
265
272
|
|
266
273
|
def current_host
|
267
|
-
URI.parse(current_url).host ||
|
274
|
+
URI.parse(current_url).host || "www.example.com"
|
268
275
|
end
|
269
276
|
|
270
277
|
def response_location_host
|
@@ -276,6 +283,6 @@ For example:
|
|
276
283
|
@_scopes = nil
|
277
284
|
@_page_scope = nil
|
278
285
|
end
|
279
|
-
|
286
|
+
|
280
287
|
end
|
281
288
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require "webrat/core_extensions/meta_class"
|
2
2
|
|
3
3
|
module Webrat
|
4
|
-
|
4
|
+
|
5
5
|
def self.nokogiri_document(stringlike) #:nodoc:
|
6
6
|
return stringlike.dom if stringlike.respond_to?(:dom)
|
7
|
-
|
7
|
+
|
8
8
|
if Nokogiri::HTML::Document === stringlike
|
9
9
|
stringlike
|
10
10
|
elsif Nokogiri::XML::NodeSet === stringlike
|
@@ -17,10 +17,10 @@ module Webrat
|
|
17
17
|
Nokogiri::HTML(stringlike.to_s)
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def self.html_nokogiri_document(stringlike) #:nodoc:
|
22
22
|
return stringlike.dom if stringlike.respond_to?(:dom)
|
23
|
-
|
23
|
+
|
24
24
|
if Nokogiri::HTML::Document === stringlike
|
25
25
|
stringlike
|
26
26
|
elsif Nokogiri::XML::NodeSet === stringlike
|
@@ -33,10 +33,10 @@ module Webrat
|
|
33
33
|
Nokogiri::HTML(stringlike.to_s)
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def self.xml_nokogiri_document(stringlike) #:nodoc:
|
38
38
|
return stringlike.dom if stringlike.respond_to?(:dom)
|
39
|
-
|
39
|
+
|
40
40
|
if Nokogiri::HTML::Document === stringlike
|
41
41
|
stringlike
|
42
42
|
elsif Nokogiri::XML::NodeSet === stringlike
|
@@ -49,20 +49,20 @@ module Webrat
|
|
49
49
|
Nokogiri::XML(stringlike.to_s)
|
50
50
|
end
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def self.define_dom_method(object, dom) #:nodoc:
|
54
54
|
object.meta_class.send(:define_method, :dom) do
|
55
55
|
dom
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
end
|
60
60
|
|
61
61
|
|
62
62
|
module Nokogiri #:nodoc:
|
63
63
|
module CSS #:nodoc:
|
64
64
|
class XPathVisitor #:nodoc:
|
65
|
-
|
65
|
+
|
66
66
|
def visit_pseudo_class_text(node) #:nodoc:
|
67
67
|
"@type='text'"
|
68
68
|
end
|
@@ -70,7 +70,7 @@ module Nokogiri #:nodoc:
|
|
70
70
|
def visit_pseudo_class_password(node) #:nodoc:
|
71
71
|
"@type='password'"
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
end
|
75
75
|
end
|
76
|
-
end
|
76
|
+
end
|
data/lib/webrat/core/xml.rb
CHANGED
@@ -4,7 +4,7 @@ require "webrat/core/xml/rexml"
|
|
4
4
|
|
5
5
|
module Webrat #:nodoc:
|
6
6
|
module XML #:nodoc:
|
7
|
-
|
7
|
+
|
8
8
|
def self.document(stringlike) #:nodoc:
|
9
9
|
if Webrat.configuration.parse_with_nokogiri?
|
10
10
|
Webrat.nokogiri_document(stringlike)
|
@@ -12,7 +12,7 @@ module Webrat #:nodoc:
|
|
12
12
|
Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def self.html_document(stringlike) #:nodoc:
|
17
17
|
if Webrat.configuration.parse_with_nokogiri?
|
18
18
|
Webrat.html_nokogiri_document(stringlike)
|
@@ -20,7 +20,7 @@ module Webrat #:nodoc:
|
|
20
20
|
Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def self.xml_document(stringlike) #:nodoc:
|
25
25
|
if Webrat.configuration.parse_with_nokogiri?
|
26
26
|
Webrat.xml_nokogiri_document(stringlike)
|
@@ -36,7 +36,7 @@ module Webrat #:nodoc:
|
|
36
36
|
element.to_s
|
37
37
|
end
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def self.inner_html(element)
|
41
41
|
if Webrat.configuration.parse_with_nokogiri?
|
42
42
|
element.inner_html
|
@@ -44,7 +44,7 @@ module Webrat #:nodoc:
|
|
44
44
|
element.text
|
45
45
|
end
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
def self.all_inner_text(element)
|
49
49
|
if Webrat.configuration.parse_with_nokogiri?
|
50
50
|
element.inner_text
|
@@ -52,7 +52,7 @@ module Webrat #:nodoc:
|
|
52
52
|
Hpricot(element.to_s).children.first.inner_text
|
53
53
|
end
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def self.inner_text(element)
|
57
57
|
if Webrat.configuration.parse_with_nokogiri?
|
58
58
|
element.inner_text
|
@@ -64,7 +64,7 @@ module Webrat #:nodoc:
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
def self.xpath_to(element)
|
69
69
|
if Webrat.configuration.parse_with_nokogiri?
|
70
70
|
element.path
|
@@ -72,25 +72,25 @@ module Webrat #:nodoc:
|
|
72
72
|
element.xpath
|
73
73
|
end
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
def self.attribute(element, attribute_name)
|
77
77
|
return element[attribute_name] if element.is_a?(Hash)
|
78
|
-
|
78
|
+
|
79
79
|
if Webrat.configuration.parse_with_nokogiri?
|
80
80
|
element[attribute_name]
|
81
81
|
else
|
82
82
|
element.attributes[attribute_name]
|
83
83
|
end
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
def self.xpath_at(*args)
|
87
87
|
xpath_search(*args).first
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
def self.css_at(*args)
|
91
91
|
css_search(*args).first
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
def self.xpath_search(element, *searches)
|
95
95
|
searches.flatten.map do |search|
|
96
96
|
if Webrat.configuration.parse_with_nokogiri?
|
@@ -100,16 +100,16 @@ module Webrat #:nodoc:
|
|
100
100
|
end
|
101
101
|
end.flatten.compact
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
104
|
def self.css_search(element, *searches) #:nodoc:
|
105
105
|
xpath_search(element, css_to_xpath(*searches))
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
def self.css_to_xpath(*selectors)
|
109
109
|
selectors.map do |rule|
|
110
110
|
Nokogiri::CSS.xpath_for(rule, :prefix => ".//")
|
111
111
|
end.flatten.uniq
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
end
|
115
|
-
end
|
115
|
+
end
|