raldred-webrat 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.
Files changed (160) hide show
  1. data/History.txt +346 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.rdoc +85 -0
  4. data/Rakefile +168 -0
  5. data/install.rb +1 -0
  6. data/lib/webrat.rb +31 -0
  7. data/lib/webrat/core.rb +14 -0
  8. data/lib/webrat/core/configuration.rb +102 -0
  9. data/lib/webrat/core/elements/area.rb +31 -0
  10. data/lib/webrat/core/elements/element.rb +33 -0
  11. data/lib/webrat/core/elements/field.rb +405 -0
  12. data/lib/webrat/core/elements/form.rb +103 -0
  13. data/lib/webrat/core/elements/label.rb +31 -0
  14. data/lib/webrat/core/elements/link.rb +92 -0
  15. data/lib/webrat/core/elements/select_option.rb +35 -0
  16. data/lib/webrat/core/locators.rb +20 -0
  17. data/lib/webrat/core/locators/area_locator.rb +38 -0
  18. data/lib/webrat/core/locators/button_locator.rb +54 -0
  19. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  20. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  21. data/lib/webrat/core/locators/field_locator.rb +25 -0
  22. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  23. data/lib/webrat/core/locators/form_locator.rb +19 -0
  24. data/lib/webrat/core/locators/label_locator.rb +34 -0
  25. data/lib/webrat/core/locators/link_locator.rb +75 -0
  26. data/lib/webrat/core/locators/locator.rb +20 -0
  27. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  28. data/lib/webrat/core/logging.rb +24 -0
  29. data/lib/webrat/core/matchers.rb +4 -0
  30. data/lib/webrat/core/matchers/have_content.rb +73 -0
  31. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  32. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  33. data/lib/webrat/core/matchers/have_xpath.rb +147 -0
  34. data/lib/webrat/core/methods.rb +63 -0
  35. data/lib/webrat/core/mime.rb +29 -0
  36. data/lib/webrat/core/save_and_open_page.rb +50 -0
  37. data/lib/webrat/core/scope.rb +350 -0
  38. data/lib/webrat/core/session.rb +289 -0
  39. data/lib/webrat/core/xml.rb +115 -0
  40. data/lib/webrat/core/xml/hpricot.rb +19 -0
  41. data/lib/webrat/core/xml/nokogiri.rb +76 -0
  42. data/lib/webrat/core/xml/rexml.rb +24 -0
  43. data/lib/webrat/core_extensions/blank.rb +58 -0
  44. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  45. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  46. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  47. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  48. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  49. data/lib/webrat/mechanize.rb +74 -0
  50. data/lib/webrat/merb.rb +9 -0
  51. data/lib/webrat/merb_session.rb +65 -0
  52. data/lib/webrat/rack.rb +24 -0
  53. data/lib/webrat/rack_test.rb +32 -0
  54. data/lib/webrat/rails.rb +105 -0
  55. data/lib/webrat/rspec-rails.rb +13 -0
  56. data/lib/webrat/selenium.rb +81 -0
  57. data/lib/webrat/selenium/application_server.rb +73 -0
  58. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  59. data/lib/webrat/selenium/location_strategy_javascript/label.js +15 -0
  60. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  61. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
  62. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  63. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  64. data/lib/webrat/selenium/matchers.rb +4 -0
  65. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  66. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  67. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  68. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  69. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  70. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  71. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  72. data/lib/webrat/selenium/selenium_rc_server.rb +84 -0
  73. data/lib/webrat/selenium/selenium_session.rb +242 -0
  74. data/lib/webrat/selenium/silence_stream.rb +18 -0
  75. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  76. data/lib/webrat/sinatra.rb +44 -0
  77. data/spec/fakes/test_session.rb +34 -0
  78. data/spec/integration/merb/app/controllers/application.rb +2 -0
  79. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  80. data/spec/integration/merb/app/controllers/testing.rb +18 -0
  81. data/spec/integration/merb/config/environments/development.rb +15 -0
  82. data/spec/integration/merb/config/environments/rake.rb +11 -0
  83. data/spec/integration/merb/config/environments/test.rb +14 -0
  84. data/spec/integration/merb/config/init.rb +25 -0
  85. data/spec/integration/merb/config/rack.rb +11 -0
  86. data/spec/integration/merb/config/router.rb +33 -0
  87. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  88. data/spec/integration/merb/spec/webrat_spec.rb +32 -0
  89. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  90. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  91. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  92. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  93. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  94. data/spec/integration/rack/rack_app.rb +16 -0
  95. data/spec/integration/rack/test/test_helper.rb +20 -0
  96. data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  97. data/spec/integration/rails/app/controllers/application.rb +15 -0
  98. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  99. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  100. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  101. data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  102. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  103. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  104. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  105. data/spec/integration/rails/config/boot.rb +109 -0
  106. data/spec/integration/rails/config/environment.rb +12 -0
  107. data/spec/integration/rails/config/environments/development.rb +17 -0
  108. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  109. data/spec/integration/rails/config/environments/test.rb +22 -0
  110. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  111. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  112. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  113. data/spec/integration/rails/config/routes.rb +17 -0
  114. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  115. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  116. data/spec/integration/rails/test/integration/link_click_test.rb +21 -0
  117. data/spec/integration/rails/test/integration/webrat_test.rb +75 -0
  118. data/spec/integration/rails/test/test_helper.rb +25 -0
  119. data/spec/integration/sinatra/classic_app.rb +64 -0
  120. data/spec/integration/sinatra/modular_app.rb +16 -0
  121. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  122. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  123. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  124. data/spec/private/core/configuration_spec.rb +106 -0
  125. data/spec/private/core/field_spec.rb +85 -0
  126. data/spec/private/core/link_spec.rb +24 -0
  127. data/spec/private/core/logging_spec.rb +10 -0
  128. data/spec/private/core/session_spec.rb +198 -0
  129. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  130. data/spec/private/merb/merb_session_spec.rb +42 -0
  131. data/spec/private/nokogiri_spec.rb +77 -0
  132. data/spec/private/rails/attaches_file_spec.rb +81 -0
  133. data/spec/private/rails/rails_session_spec.rb +110 -0
  134. data/spec/public/basic_auth_spec.rb +24 -0
  135. data/spec/public/check_spec.rb +191 -0
  136. data/spec/public/choose_spec.rb +118 -0
  137. data/spec/public/click_area_spec.rb +106 -0
  138. data/spec/public/click_button_spec.rb +496 -0
  139. data/spec/public/click_link_spec.rb +541 -0
  140. data/spec/public/fill_in_spec.rb +209 -0
  141. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  142. data/spec/public/locators/field_labeled_spec.rb +172 -0
  143. data/spec/public/locators/field_with_id_spec.rb +16 -0
  144. data/spec/public/matchers/contain_spec.rb +114 -0
  145. data/spec/public/matchers/have_selector_spec.rb +142 -0
  146. data/spec/public/matchers/have_tag_spec.rb +39 -0
  147. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  148. data/spec/public/reload_spec.rb +10 -0
  149. data/spec/public/save_and_open_spec.rb +51 -0
  150. data/spec/public/select_date_spec.rb +112 -0
  151. data/spec/public/select_datetime_spec.rb +137 -0
  152. data/spec/public/select_spec.rb +249 -0
  153. data/spec/public/select_time_spec.rb +100 -0
  154. data/spec/public/set_hidden_field_spec.rb +5 -0
  155. data/spec/public/submit_form_spec.rb +5 -0
  156. data/spec/public/visit_spec.rb +58 -0
  157. data/spec/public/within_spec.rb +177 -0
  158. data/spec/spec_helper.rb +50 -0
  159. data/vendor/selenium-server.jar +0 -0
  160. metadata +220 -0
@@ -0,0 +1,289 @@
1
+ require "forwardable"
2
+ require "ostruct"
3
+
4
+ require "webrat/core/mime"
5
+ require "webrat/core/save_and_open_page"
6
+
7
+ module Webrat
8
+ # A page load or form submission returned an unsuccessful response code (500-599)
9
+ class PageLoadError < WebratError
10
+ end
11
+
12
+ class InfiniteRedirectError < WebratError
13
+ end
14
+
15
+ def self.session_class
16
+ case Webrat.configuration.mode
17
+ when :rails
18
+ RailsSession
19
+ when :merb
20
+ MerbSession
21
+ when :selenium
22
+ SeleniumSession
23
+ when :rack
24
+ RackSession
25
+ when :sinatra
26
+ SinatraSession
27
+ when :mechanize
28
+ MechanizeSession
29
+ when :rack_test
30
+ RackTestSession
31
+ else
32
+ raise WebratError.new(<<-STR)
33
+ Unknown Webrat mode: #{Webrat.configuration.mode.inspect}
34
+
35
+ Please ensure you have a Webrat configuration block that specifies a mode
36
+ in your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber).
37
+
38
+ This configure block supercedes the need to require "webrat/<framework>".
39
+
40
+ For example:
41
+
42
+ Webrat.configure do |config|
43
+ config.mode = :rails
44
+ end
45
+ STR
46
+ end
47
+ end
48
+
49
+ class Session
50
+ extend Forwardable
51
+ include Logging
52
+ include SaveAndOpenPage
53
+ attr_reader :current_url
54
+ attr_reader :elements
55
+
56
+ def initialize(context = nil) #:nodoc:
57
+ @http_method = :get
58
+ @data = {}
59
+ @default_headers = {}
60
+ @custom_headers = {}
61
+ @context = context
62
+
63
+ reset
64
+ end
65
+
66
+ def current_dom #:nodoc:
67
+ current_scope.dom
68
+ end
69
+
70
+ # For backwards compatibility -- removing in 1.0
71
+ def current_page #:nodoc:
72
+ page = OpenStruct.new
73
+ page.url = @current_url
74
+ page.http_method = @http_method
75
+ page.data = @data
76
+ page
77
+ end
78
+
79
+ def doc_root #:nodoc:
80
+ nil
81
+ end
82
+
83
+ def header(key, value)
84
+ @custom_headers[key] = value
85
+ end
86
+
87
+ def http_accept(mime_type)
88
+ header('Accept', Webrat::MIME.mime_type(mime_type))
89
+ end
90
+
91
+ def basic_auth(user, pass)
92
+ encoded_login = ["#{user}:#{pass}"].pack("m*")
93
+ header('HTTP_AUTHORIZATION', "Basic #{encoded_login}")
94
+ end
95
+
96
+ def headers #:nodoc:
97
+ @default_headers.dup.merge(@custom_headers.dup)
98
+ end
99
+
100
+ def request_page(url, http_method, data) #:nodoc:
101
+ h = headers
102
+ h['HTTP_REFERER'] = @current_url if @current_url
103
+
104
+ debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}"
105
+
106
+ process_request(http_method, url, data, h)
107
+
108
+ save_and_open_page if exception_caught? && Webrat.configuration.open_error_files?
109
+ raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code?
110
+
111
+ reset
112
+
113
+ @current_url = url
114
+ @http_method = http_method
115
+ @data = data
116
+
117
+ if internal_redirect?
118
+ check_for_infinite_redirects
119
+ request_page(response_location, :get, {})
120
+ end
121
+
122
+ return response
123
+ end
124
+
125
+ def check_for_infinite_redirects
126
+ if current_url == response_location
127
+ @_identical_redirect_count ||= 0
128
+ @_identical_redirect_count += 1
129
+ end
130
+
131
+ if infinite_redirect_limit_exceeded?
132
+ raise InfiniteRedirectError.new("#{Webrat.configuration.infinite_redirect_limit} redirects to the same URL (#{current_url.inspect})")
133
+ end
134
+ end
135
+
136
+ def infinite_redirect_limit_exceeded?
137
+ Webrat.configuration.infinite_redirect_limit &&
138
+ (@_identical_redirect_count || 0) > Webrat.configuration.infinite_redirect_limit
139
+ end
140
+
141
+ def success_code? #:nodoc:
142
+ (200..499).include?(response_code)
143
+ end
144
+
145
+ def redirect? #:nodoc:
146
+ response_code / 100 == 3
147
+ end
148
+
149
+ def internal_redirect?
150
+ return false unless redirect?
151
+ #should keep internal_redirects if the subdomain changes
152
+ current_host_domain = current_host.split('.')[-2..-1].join('.') rescue current_host
153
+ response_location_host_domain = response_location_host.split('.')[-2..-1].join('.') rescue response_location_host
154
+ current_host_domain == response_location_host_domain
155
+ end
156
+
157
+ #easy helper to pull out where we were redirected to
158
+ def redirected_to
159
+ redirect? ? response_location : nil
160
+ end
161
+
162
+ def exception_caught? #:nodoc:
163
+ response_body =~ /Exception caught/
164
+ end
165
+
166
+ def current_scope #:nodoc:
167
+ scopes.last || page_scope
168
+ end
169
+
170
+ # Reloads the last page requested. Note that this will resubmit forms
171
+ # and their data.
172
+ def reload
173
+ request_page(@current_url, @http_method, @data)
174
+ end
175
+
176
+ webrat_deprecate :reloads, :reload
177
+
178
+
179
+ # Works like click_link, but only looks for the link text within a given selector
180
+ #
181
+ # Example:
182
+ # click_link_within "#user_12", "Vote"
183
+ def click_link_within(selector, link_text)
184
+ within(selector) do
185
+ click_link(link_text)
186
+ end
187
+ end
188
+
189
+ webrat_deprecate :clicks_link_within, :click_link_within
190
+
191
+ def within(selector)
192
+ scopes.push(Scope.from_scope(self, current_scope, selector))
193
+ ret = yield(current_scope)
194
+ scopes.pop
195
+ return ret
196
+ end
197
+
198
+ # Issues a GET request for a page, follows any redirects, and verifies the final page
199
+ # load was successful.
200
+ #
201
+ # Example:
202
+ # visit "/"
203
+ def visit(url = nil, http_method = :get, data = {})
204
+ request_page(url, http_method, data)
205
+ end
206
+
207
+ webrat_deprecate :visits, :visit
208
+
209
+ # Subclasses can override this to show error messages without html
210
+ def formatted_error #:nodoc:
211
+ response_body
212
+ end
213
+
214
+ def scopes #:nodoc:
215
+ @_scopes ||= []
216
+ end
217
+
218
+ def page_scope #:nodoc:
219
+ @_page_scope ||= Scope.from_page(self, response, response_body)
220
+ end
221
+
222
+ def dom
223
+ page_scope.dom
224
+ end
225
+
226
+ def xml_content_type?
227
+ false
228
+ end
229
+
230
+ def simulate
231
+ return if Webrat.configuration.mode == :selenium
232
+ yield
233
+ end
234
+
235
+ def automate
236
+ return unless Webrat.configuration.mode == :selenium
237
+ yield
238
+ end
239
+
240
+ def_delegators :current_scope, :fill_in, :fills_in
241
+ def_delegators :current_scope, :set_hidden_field
242
+ def_delegators :current_scope, :submit_form
243
+ def_delegators :current_scope, :check, :checks
244
+ def_delegators :current_scope, :uncheck, :unchecks
245
+ def_delegators :current_scope, :choose, :chooses
246
+ def_delegators :current_scope, :select, :selects
247
+ def_delegators :current_scope, :select_datetime, :selects_datetime
248
+ def_delegators :current_scope, :select_date, :selects_date
249
+ def_delegators :current_scope, :select_time, :selects_time
250
+ def_delegators :current_scope, :attach_file, :attaches_file
251
+ def_delegators :current_scope, :click_area, :clicks_area
252
+ def_delegators :current_scope, :click_link, :clicks_link
253
+ def_delegators :current_scope, :click_button, :clicks_button
254
+ def_delegators :current_scope, :field_labeled
255
+ def_delegators :current_scope, :field_by_xpath
256
+ def_delegators :current_scope, :field_with_id
257
+ def_delegators :current_scope, :select_option
258
+ def_delegators :current_scope, :field_named
259
+
260
+ private
261
+
262
+ def process_request(http_method, url, data, headers)
263
+ if headers.empty?
264
+ send "#{http_method}", url, data || {}
265
+ else
266
+ send "#{http_method}", url, data || {}, headers
267
+ end
268
+ end
269
+
270
+ def response_location
271
+ response.headers["Location"]
272
+ end
273
+
274
+ def current_host
275
+ URI.parse(current_url).host || "www.example.com"
276
+ end
277
+
278
+ def response_location_host
279
+ URI.parse(response_location).host || "www.example.com"
280
+ end
281
+
282
+ def reset
283
+ @elements = {}
284
+ @_scopes = nil
285
+ @_page_scope = nil
286
+ end
287
+
288
+ end
289
+ end
@@ -0,0 +1,115 @@
1
+ require "webrat/core/xml/nokogiri"
2
+ require "webrat/core/xml/hpricot"
3
+ require "webrat/core/xml/rexml"
4
+
5
+ module Webrat #:nodoc:
6
+ module XML #:nodoc:
7
+
8
+ def self.document(stringlike) #:nodoc:
9
+ if Webrat.configuration.parse_with_nokogiri?
10
+ Webrat.nokogiri_document(stringlike)
11
+ else
12
+ Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
13
+ end
14
+ end
15
+
16
+ def self.html_document(stringlike) #:nodoc:
17
+ if Webrat.configuration.parse_with_nokogiri?
18
+ Webrat.html_nokogiri_document(stringlike)
19
+ else
20
+ Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
21
+ end
22
+ end
23
+
24
+ def self.xml_document(stringlike) #:nodoc:
25
+ if Webrat.configuration.parse_with_nokogiri?
26
+ Webrat.xml_nokogiri_document(stringlike)
27
+ else
28
+ Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
29
+ end
30
+ end
31
+
32
+ def self.to_html(element)
33
+ if Webrat.configuration.parse_with_nokogiri?
34
+ element.to_html
35
+ else
36
+ element.to_s
37
+ end
38
+ end
39
+
40
+ def self.inner_html(element)
41
+ if Webrat.configuration.parse_with_nokogiri?
42
+ element.inner_html
43
+ else
44
+ element.text
45
+ end
46
+ end
47
+
48
+ def self.all_inner_text(element)
49
+ if Webrat.configuration.parse_with_nokogiri?
50
+ element.inner_text
51
+ else
52
+ Hpricot(element.to_s).children.first.inner_text
53
+ end
54
+ end
55
+
56
+ def self.inner_text(element)
57
+ if Webrat.configuration.parse_with_nokogiri?
58
+ element.inner_text
59
+ else
60
+ if defined?(Hpricot::Doc) && element.is_a?(Hpricot::Doc)
61
+ element.inner_text
62
+ else
63
+ element.text
64
+ end
65
+ end
66
+ end
67
+
68
+ def self.xpath_to(element)
69
+ if Webrat.configuration.parse_with_nokogiri?
70
+ element.path
71
+ else
72
+ element.xpath
73
+ end
74
+ end
75
+
76
+ def self.attribute(element, attribute_name)
77
+ return element[attribute_name] if element.is_a?(Hash)
78
+
79
+ if Webrat.configuration.parse_with_nokogiri?
80
+ element[attribute_name]
81
+ else
82
+ element.attributes[attribute_name]
83
+ end
84
+ end
85
+
86
+ def self.xpath_at(*args)
87
+ xpath_search(*args).first
88
+ end
89
+
90
+ def self.css_at(*args)
91
+ css_search(*args).first
92
+ end
93
+
94
+ def self.xpath_search(element, *searches)
95
+ searches.flatten.map do |search|
96
+ if Webrat.configuration.parse_with_nokogiri?
97
+ element.xpath(search)
98
+ else
99
+ REXML::XPath.match(element, search)
100
+ end
101
+ end.flatten.compact
102
+ end
103
+
104
+ def self.css_search(element, *searches) #:nodoc:
105
+ xpath_search(element, css_to_xpath(*searches))
106
+ end
107
+
108
+ def self.css_to_xpath(*selectors)
109
+ selectors.map do |rule|
110
+ Nokogiri::CSS.xpath_for(rule, :prefix => ".//")
111
+ end.flatten.uniq
112
+ end
113
+
114
+ end
115
+ end
@@ -0,0 +1,19 @@
1
+ module Webrat
2
+
3
+ def self.hpricot_document(stringlike)
4
+ return stringlike.dom if stringlike.respond_to?(:dom)
5
+
6
+ if Hpricot::Doc === stringlike
7
+ stringlike
8
+ elsif Hpricot::Elements === stringlike
9
+ stringlike
10
+ elsif StringIO === stringlike
11
+ Hpricot(stringlike.string)
12
+ elsif stringlike.respond_to?(:body)
13
+ Hpricot(stringlike.body.to_s)
14
+ else
15
+ Hpricot(stringlike.to_s)
16
+ end
17
+ end
18
+
19
+ end
@@ -0,0 +1,76 @@
1
+ require "webrat/core_extensions/meta_class"
2
+
3
+ module Webrat
4
+
5
+ def self.nokogiri_document(stringlike) #:nodoc:
6
+ return stringlike.dom if stringlike.respond_to?(:dom)
7
+
8
+ if Nokogiri::HTML::Document === stringlike
9
+ stringlike
10
+ elsif Nokogiri::XML::NodeSet === stringlike
11
+ stringlike
12
+ elsif StringIO === stringlike
13
+ Nokogiri::HTML(stringlike.string)
14
+ elsif stringlike.respond_to?(:body)
15
+ Nokogiri::HTML(stringlike.body.to_s)
16
+ else
17
+ Nokogiri::HTML(stringlike.to_s)
18
+ end
19
+ end
20
+
21
+ def self.html_nokogiri_document(stringlike) #:nodoc:
22
+ return stringlike.dom if stringlike.respond_to?(:dom)
23
+
24
+ if Nokogiri::HTML::Document === stringlike
25
+ stringlike
26
+ elsif Nokogiri::XML::NodeSet === stringlike
27
+ stringlike
28
+ elsif StringIO === stringlike
29
+ Nokogiri::HTML(stringlike.string)
30
+ elsif stringlike.respond_to?(:body)
31
+ Nokogiri::HTML(stringlike.body.to_s)
32
+ else
33
+ Nokogiri::HTML(stringlike.to_s)
34
+ end
35
+ end
36
+
37
+ def self.xml_nokogiri_document(stringlike) #:nodoc:
38
+ return stringlike.dom if stringlike.respond_to?(:dom)
39
+
40
+ if Nokogiri::HTML::Document === stringlike
41
+ stringlike
42
+ elsif Nokogiri::XML::NodeSet === stringlike
43
+ stringlike
44
+ elsif StringIO === stringlike
45
+ Nokogiri::XML(stringlike.string)
46
+ elsif stringlike.respond_to?(:body)
47
+ Nokogiri::XML(stringlike.body.to_s)
48
+ else
49
+ Nokogiri::XML(stringlike.to_s)
50
+ end
51
+ end
52
+
53
+ def self.define_dom_method(object, dom) #:nodoc:
54
+ object.meta_class.send(:define_method, :dom) do
55
+ dom
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+
62
+ module Nokogiri #:nodoc:
63
+ module CSS #:nodoc:
64
+ class XPathVisitor #:nodoc:
65
+
66
+ def visit_pseudo_class_text(node) #:nodoc:
67
+ "@type='text'"
68
+ end
69
+
70
+ def visit_pseudo_class_password(node) #:nodoc:
71
+ "@type='password'"
72
+ end
73
+
74
+ end
75
+ end
76
+ end