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/History.txt
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
== 0.4.5 / ?
|
2
|
+
|
3
|
+
* Major enhancements
|
4
|
+
|
5
|
+
* Improve performance (~2x) on JRuby by supporting Nokogiri
|
6
|
+
|
7
|
+
* Minor enhancements
|
8
|
+
|
9
|
+
* Added support for field_labeled_locators ending in non word characters
|
10
|
+
lh 148 (Zach Dennis)
|
11
|
+
* Filled in tests on click link lh 195 (diabolo)
|
12
|
+
* Added current_url to selenium session lh 215 (Luke Amdor)
|
13
|
+
* Added silence spec to selenium lh 238 (Martin Gamsjaeger aka snusnu)
|
14
|
+
* Added ability to configure the browser startup timeout for selenium lh 242 (Mike Gaffney)
|
15
|
+
|
16
|
+
== 0.4.4 / 2009-04-06
|
17
|
+
|
18
|
+
* Major enhancements
|
19
|
+
|
20
|
+
* Make selenium process management code more robust and informative
|
21
|
+
|
22
|
+
* Minor enhancements
|
23
|
+
|
24
|
+
* Add support for Rails javascript post links (Mark Menard)
|
25
|
+
* Upgrade selenium-client dependency to 1.2.14, and update for new waiting
|
26
|
+
API (Balint Erdi)
|
27
|
+
* Change default app environment from "selenium" to "test"
|
28
|
+
|
29
|
+
* Bug fixes
|
30
|
+
|
31
|
+
* Don't create a new instance of WWW::Mechanize for each request
|
32
|
+
(Mark Menard)
|
33
|
+
* Select fields with duplicate selected options sent an incorrect value (Noah Davis)
|
34
|
+
|
1
35
|
== 0.4.3 / 2009-03-17
|
2
36
|
|
3
37
|
* Minor enhancements
|
data/Rakefile
CHANGED
@@ -106,7 +106,7 @@ end
|
|
106
106
|
|
107
107
|
namespace :spec do
|
108
108
|
desc "Run the integration specs"
|
109
|
-
task :integration => ["integration:rails", "integration:merb", "integration:sinatra"]
|
109
|
+
task :integration => ["integration:rails", "integration:merb", "integration:sinatra", "integration:rack"]
|
110
110
|
|
111
111
|
namespace :integration do
|
112
112
|
desc "Run the Rails integration specs"
|
@@ -140,7 +140,15 @@ namespace :spec do
|
|
140
140
|
task :sinatra do
|
141
141
|
Dir.chdir "spec/integration/sinatra" do
|
142
142
|
result = system "rake test"
|
143
|
-
raise "Sinatra
|
143
|
+
raise "Sinatra integration tests failed" unless result
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
desc "Run the Sinatra integration specs"
|
148
|
+
task :rack do
|
149
|
+
Dir.chdir "spec/integration/rack" do
|
150
|
+
result = system "rake test"
|
151
|
+
raise "Rack integration tests failed" unless result
|
144
152
|
end
|
145
153
|
end
|
146
154
|
end
|
@@ -148,4 +156,9 @@ end
|
|
148
156
|
|
149
157
|
task :default => :spec
|
150
158
|
|
151
|
-
task :precommit => ["spec", "spec:jruby", "spec:integration"]
|
159
|
+
task :precommit => ["spec", "spec:jruby", "spec:integration"]
|
160
|
+
|
161
|
+
desc 'Removes trailing whitespace'
|
162
|
+
task :whitespace do
|
163
|
+
sh %{find . -name '*.rb' -exec sed -i '' 's/ *$//g' {} \\;}
|
164
|
+
end
|
@@ -53,32 +53,25 @@ module Webrat
|
|
53
53
|
|
54
54
|
# Set the key that Selenium uses to determine the browser running. Default *firefox
|
55
55
|
attr_accessor :selenium_browser_key
|
56
|
-
|
57
|
-
# Set the timeout
|
58
|
-
attr_accessor :
|
59
|
-
|
60
|
-
# Set the timeout argument for the Selenium server startup
|
61
|
-
attr_accessor :selenium_server_startup_timeout
|
62
|
-
|
63
|
-
# Set any additional arguments (as a string) to pass to the Selenium RC jar
|
64
|
-
attr_accessor :selenium_server_args
|
56
|
+
|
57
|
+
# Set the timeout for waiting for the browser process to start
|
58
|
+
attr_accessor :selenium_browser_startup_timeout
|
65
59
|
|
66
60
|
# How many redirects to the same URL should be halted as an infinite redirect
|
67
61
|
# loop? Defaults to 10
|
68
62
|
attr_accessor :infinite_redirect_limit
|
69
|
-
|
63
|
+
|
70
64
|
def initialize # :nodoc:
|
71
65
|
self.open_error_files = true
|
72
|
-
self.parse_with_nokogiri =
|
73
|
-
self.application_environment = :
|
66
|
+
self.parse_with_nokogiri = true
|
67
|
+
self.application_environment = :test
|
74
68
|
self.application_port = 3001
|
75
69
|
self.application_address = 'localhost'
|
76
|
-
self.application_framework =
|
70
|
+
self.application_framework = :rails
|
77
71
|
self.selenium_server_port = 4444
|
78
72
|
self.infinite_redirect_limit = 10
|
79
73
|
self.selenium_browser_key = '*firefox'
|
80
|
-
self.
|
81
|
-
self.selenium_server_startup_timeout = 120
|
74
|
+
self.selenium_browser_startup_timeout = 5
|
82
75
|
end
|
83
76
|
|
84
77
|
def parse_with_nokogiri? #:nodoc:
|
@@ -93,7 +86,7 @@ module Webrat
|
|
93
86
|
# :rails, :selenium, :rack, :sinatra, :mechanize, :merb
|
94
87
|
def mode=(mode)
|
95
88
|
@mode = mode.to_sym
|
96
|
-
|
89
|
+
|
97
90
|
# This is a temporary hack to support backwards compatibility
|
98
91
|
# with Merb 1.0.8 until it's updated to use the new Webrat.configure
|
99
92
|
# syntax
|
@@ -2,21 +2,21 @@ require "webrat/core/elements/element"
|
|
2
2
|
|
3
3
|
module Webrat
|
4
4
|
class Area < Element #:nodoc:
|
5
|
-
|
5
|
+
|
6
6
|
def self.xpath_search
|
7
7
|
".//area"
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def click(method = nil, options = {})
|
11
11
|
@session.request_page(absolute_href, :get, {})
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
protected
|
15
|
-
|
15
|
+
|
16
16
|
def href
|
17
17
|
Webrat::XML.attribute(@element, "href")
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def absolute_href
|
21
21
|
if href =~ /^\?/
|
22
22
|
"#{@session.current_url}#{href}"
|
@@ -26,6 +26,6 @@ module Webrat
|
|
26
26
|
href
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
end
|
31
|
-
end
|
31
|
+
end
|
@@ -1,33 +1,33 @@
|
|
1
1
|
module Webrat
|
2
|
-
|
2
|
+
|
3
3
|
class Element # :nodoc:
|
4
|
-
|
4
|
+
|
5
5
|
def self.load_all(session, dom)
|
6
|
-
Webrat::XML.xpath_search(dom, xpath_search).map do |element|
|
6
|
+
Webrat::XML.xpath_search(dom, xpath_search).map do |element|
|
7
7
|
load(session, element)
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def self.load(session, element)
|
12
12
|
return nil if element.nil?
|
13
13
|
session.elements[Webrat::XML.xpath_to(element)] ||= self.new(session, element)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
attr_reader :element
|
17
|
-
|
17
|
+
|
18
18
|
def initialize(session, element)
|
19
19
|
@session = session
|
20
20
|
@element = element
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def path
|
24
24
|
Webrat::XML.xpath_to(@element)
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def inspect
|
28
28
|
"#<#{self.class} @element=#{element.inspect}>"
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
end
|
32
|
-
|
33
|
-
end
|
32
|
+
|
33
|
+
end
|
@@ -8,10 +8,10 @@ module Webrat
|
|
8
8
|
# Raised when Webrat is asked to manipulate a disabled form field
|
9
9
|
class DisabledFieldError < WebratError
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
class Field < Element #:nodoc:
|
13
13
|
attr_reader :value
|
14
|
-
|
14
|
+
|
15
15
|
def self.xpath_search
|
16
16
|
[".//button", ".//input", ".//textarea", ".//select"]
|
17
17
|
end
|
@@ -19,22 +19,22 @@ module Webrat
|
|
19
19
|
def self.xpath_search_excluding_hidden
|
20
20
|
[".//button", ".//input[ @type != 'hidden']", ".//textarea", ".//select"]
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def self.field_classes
|
24
24
|
@field_classes || []
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def self.inherited(klass)
|
28
28
|
@field_classes ||= []
|
29
29
|
@field_classes << klass
|
30
30
|
# raise args.inspect
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def self.load(session, element)
|
34
34
|
return nil if element.nil?
|
35
35
|
session.elements[Webrat::XML.xpath_to(element)] ||= 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
|
@@ -55,7 +55,7 @@ module Webrat
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
def initialize(*args)
|
60
60
|
super
|
61
61
|
@value = default_value
|
@@ -65,7 +65,7 @@ module Webrat
|
|
65
65
|
return nil if labels.empty?
|
66
66
|
labels.first.text
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
def id
|
70
70
|
Webrat::XML.attribute(@element, "id")
|
71
71
|
end
|
@@ -73,15 +73,15 @@ module Webrat
|
|
73
73
|
def disabled?
|
74
74
|
@element.attributes.has_key?("disabled") && Webrat::XML.attribute(@element, "disabled") != 'false'
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
def raise_error_if_disabled
|
78
78
|
return unless disabled?
|
79
79
|
raise DisabledFieldError.new("Cannot interact with disabled form element (#{self})")
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
def to_param
|
83
83
|
return nil if disabled?
|
84
|
-
|
84
|
+
|
85
85
|
case Webrat.configuration.mode
|
86
86
|
when :rails
|
87
87
|
parse_rails_request_params("#{name}=#{escaped_value}")
|
@@ -91,17 +91,17 @@ module Webrat
|
|
91
91
|
{ name => escaped_value }
|
92
92
|
end
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
def set(value)
|
96
96
|
@value = value
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
def unset
|
100
100
|
@value = default_value
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
protected
|
104
|
-
|
104
|
+
|
105
105
|
def parse_rails_request_params(params)
|
106
106
|
if defined?(ActionController::AbstractRequest)
|
107
107
|
ActionController::AbstractRequest.parse_query_parameters(params)
|
@@ -113,38 +113,38 @@ module Webrat
|
|
113
113
|
Rack::Utils.parse_nested_query(params)
|
114
114
|
end
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
def form
|
118
118
|
Form.load(@session, form_element)
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
def form_element
|
122
122
|
parent = @element.parent
|
123
|
-
|
123
|
+
|
124
124
|
while parent.respond_to?(:parent)
|
125
125
|
return parent if parent.name == 'form'
|
126
126
|
parent = parent.parent
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
def name
|
131
131
|
Webrat::XML.attribute(@element, "name")
|
132
132
|
end
|
133
|
-
|
133
|
+
|
134
134
|
def escaped_value
|
135
135
|
CGI.escape(@value.to_s)
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
def labels
|
139
139
|
@labels ||= label_elements.map do |element|
|
140
140
|
Label.load(@session, element)
|
141
141
|
end
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
def label_elements
|
145
145
|
return @label_elements unless @label_elements.nil?
|
146
146
|
@label_elements = []
|
147
|
-
|
147
|
+
|
148
148
|
parent = @element.parent
|
149
149
|
while parent.respond_to?(:parent)
|
150
150
|
if parent.name == 'label'
|
@@ -153,18 +153,18 @@ module Webrat
|
|
153
153
|
end
|
154
154
|
parent = parent.parent
|
155
155
|
end
|
156
|
-
|
156
|
+
|
157
157
|
unless id.blank?
|
158
158
|
@label_elements += Webrat::XML.xpath_search(form.element, ".//label[@for = '#{id}']")
|
159
159
|
end
|
160
|
-
|
160
|
+
|
161
161
|
@label_elements
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
def default_value
|
165
165
|
Webrat::XML.attribute(@element, "value")
|
166
166
|
end
|
167
|
-
|
167
|
+
|
168
168
|
def replace_param_value(params, oval, nval)
|
169
169
|
output = Hash.new
|
170
170
|
params.each do |key, value|
|
@@ -181,13 +181,13 @@ module Webrat
|
|
181
181
|
output
|
182
182
|
end
|
183
183
|
end
|
184
|
-
|
184
|
+
|
185
185
|
class ButtonField < Field #:nodoc:
|
186
186
|
|
187
187
|
def self.xpath_search
|
188
188
|
[".//button", ".//input[@type = 'submit']", ".//input[@type = 'button']", ".//input[@type = 'image']"]
|
189
189
|
end
|
190
|
-
|
190
|
+
|
191
191
|
def to_param
|
192
192
|
return nil if @value.nil?
|
193
193
|
super
|
@@ -210,7 +210,7 @@ module Webrat
|
|
210
210
|
def self.xpath_search
|
211
211
|
".//input[@type = 'hidden']"
|
212
212
|
end
|
213
|
-
|
213
|
+
|
214
214
|
def to_param
|
215
215
|
if collection_name?
|
216
216
|
super
|
@@ -238,7 +238,7 @@ module Webrat
|
|
238
238
|
def self.xpath_search
|
239
239
|
".//input[@type = 'checkbox']"
|
240
240
|
end
|
241
|
-
|
241
|
+
|
242
242
|
def to_param
|
243
243
|
return nil if @value.nil?
|
244
244
|
super
|
@@ -248,7 +248,7 @@ module Webrat
|
|
248
248
|
raise_error_if_disabled
|
249
249
|
set(Webrat::XML.attribute(@element, "value") || "on")
|
250
250
|
end
|
251
|
-
|
251
|
+
|
252
252
|
def checked?
|
253
253
|
Webrat::XML.attribute(@element, "checked") == "checked"
|
254
254
|
end
|
@@ -271,11 +271,11 @@ module Webrat
|
|
271
271
|
end
|
272
272
|
|
273
273
|
class PasswordField < Field #:nodoc:
|
274
|
-
|
274
|
+
|
275
275
|
def self.xpath_search
|
276
276
|
".//input[@type = 'password']"
|
277
277
|
end
|
278
|
-
|
278
|
+
|
279
279
|
end
|
280
280
|
|
281
281
|
class RadioField < Field #:nodoc:
|
@@ -283,31 +283,31 @@ module Webrat
|
|
283
283
|
def self.xpath_search
|
284
284
|
".//input[@type = 'radio']"
|
285
285
|
end
|
286
|
-
|
286
|
+
|
287
287
|
def to_param
|
288
288
|
return nil if @value.nil?
|
289
289
|
super
|
290
290
|
end
|
291
|
-
|
291
|
+
|
292
292
|
def choose
|
293
293
|
raise_error_if_disabled
|
294
294
|
other_options.each do |option|
|
295
295
|
option.set(nil)
|
296
296
|
end
|
297
|
-
|
297
|
+
|
298
298
|
set(Webrat::XML.attribute(@element, "value") || "on")
|
299
299
|
end
|
300
|
-
|
300
|
+
|
301
301
|
def checked?
|
302
302
|
Webrat::XML.attribute(@element, "checked") == "checked"
|
303
303
|
end
|
304
|
-
|
304
|
+
|
305
305
|
protected
|
306
306
|
|
307
307
|
def other_options
|
308
308
|
form.fields.select { |f| f.name == name }
|
309
309
|
end
|
310
|
-
|
310
|
+
|
311
311
|
def default_value
|
312
312
|
if Webrat::XML.attribute(@element, "checked") == "checked"
|
313
313
|
Webrat::XML.attribute(@element, "value") || "on"
|
@@ -323,7 +323,7 @@ module Webrat
|
|
323
323
|
def self.xpath_search
|
324
324
|
".//textarea"
|
325
325
|
end
|
326
|
-
|
326
|
+
|
327
327
|
protected
|
328
328
|
|
329
329
|
def default_value
|
@@ -331,13 +331,13 @@ module Webrat
|
|
331
331
|
end
|
332
332
|
|
333
333
|
end
|
334
|
-
|
334
|
+
|
335
335
|
class FileField < Field #:nodoc:
|
336
|
-
|
336
|
+
|
337
337
|
def self.xpath_search
|
338
338
|
".//input[@type = 'file']"
|
339
339
|
end
|
340
|
-
|
340
|
+
|
341
341
|
attr_accessor :content_type
|
342
342
|
|
343
343
|
def set(value, content_type = nil)
|
@@ -352,9 +352,9 @@ module Webrat
|
|
352
352
|
replace_param_value(super, @value, test_uploaded_file)
|
353
353
|
end
|
354
354
|
end
|
355
|
-
|
355
|
+
|
356
356
|
protected
|
357
|
-
|
357
|
+
|
358
358
|
def test_uploaded_file
|
359
359
|
if content_type
|
360
360
|
ActionController::TestUploadedFile.new(@value, content_type)
|
@@ -386,17 +386,17 @@ module Webrat
|
|
386
386
|
def options
|
387
387
|
@options ||= SelectOption.load_all(@session, @element)
|
388
388
|
end
|
389
|
-
|
389
|
+
|
390
390
|
protected
|
391
391
|
|
392
392
|
def default_value
|
393
393
|
selected_options = Webrat::XML.xpath_search(@element, ".//option[@selected = 'selected']")
|
394
|
-
selected_options = Webrat::XML.xpath_search(@element, ".//option[position() = 1]") if selected_options.empty?
|
395
|
-
|
394
|
+
selected_options = Webrat::XML.xpath_search(@element, ".//option[position() = 1]") if selected_options.empty?
|
395
|
+
|
396
396
|
selected_options.map do |option|
|
397
397
|
return "" if option.nil?
|
398
398
|
Webrat::XML.attribute(option, "value") || Webrat::XML.inner_html(option)
|
399
|
-
end
|
399
|
+
end.uniq
|
400
400
|
end
|
401
401
|
|
402
402
|
end
|
@@ -7,7 +7,7 @@ require "webrat/core/locators/field_named_locator"
|
|
7
7
|
module Webrat
|
8
8
|
class Form < Element #:nodoc:
|
9
9
|
attr_reader :element
|
10
|
-
|
10
|
+
|
11
11
|
def self.xpath_search
|
12
12
|
".//form"
|
13
13
|
end
|
@@ -15,21 +15,21 @@ module Webrat
|
|
15
15
|
def fields
|
16
16
|
@fields ||= Field.load_all(@session, @element)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def submit
|
20
20
|
@session.request_page(form_action, form_method, params)
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def field_named(name, *field_types)
|
24
24
|
Webrat::Locators::FieldNamedLocator.new(@session, dom, name, *field_types).locate
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
protected
|
28
|
-
|
28
|
+
|
29
29
|
def dom
|
30
30
|
Webrat::XML.xpath_at(@session.dom, path)
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def fields_by_type(field_types)
|
34
34
|
if field_types.any?
|
35
35
|
fields.select { |f| field_types.include?(f.class) }
|
@@ -37,26 +37,26 @@ module Webrat
|
|
37
37
|
fields
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def params
|
42
42
|
all_params = {}
|
43
|
-
|
43
|
+
|
44
44
|
fields.each do |field|
|
45
45
|
next if field.to_param.nil?
|
46
46
|
merge(all_params, field.to_param)
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
all_params
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def form_method
|
53
53
|
Webrat::XML.attribute(@element, "method").blank? ? :get : Webrat::XML.attribute(@element, "method").downcase
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def form_action
|
57
57
|
Webrat::XML.attribute(@element, "action").blank? ? @session.current_url : Webrat::XML.attribute(@element, "action")
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def merge(all_params, new_param)
|
61
61
|
new_param.each do |key, value|
|
62
62
|
case all_params[key]
|
@@ -69,7 +69,7 @@ module Webrat
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
def merge_hash_values(a, b) # :nodoc:
|
74
74
|
a.keys.each do |k|
|
75
75
|
if b.has_key?(k)
|
@@ -85,19 +85,19 @@ module Webrat
|
|
85
85
|
end
|
86
86
|
a.merge!(b)
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
def hash_classes
|
90
90
|
klasses = [Hash]
|
91
|
-
|
91
|
+
|
92
92
|
case Webrat.configuration.mode
|
93
93
|
when :rails
|
94
94
|
klasses << HashWithIndifferentAccess
|
95
95
|
when :merb
|
96
96
|
klasses << Mash
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
klasses
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
end
|
103
103
|
end
|
@@ -2,9 +2,9 @@ require "webrat/core/elements/element"
|
|
2
2
|
|
3
3
|
module Webrat
|
4
4
|
class Label < Element #:nodoc:
|
5
|
-
|
5
|
+
|
6
6
|
attr_reader :element
|
7
|
-
|
7
|
+
|
8
8
|
def self.xpath_search
|
9
9
|
".//label"
|
10
10
|
end
|
@@ -12,13 +12,13 @@ module Webrat
|
|
12
12
|
def for_id
|
13
13
|
Webrat::XML.attribute(@element, "for")
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def field
|
17
17
|
Field.load(@session, field_element)
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
protected
|
21
|
-
|
21
|
+
|
22
22
|
def field_element
|
23
23
|
if for_id.blank?
|
24
24
|
Webrat::XML.xpath_at(@element, *Field.xpath_search_excluding_hidden)
|
@@ -26,6 +26,6 @@ module Webrat
|
|
26
26
|
Webrat::XML.css_search(@session.current_dom, "#" + for_id).first
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
end
|
31
31
|
end
|