webrat 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +4 -0
- data/.gitignore +15 -0
- data/History.txt +44 -8
- data/Rakefile +80 -66
- data/VERSION +1 -0
- data/lib/webrat.rb +7 -12
- data/lib/webrat/core/configuration.rb +7 -3
- 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 +63 -55
- 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 -12
- data/lib/webrat/core/elements/select_option.rb +9 -9
- data/lib/webrat/core/locators.rb +2 -2
- 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 +21 -13
- data/lib/webrat/core/locators/locator.rb +5 -5
- data/lib/webrat/core/locators/select_option_locator.rb +11 -11
- 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 +26 -26
- data/lib/webrat/core/methods.rb +13 -11
- data/lib/webrat/core/mime.rb +3 -3
- data/lib/webrat/core/save_and_open_page.rb +14 -16
- data/lib/webrat/core/scope.rb +53 -53
- data/lib/webrat/core/session.rb +23 -14
- data/lib/webrat/core/xml.rb +16 -16
- 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_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 +8 -8
- data/lib/webrat/mechanize.rb +9 -9
- data/lib/webrat/merb.rb +1 -1
- data/lib/webrat/merb_multipart_support.rb +27 -0
- data/lib/webrat/merb_session.rb +39 -24
- data/lib/webrat/rack_test.rb +32 -0
- data/lib/webrat/rails.rb +2 -2
- data/lib/webrat/rspec-rails.rb +3 -6
- data/lib/webrat/selenium.rb +2 -1
- 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/button.js +14 -7
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +4 -1
- data/lib/webrat/selenium/matchers.rb +1 -1
- 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/selenium_rc_server.rb +25 -19
- data/lib/webrat/selenium/selenium_session.rb +24 -17
- data/lib/webrat/selenium/silence_stream.rb +18 -0
- data/spec/fakes/test_session.rb +34 -0
- data/spec/integration/merb/.gitignore +21 -0
- data/spec/integration/merb/Rakefile +35 -0
- data/spec/integration/merb/app/controllers/application.rb +2 -0
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/spec/integration/merb/app/controllers/testing.rb +27 -0
- data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
- data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
- data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
- data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
- data/spec/integration/merb/config/environments/development.rb +15 -0
- data/spec/integration/merb/config/environments/rake.rb +11 -0
- data/spec/integration/merb/config/environments/test.rb +14 -0
- data/spec/integration/merb/config/init.rb +25 -0
- data/spec/integration/merb/config/rack.rb +11 -0
- data/spec/integration/merb/config/router.rb +34 -0
- data/spec/integration/merb/spec/spec.opts +1 -0
- data/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/spec/integration/merb/spec/webrat_spec.rb +39 -0
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/spec/integration/rack/Rakefile +5 -0
- data/spec/integration/rack/rack_app.rb +16 -0
- data/spec/integration/rack/test/test_helper.rb +20 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
- data/spec/integration/rails/.gitignore +3 -0
- data/spec/integration/rails/Rakefile +30 -0
- data/spec/integration/rails/app/controllers/application.rb +15 -0
- data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
- data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
- data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
- data/spec/integration/rails/app/views/links/show.html.erb +5 -0
- data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
- data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
- data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
- data/spec/integration/rails/config/boot.rb +109 -0
- data/spec/integration/rails/config/environment.rb +12 -0
- data/spec/integration/rails/config/environments/development.rb +17 -0
- data/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/spec/integration/rails/config/environments/test.rb +22 -0
- data/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/spec/integration/rails/config/locales/en.yml +5 -0
- data/spec/integration/rails/config/routes.rb +18 -0
- data/spec/integration/rails/public/404.html +30 -0
- data/spec/integration/rails/public/422.html +30 -0
- data/spec/integration/rails/public/500.html +33 -0
- data/spec/integration/rails/script/about +4 -0
- data/spec/integration/rails/script/console +3 -0
- data/spec/integration/rails/script/dbconsole +3 -0
- data/spec/integration/rails/script/destroy +3 -0
- data/spec/integration/rails/script/generate +3 -0
- data/spec/integration/rails/script/performance/benchmarker +3 -0
- data/spec/integration/rails/script/performance/profiler +3 -0
- data/spec/integration/rails/script/performance/request +3 -0
- data/spec/integration/rails/script/plugin +3 -0
- data/spec/integration/rails/script/process/inspector +3 -0
- data/spec/integration/rails/script/process/reaper +3 -0
- data/spec/integration/rails/script/process/spawner +3 -0
- data/spec/integration/rails/script/runner +3 -0
- data/spec/integration/rails/script/server +3 -0
- data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
- data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +97 -0
- data/spec/integration/rails/test/test_helper.rb +25 -0
- data/spec/integration/sinatra/Rakefile +5 -0
- data/spec/integration/sinatra/classic_app.rb +64 -0
- data/spec/integration/sinatra/modular_app.rb +16 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/spec/private/core/configuration_spec.rb +116 -0
- data/spec/private/core/field_spec.rb +85 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/logging_spec.rb +10 -0
- data/spec/private/core/session_spec.rb +195 -0
- data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/spec/private/merb/attaches_file_spec.rb +93 -0
- data/spec/private/merb/merb_session_spec.rb +61 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_session_spec.rb +110 -0
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/spec/public/basic_auth_spec.rb +24 -0
- data/spec/public/check_spec.rb +191 -0
- data/spec/public/choose_spec.rb +118 -0
- data/spec/public/click_area_spec.rb +106 -0
- data/spec/public/click_button_spec.rb +496 -0
- data/spec/public/click_link_spec.rb +511 -0
- data/spec/public/fill_in_spec.rb +209 -0
- data/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/spec/public/locators/field_labeled_spec.rb +172 -0
- data/spec/public/locators/field_with_id_spec.rb +16 -0
- data/spec/public/matchers/contain_spec.rb +114 -0
- data/spec/public/matchers/have_selector_spec.rb +142 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +70 -0
- data/spec/public/select_date_spec.rb +112 -0
- data/spec/public/select_datetime_spec.rb +137 -0
- data/spec/public/select_spec.rb +249 -0
- data/spec/public/select_time_spec.rb +100 -0
- 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/public/set_hidden_field_spec.rb +5 -0
- data/spec/public/submit_form_spec.rb +5 -0
- data/spec/public/visit_spec.rb +58 -0
- data/spec/public/within_spec.rb +177 -0
- data/spec/rcov.opts +1 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +50 -0
- data/vendor/selenium-server.jar +0 -0
- data/webrat.gemspec +340 -0
- metadata +248 -33
- data/lib/webrat/selenium/application_server.rb +0 -71
- 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/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}
|
@@ -67,6 +69,7 @@ For example:
|
|
67
69
|
|
68
70
|
# For backwards compatibility -- removing in 1.0
|
69
71
|
def current_page #:nodoc:
|
72
|
+
warn "current_page is deprecated and will be going away in the next release. Use current_url instead."
|
70
73
|
page = OpenStruct.new
|
71
74
|
page.url = @current_url
|
72
75
|
page.http_method = @http_method
|
@@ -77,7 +80,7 @@ For example:
|
|
77
80
|
def doc_root #:nodoc:
|
78
81
|
nil
|
79
82
|
end
|
80
|
-
|
83
|
+
|
81
84
|
def header(key, value)
|
82
85
|
@custom_headers[key] = value
|
83
86
|
end
|
@@ -100,11 +103,8 @@ For example:
|
|
100
103
|
h['HTTP_REFERER'] = @current_url if @current_url
|
101
104
|
|
102
105
|
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
|
106
|
+
|
107
|
+
process_request(http_method, url, data, h)
|
108
108
|
|
109
109
|
save_and_open_page if exception_caught? && Webrat.configuration.open_error_files?
|
110
110
|
raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code?
|
@@ -122,13 +122,13 @@ For example:
|
|
122
122
|
|
123
123
|
return response
|
124
124
|
end
|
125
|
-
|
125
|
+
|
126
126
|
def check_for_infinite_redirects
|
127
127
|
if current_url == response_location
|
128
128
|
@_identical_redirect_count ||= 0
|
129
129
|
@_identical_redirect_count += 1
|
130
130
|
end
|
131
|
-
|
131
|
+
|
132
132
|
if infinite_redirect_limit_exceeded?
|
133
133
|
raise InfiniteRedirectError.new("#{Webrat.configuration.infinite_redirect_limit} redirects to the same URL (#{current_url.inspect})")
|
134
134
|
end
|
@@ -138,13 +138,13 @@ For example:
|
|
138
138
|
Webrat.configuration.infinite_redirect_limit &&
|
139
139
|
(@_identical_redirect_count || 0) > Webrat.configuration.infinite_redirect_limit
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
def success_code? #:nodoc:
|
143
143
|
(200..499).include?(response_code)
|
144
144
|
end
|
145
145
|
|
146
146
|
def redirect? #:nodoc:
|
147
|
-
response_code / 100 == 3
|
147
|
+
(response_code / 100).to_i == 3
|
148
148
|
end
|
149
149
|
|
150
150
|
def internal_redirect?
|
@@ -154,7 +154,7 @@ For example:
|
|
154
154
|
response_location_host_domain = response_location_host.split('.')[-2..-1].join('.') rescue response_location_host
|
155
155
|
current_host_domain == response_location_host_domain
|
156
156
|
end
|
157
|
-
|
157
|
+
|
158
158
|
#easy helper to pull out where we were redirected to
|
159
159
|
def redirected_to
|
160
160
|
redirect? ? response_location : nil
|
@@ -256,15 +256,24 @@ For example:
|
|
256
256
|
def_delegators :current_scope, :field_by_xpath
|
257
257
|
def_delegators :current_scope, :field_with_id
|
258
258
|
def_delegators :current_scope, :select_option
|
259
|
+
def_delegators :current_scope, :field_named
|
259
260
|
|
260
261
|
private
|
261
262
|
|
263
|
+
def process_request(http_method, url, data, headers)
|
264
|
+
if headers.empty?
|
265
|
+
send "#{http_method}", url, data || {}
|
266
|
+
else
|
267
|
+
send "#{http_method}", url, data || {}, headers
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
262
271
|
def response_location
|
263
272
|
response.headers["Location"]
|
264
273
|
end
|
265
274
|
|
266
275
|
def current_host
|
267
|
-
URI.parse(current_url).host || "www.example.com"
|
276
|
+
URI.parse(current_url).host || @custom_headers["Host"] || "www.example.com"
|
268
277
|
end
|
269
278
|
|
270
279
|
def response_location_host
|
@@ -276,6 +285,6 @@ For example:
|
|
276
285
|
@_scopes = nil
|
277
286
|
@_page_scope = nil
|
278
287
|
end
|
279
|
-
|
288
|
+
|
280
289
|
end
|
281
290
|
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
|
@@ -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
|
@@ -1,27 +1,27 @@
|
|
1
1
|
class TCPSocket
|
2
|
-
|
2
|
+
|
3
3
|
def self.wait_for_service_with_timeout(options)
|
4
4
|
start_time = Time.now
|
5
|
-
|
5
|
+
|
6
6
|
until listening_service?(options)
|
7
7
|
verbose_wait
|
8
|
-
|
8
|
+
|
9
9
|
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
10
10
|
raise SocketError.new("Socket did not open within #{options[:timeout]} seconds")
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def self.wait_for_service_termination_with_timeout(options)
|
16
16
|
start_time = Time.now
|
17
|
-
|
17
|
+
|
18
18
|
while listening_service?(options)
|
19
19
|
verbose_wait
|
20
|
-
|
20
|
+
|
21
21
|
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
22
22
|
raise SocketError.new("Socket did not terminate within #{options[:timeout]} seconds")
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
|
-
end
|
26
|
+
|
27
|
+
end
|
data/lib/webrat/mechanize.rb
CHANGED
@@ -2,14 +2,14 @@ require "mechanize"
|
|
2
2
|
|
3
3
|
module Webrat #:nodoc:
|
4
4
|
class MechanizeSession < Session #:nodoc:
|
5
|
-
|
5
|
+
|
6
6
|
attr_accessor :response
|
7
7
|
alias :page :response
|
8
|
-
|
8
|
+
|
9
9
|
def request_page(url, http_method, data) #:nodoc:
|
10
10
|
super(absolute_url(url), http_method, data)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def get(url, data, headers_argument_not_used = nil)
|
14
14
|
@response = mechanize.get(url, data)
|
15
15
|
end
|
@@ -26,7 +26,7 @@ module Webrat #:nodoc:
|
|
26
26
|
end
|
27
27
|
@response = mechanize.post(url, post_data)
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def response_body
|
31
31
|
@response.content
|
32
32
|
end
|
@@ -34,13 +34,13 @@ module Webrat #:nodoc:
|
|
34
34
|
def response_code
|
35
35
|
@response.code.to_i
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
def mechanize
|
39
39
|
@mechanize ||= WWW::Mechanize.new
|
40
40
|
end
|
41
41
|
|
42
42
|
def_delegators :mechanize, :basic_auth
|
43
|
-
|
43
|
+
|
44
44
|
def absolute_url(url) #:nodoc:
|
45
45
|
current_host, current_path = split_current_url
|
46
46
|
if url =~ Regexp.new('^https?://')
|
@@ -53,13 +53,13 @@ module Webrat #:nodoc:
|
|
53
53
|
url
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
private
|
58
58
|
def split_current_url
|
59
59
|
current_url =~ Regexp.new('^(https?://[^/]+)(/.*)?')
|
60
60
|
[Regexp.last_match(1), Regexp.last_match(2)]
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
def absolute_path(current_path, url)
|
64
64
|
levels_up = url.split('/').find_all { |x| x == '..' }.size
|
65
65
|
ancestor = if current_path.nil?
|
@@ -67,7 +67,7 @@ module Webrat #:nodoc:
|
|
67
67
|
else
|
68
68
|
current_path.split("/")[0..(-1 - levels_up)].join("/")
|
69
69
|
end
|
70
|
-
descendent = url.split("/")[levels_up..-1]
|
70
|
+
descendent = url.split("/")[levels_up..-1].join
|
71
71
|
"#{ancestor}/#{descendent}"
|
72
72
|
end
|
73
73
|
end
|