futuresinc-webrat 0.4.4.99

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 (76) hide show
  1. data/History.txt +333 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.rdoc +85 -0
  4. data/Rakefile +156 -0
  5. data/install.rb +1 -0
  6. data/lib/webrat/core/configuration.rb +98 -0
  7. data/lib/webrat/core/elements/area.rb +31 -0
  8. data/lib/webrat/core/elements/element.rb +33 -0
  9. data/lib/webrat/core/elements/field.rb +403 -0
  10. data/lib/webrat/core/elements/form.rb +103 -0
  11. data/lib/webrat/core/elements/label.rb +31 -0
  12. data/lib/webrat/core/elements/link.rb +92 -0
  13. data/lib/webrat/core/elements/select_option.rb +35 -0
  14. data/lib/webrat/core/locators/area_locator.rb +38 -0
  15. data/lib/webrat/core/locators/button_locator.rb +54 -0
  16. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  17. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  18. data/lib/webrat/core/locators/field_locator.rb +25 -0
  19. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  20. data/lib/webrat/core/locators/form_locator.rb +19 -0
  21. data/lib/webrat/core/locators/label_locator.rb +34 -0
  22. data/lib/webrat/core/locators/link_locator.rb +66 -0
  23. data/lib/webrat/core/locators/locator.rb +20 -0
  24. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  25. data/lib/webrat/core/locators.rb +20 -0
  26. data/lib/webrat/core/logging.rb +21 -0
  27. data/lib/webrat/core/matchers/have_content.rb +73 -0
  28. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  29. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  30. data/lib/webrat/core/matchers/have_xpath.rb +147 -0
  31. data/lib/webrat/core/matchers.rb +4 -0
  32. data/lib/webrat/core/methods.rb +61 -0
  33. data/lib/webrat/core/mime.rb +29 -0
  34. data/lib/webrat/core/save_and_open_page.rb +50 -0
  35. data/lib/webrat/core/scope.rb +350 -0
  36. data/lib/webrat/core/session.rb +281 -0
  37. data/lib/webrat/core/xml/hpricot.rb +19 -0
  38. data/lib/webrat/core/xml/nokogiri.rb +76 -0
  39. data/lib/webrat/core/xml/rexml.rb +24 -0
  40. data/lib/webrat/core/xml.rb +115 -0
  41. data/lib/webrat/core.rb +14 -0
  42. data/lib/webrat/core_extensions/blank.rb +58 -0
  43. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  44. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  45. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  46. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  47. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  48. data/lib/webrat/mechanize.rb +74 -0
  49. data/lib/webrat/merb.rb +9 -0
  50. data/lib/webrat/merb_session.rb +65 -0
  51. data/lib/webrat/rack.rb +24 -0
  52. data/lib/webrat/rails.rb +105 -0
  53. data/lib/webrat/rspec-rails.rb +13 -0
  54. data/lib/webrat/selenium/application_server.rb +71 -0
  55. data/lib/webrat/selenium/location_strategy_javascript/button.js +12 -0
  56. data/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  57. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  58. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +9 -0
  59. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  60. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  61. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  62. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  63. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  64. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  65. data/lib/webrat/selenium/matchers.rb +4 -0
  66. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  67. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  68. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  69. data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
  70. data/lib/webrat/selenium/selenium_session.rb +241 -0
  71. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  72. data/lib/webrat/selenium.rb +80 -0
  73. data/lib/webrat/sinatra.rb +44 -0
  74. data/lib/webrat.rb +34 -0
  75. data/vendor/selenium-server.jar +0 -0
  76. metadata +147 -0
@@ -0,0 +1,48 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class MerbApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ system start_command
8
+ end
9
+
10
+ def stop
11
+ silence_stream(STDOUT) do
12
+ pid = File.read(pid_file)
13
+ system("kill -9 #{pid}")
14
+ FileUtils.rm_f pid_file
15
+ end
16
+ end
17
+
18
+ def fail
19
+ $stderr.puts
20
+ $stderr.puts
21
+ $stderr.puts "==> Failed to boot the Merb application server... exiting!"
22
+ $stderr.puts
23
+ $stderr.puts "Verify you can start a Merb server on port #{Webrat.configuration.application_port} with the following command:"
24
+ $stderr.puts
25
+ $stderr.puts " #{start_command}"
26
+ exit
27
+ end
28
+
29
+ def pid_file
30
+ "log/merb.#{Webrat.configuration.application_port}.pid"
31
+ end
32
+
33
+ def start_command
34
+ "#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
35
+ end
36
+
37
+ def merb_command
38
+ if File.exist?('bin/merb')
39
+ merb_cmd = 'bin/merb'
40
+ else
41
+ merb_cmd = 'merb'
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,42 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class RailsApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ system start_command
8
+ end
9
+
10
+ def stop
11
+ silence_stream(STDOUT) do
12
+ system stop_command
13
+ end
14
+ end
15
+
16
+ def fail
17
+ $stderr.puts
18
+ $stderr.puts
19
+ $stderr.puts "==> Failed to boot the Rails application server... exiting!"
20
+ $stderr.puts
21
+ $stderr.puts "Verify you can start a Rails server on port #{Webrat.configuration.application_port} with the following command:"
22
+ $stderr.puts
23
+ $stderr.puts " #{start_command}"
24
+ exit
25
+ end
26
+
27
+ def pid_file
28
+ prepare_pid_file("#{RAILS_ROOT}/tmp/pids", "mongrel_selenium.pid")
29
+ end
30
+
31
+ def start_command
32
+ "mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &"
33
+ end
34
+
35
+ def stop_command
36
+ "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ PatternMatcher.strategies['evalregex'] = function(regexpString) {
2
+ this.regexp = eval(regexpString);
3
+ this.matches = function(actual) {
4
+ return this.regexp.test(actual);
5
+ };
6
+ };
@@ -0,0 +1,80 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class SeleniumRCServer
5
+
6
+ def self.boot
7
+ new.boot
8
+ end
9
+
10
+ def boot
11
+ return if selenium_grid?
12
+
13
+ start
14
+ wait
15
+ stop_at_exit
16
+ end
17
+
18
+ def start
19
+ silence_stream(STDOUT) do
20
+ remote_control.start :background => true
21
+ end
22
+ end
23
+
24
+ def stop_at_exit
25
+ at_exit do
26
+ stop
27
+ end
28
+ end
29
+
30
+ def remote_control
31
+ return @remote_control if @remote_control
32
+
33
+ @remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5)
34
+ @remote_control.jar_file = jar_path
35
+
36
+ return @remote_control
37
+ end
38
+
39
+ def jar_path
40
+ File.expand_path(__FILE__ + "../../../../../vendor/selenium-server.jar")
41
+ end
42
+
43
+ def selenium_grid?
44
+ Webrat.configuration.selenium_server_address
45
+ end
46
+
47
+ def wait
48
+ $stderr.print "==> Waiting for Selenium RC server on port #{Webrat.configuration.selenium_server_port}... "
49
+ wait_for_socket
50
+ $stderr.print "Ready!\n"
51
+ rescue SocketError
52
+ fail
53
+ end
54
+
55
+ def wait_for_socket
56
+ silence_stream(STDOUT) do
57
+ TCPSocket.wait_for_service_with_timeout \
58
+ :host => (Webrat.configuration.selenium_server_address || "0.0.0.0"),
59
+ :port => Webrat.configuration.selenium_server_port,
60
+ :timeout => 15 # seconds
61
+ end
62
+ end
63
+
64
+ def fail
65
+ $stderr.puts
66
+ $stderr.puts
67
+ $stderr.puts "==> Failed to boot the Selenium RC server... exiting!"
68
+ exit
69
+ end
70
+
71
+ def stop
72
+ silence_stream(STDOUT) do
73
+ ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5).stop
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,241 @@
1
+ require "webrat/core/save_and_open_page"
2
+ require "webrat/selenium/selenium_rc_server"
3
+ require "webrat/selenium/application_server"
4
+
5
+ module Webrat
6
+ class TimeoutError < WebratError
7
+ end
8
+
9
+ class SeleniumResponse
10
+ attr_reader :body
11
+ attr_reader :session
12
+
13
+ def initialize(session, body)
14
+ @session = session
15
+ @body = body
16
+ end
17
+
18
+ def selenium
19
+ session.selenium
20
+ end
21
+ end
22
+
23
+ class SeleniumSession
24
+ include Webrat::SaveAndOpenPage
25
+
26
+ def initialize(*args) # :nodoc:
27
+ end
28
+
29
+ def simulate
30
+ end
31
+
32
+ def automate
33
+ yield
34
+ end
35
+
36
+ def visit(url)
37
+ selenium.open(url)
38
+ end
39
+
40
+ webrat_deprecate :visits, :visit
41
+
42
+ def fill_in(field_identifier, options)
43
+ locator = "webrat=#{Regexp.escape(field_identifier)}"
44
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
45
+ selenium.type(locator, "#{options[:with]}")
46
+ end
47
+
48
+ webrat_deprecate :fills_in, :fill_in
49
+
50
+ def response
51
+ SeleniumResponse.new(self, response_body)
52
+ end
53
+
54
+ def response_body #:nodoc:
55
+ selenium.get_html_source
56
+ end
57
+
58
+ def click_button(button_text_or_regexp = nil, options = {})
59
+ if button_text_or_regexp.is_a?(Hash) && options == {}
60
+ pattern, options = nil, button_text_or_regexp
61
+ elsif button_text_or_regexp
62
+ pattern = adjust_if_regexp(button_text_or_regexp)
63
+ end
64
+ pattern ||= '*'
65
+ locator = "button=#{pattern}"
66
+
67
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
68
+ selenium.click locator
69
+ end
70
+
71
+ webrat_deprecate :clicks_button, :click_button
72
+
73
+ def click_link(link_text_or_regexp, options = {})
74
+ pattern = adjust_if_regexp(link_text_or_regexp)
75
+ locator = "webratlink=#{pattern}"
76
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
77
+ selenium.click locator
78
+ end
79
+
80
+ webrat_deprecate :clicks_link, :click_link
81
+
82
+ def click_link_within(selector, link_text, options = {})
83
+ locator = "webratlinkwithin=#{selector}|#{link_text}"
84
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
85
+ selenium.click locator
86
+ end
87
+
88
+ webrat_deprecate :clicks_link_within, :click_link_within
89
+
90
+ def select(option_text, options = {})
91
+ id_or_name_or_label = options[:from]
92
+
93
+ if id_or_name_or_label
94
+ select_locator = "webrat=#{id_or_name_or_label}"
95
+ else
96
+ select_locator = "webratselectwithoption=#{option_text}"
97
+ end
98
+
99
+ selenium.wait_for_element select_locator, :timeout_in_seconds => 5
100
+ selenium.select(select_locator, option_text)
101
+ end
102
+
103
+ webrat_deprecate :selects, :select
104
+
105
+ def choose(label_text)
106
+ locator = "webrat=#{label_text}"
107
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
108
+ selenium.click locator
109
+ end
110
+
111
+ webrat_deprecate :chooses, :choose
112
+
113
+ def check(label_text)
114
+ locator = "webrat=#{label_text}"
115
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
116
+ selenium.click locator
117
+ end
118
+ alias_method :uncheck, :check
119
+
120
+ webrat_deprecate :checks, :check
121
+
122
+ def fire_event(field_identifier, event)
123
+ locator = "webrat=#{Regexp.escape(field_identifier)}"
124
+ selenium.fire_event(locator, "#{event}")
125
+ end
126
+
127
+ def key_down(field_identifier, key_code)
128
+ locator = "webrat=#{Regexp.escape(field_identifier)}"
129
+ selenium.key_down(locator, key_code)
130
+ end
131
+
132
+ def key_up(field_identifier, key_code)
133
+ locator = "webrat=#{Regexp.escape(field_identifier)}"
134
+ selenium.key_up(locator, key_code)
135
+ end
136
+
137
+ def wait_for(params={})
138
+ timeout = params[:timeout] || 5
139
+ message = params[:message] || "Timeout exceeded"
140
+
141
+ begin_time = Time.now
142
+
143
+ while (Time.now - begin_time) < timeout
144
+ value = nil
145
+
146
+ begin
147
+ value = yield
148
+ rescue ::Spec::Expectations::ExpectationNotMetError, ::Selenium::CommandError, Webrat::WebratError
149
+ value = nil
150
+ end
151
+
152
+ return value if value
153
+
154
+ sleep 0.25
155
+ end
156
+
157
+ raise Webrat::TimeoutError.new(message + " (after #{timeout} sec)")
158
+ true
159
+ end
160
+
161
+ def selenium
162
+ return $browser if $browser
163
+ setup
164
+ $browser
165
+ end
166
+
167
+ webrat_deprecate :browser, :selenium
168
+
169
+
170
+ def save_and_open_screengrab
171
+ return unless File.exist?(saved_page_dir)
172
+
173
+ filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.png"
174
+
175
+ if $browser.chrome_backend?
176
+ $browser.capture_entire_page_screenshot(filename, '')
177
+ else
178
+ $browser.capture_screenshot(filename)
179
+ end
180
+ open_in_browser(filename)
181
+ end
182
+
183
+ protected
184
+
185
+ def silence_stream(stream)
186
+ old_stream = stream.dup
187
+ stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
188
+ stream.sync = true
189
+ yield
190
+ ensure
191
+ stream.reopen(old_stream)
192
+ end
193
+
194
+ def setup #:nodoc:
195
+ Webrat::Selenium::SeleniumRCServer.boot
196
+ Webrat::Selenium::ApplicationServer.boot
197
+
198
+ create_browser
199
+ $browser.start
200
+
201
+ extend_selenium
202
+ define_location_strategies
203
+ $browser.window_maximize
204
+ end
205
+
206
+
207
+ def create_browser
208
+ $browser = ::Selenium::Client::Driver.new(Webrat.configuration.selenium_server_address || "localhost",
209
+ Webrat.configuration.selenium_server_port, Webrat.configuration.selenium_browser_key, "http://#{Webrat.configuration.application_address}:#{Webrat.configuration.application_port}")
210
+ $browser.set_speed(0) unless Webrat.configuration.selenium_server_address
211
+
212
+ at_exit do
213
+ silence_stream(STDOUT) do
214
+ $browser.stop
215
+ end
216
+ end
217
+ end
218
+
219
+ def adjust_if_regexp(text_or_regexp) #:nodoc:
220
+ if text_or_regexp.is_a?(Regexp)
221
+ "evalregex:#{text_or_regexp.inspect}"
222
+ else
223
+ "evalregex:/#{text_or_regexp}/"
224
+ end
225
+ end
226
+
227
+ def extend_selenium #:nodoc:
228
+ extensions_file = File.join(File.dirname(__FILE__), "selenium_extensions.js")
229
+ extenions_js = File.read(extensions_file)
230
+ selenium.get_eval(extenions_js)
231
+ end
232
+
233
+ def define_location_strategies #:nodoc:
234
+ Dir[File.join(File.dirname(__FILE__), "location_strategy_javascript", "*.js")].sort.each do |file|
235
+ strategy_js = File.read(file)
236
+ strategy_name = File.basename(file, '.js')
237
+ selenium.add_location_strategy(strategy_name, strategy_js)
238
+ end
239
+ end
240
+ end
241
+ end
@@ -0,0 +1,35 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class SinatraApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ fork do
8
+ File.open('rack.pid', 'w') { |fp| fp.write Process.pid }
9
+ exec 'rackup', File.expand_path(Dir.pwd + '/config.ru'), '-p', Webrat.configuration.application_port.to_s
10
+ end
11
+ end
12
+
13
+ def stop
14
+ silence_stream(STDOUT) do
15
+ pid = File.read(pid_file)
16
+ system("kill -9 #{pid}")
17
+ FileUtils.rm_f pid_file
18
+ end
19
+ end
20
+
21
+ def fail
22
+ $stderr.puts
23
+ $stderr.puts
24
+ $stderr.puts "==> Failed to boot the Sinatra application server... exiting!"
25
+ exit
26
+ end
27
+
28
+ def pid_file
29
+ prepare_pid_file(Dir.pwd, 'rack.pid')
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,80 @@
1
+ require "webrat"
2
+ gem "selenium-client", ">=1.2.14"
3
+ require "selenium/client"
4
+ require "webrat/selenium/selenium_session"
5
+ require "webrat/selenium/matchers"
6
+ require "webrat/core_extensions/tcp_socket"
7
+
8
+ module Webrat
9
+ # To use Webrat's Selenium support, you'll need the selenium-client gem installed.
10
+ # Activate it with (for example, in your <tt>env.rb</tt>):
11
+ #
12
+ # require "webrat"
13
+ #
14
+ # Webrat.configure do |config|
15
+ # config.mode = :selenium
16
+ # end
17
+ #
18
+ # == Dropping down to the selenium-client API
19
+ #
20
+ # If you ever need to do something with Selenium not provided in the Webrat API,
21
+ # you can always drop down to the selenium-client API using the <tt>selenium</tt> method.
22
+ # For example:
23
+ #
24
+ # When "I drag the photo to the left" do
25
+ # selenium.dragdrop("id=photo_123", "+350, 0")
26
+ # end
27
+ #
28
+ # == Choosing the underlying framework to test
29
+ #
30
+ # Webrat assumes you're using rails by default but it can also work with sinatra
31
+ # and merb. To take advantage of this you can use the configuration block to
32
+ # set the application_framework variable.
33
+ # require "webrat"
34
+ #
35
+ # Webrat.configure do |config|
36
+ # config.mode = :selenium
37
+ # config.application_port = 4567
38
+ # config.application_framework = :sinatra # could also be :merb
39
+ # end
40
+ #
41
+ # == Auto-starting of the appserver and java server
42
+ #
43
+ # Webrat will automatically start the Selenium Java server process and an instance
44
+ # of Mongrel when a test is run. The Mongrel will run in the "selenium" environment
45
+ # instead of "test", so ensure you've got that defined, and will run on port
46
+ # Webrat.configuration.application_port.
47
+ #
48
+ # == Waiting
49
+ #
50
+ # In order to make writing Selenium tests as easy as possible, Webrat will automatically
51
+ # wait for the correct elements to exist on the page when trying to manipulate them
52
+ # with methods like <tt>fill_in</tt>, etc. In general, this means you should be able to write
53
+ # your Webrat::Selenium tests ignoring the concurrency issues that can plague in-browser
54
+ # testing, so long as you're using the Webrat API.
55
+ module Selenium
56
+ module Methods
57
+ def response
58
+ webrat_session.response
59
+ end
60
+
61
+ def wait_for(*args, &block)
62
+ webrat_session.wait_for(*args, &block)
63
+ end
64
+
65
+ def save_and_open_screengrab
66
+ webrat_session.save_and_open_screengrab
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ if defined?(ActionController::IntegrationTest)
73
+ module ActionController #:nodoc:
74
+ IntegrationTest.class_eval do
75
+ include Webrat::Methods
76
+ include Webrat::Selenium::Methods
77
+ include Webrat::Selenium::Matchers
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,44 @@
1
+ require "webrat/rack"
2
+ require "sinatra/test"
3
+
4
+ module Webrat
5
+ class SinatraSession < RackSession
6
+ include Sinatra::Test
7
+
8
+ attr_reader :request, :response
9
+
10
+ def initialize(context = nil)
11
+ super(context)
12
+
13
+ app = context.respond_to?(:app) ? context.app : Sinatra::Application
14
+ @browser = Sinatra::TestHarness.new(app)
15
+ end
16
+
17
+ %w(get head post put delete).each do |verb|
18
+ class_eval <<-RUBY
19
+ def #{verb}(path, data, headers = {})
20
+ params = data.inject({}) do |data, (key,value)|
21
+ data[key] = Rack::Utils.unescape(value)
22
+ data
23
+ end
24
+ headers["HTTP_HOST"] = "www.example.com"
25
+ @browser.#{verb}(path, params, headers)
26
+ end
27
+ RUBY
28
+ end
29
+
30
+ def response_body
31
+ @browser.body
32
+ end
33
+
34
+ def response_code
35
+ @browser.status
36
+ end
37
+
38
+ private
39
+
40
+ def response
41
+ @browser.response
42
+ end
43
+ end
44
+ end
data/lib/webrat.rb ADDED
@@ -0,0 +1,34 @@
1
+ require "rubygems"
2
+
3
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
4
+
5
+ module Webrat
6
+ # The common base class for all exceptions raised by Webrat.
7
+ class WebratError < StandardError
8
+ end
9
+
10
+ VERSION = '0.4.4.99'
11
+
12
+ def self.require_xml
13
+ gem "nokogiri", ">= 1.0.6"
14
+
15
+ if on_java?
16
+ # We need Nokogiri's CSS to XPath support, even if using REXML and Hpricot for parsing and searching
17
+ require "nokogiri/css"
18
+ require "hpricot"
19
+ require "rexml/document"
20
+ else
21
+ require "nokogiri"
22
+ require "webrat/core/xml/nokogiri"
23
+ end
24
+ end
25
+
26
+ def self.on_java?
27
+ RUBY_PLATFORM =~ /java/
28
+ end
29
+
30
+ end
31
+
32
+ Webrat.require_xml
33
+
34
+ require "webrat/core"
Binary file