webrat 0.4.4 → 0.4.5

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 (203) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +44 -8
  4. data/Rakefile +80 -66
  5. data/VERSION +1 -0
  6. data/lib/webrat.rb +7 -12
  7. data/lib/webrat/core/configuration.rb +7 -3
  8. data/lib/webrat/core/elements/area.rb +7 -7
  9. data/lib/webrat/core/elements/element.rb +11 -11
  10. data/lib/webrat/core/elements/field.rb +63 -55
  11. data/lib/webrat/core/elements/form.rb +17 -17
  12. data/lib/webrat/core/elements/label.rb +6 -6
  13. data/lib/webrat/core/elements/link.rb +13 -12
  14. data/lib/webrat/core/elements/select_option.rb +9 -9
  15. data/lib/webrat/core/locators.rb +2 -2
  16. data/lib/webrat/core/locators/area_locator.rb +10 -10
  17. data/lib/webrat/core/locators/button_locator.rb +13 -13
  18. data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
  19. data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
  20. data/lib/webrat/core/locators/field_locator.rb +7 -7
  21. data/lib/webrat/core/locators/field_named_locator.rb +10 -10
  22. data/lib/webrat/core/locators/form_locator.rb +6 -6
  23. data/lib/webrat/core/locators/label_locator.rb +9 -9
  24. data/lib/webrat/core/locators/link_locator.rb +21 -13
  25. data/lib/webrat/core/locators/locator.rb +5 -5
  26. data/lib/webrat/core/locators/select_option_locator.rb +11 -11
  27. data/lib/webrat/core/logging.rb +7 -4
  28. data/lib/webrat/core/matchers/have_content.rb +12 -12
  29. data/lib/webrat/core/matchers/have_selector.rb +9 -9
  30. data/lib/webrat/core/matchers/have_tag.rb +4 -4
  31. data/lib/webrat/core/matchers/have_xpath.rb +26 -26
  32. data/lib/webrat/core/methods.rb +13 -11
  33. data/lib/webrat/core/mime.rb +3 -3
  34. data/lib/webrat/core/save_and_open_page.rb +14 -16
  35. data/lib/webrat/core/scope.rb +53 -53
  36. data/lib/webrat/core/session.rb +23 -14
  37. data/lib/webrat/core/xml.rb +16 -16
  38. data/lib/webrat/core/xml/hpricot.rb +3 -3
  39. data/lib/webrat/core/xml/nokogiri.rb +11 -11
  40. data/lib/webrat/core/xml/rexml.rb +3 -3
  41. data/lib/webrat/core_extensions/blank.rb +1 -1
  42. data/lib/webrat/core_extensions/deprecate.rb +1 -1
  43. data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
  44. data/lib/webrat/core_extensions/meta_class.rb +1 -1
  45. data/lib/webrat/core_extensions/tcp_socket.rb +8 -8
  46. data/lib/webrat/mechanize.rb +9 -9
  47. data/lib/webrat/merb.rb +1 -1
  48. data/lib/webrat/merb_multipart_support.rb +27 -0
  49. data/lib/webrat/merb_session.rb +39 -24
  50. data/lib/webrat/rack_test.rb +32 -0
  51. data/lib/webrat/rails.rb +2 -2
  52. data/lib/webrat/rspec-rails.rb +3 -6
  53. data/lib/webrat/selenium.rb +2 -1
  54. data/lib/webrat/selenium/application_server_factory.rb +40 -0
  55. data/lib/webrat/selenium/application_servers.rb +5 -0
  56. data/lib/webrat/selenium/application_servers/base.rb +46 -0
  57. data/lib/webrat/selenium/application_servers/external.rb +26 -0
  58. data/lib/webrat/selenium/application_servers/merb.rb +50 -0
  59. data/lib/webrat/selenium/application_servers/rails.rb +44 -0
  60. data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
  61. data/lib/webrat/selenium/location_strategy_javascript/button.js +14 -7
  62. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +4 -1
  63. data/lib/webrat/selenium/matchers.rb +1 -1
  64. data/lib/webrat/selenium/matchers/have_content.rb +4 -4
  65. data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
  66. data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
  67. data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
  68. data/lib/webrat/selenium/selenium_rc_server.rb +25 -19
  69. data/lib/webrat/selenium/selenium_session.rb +24 -17
  70. data/lib/webrat/selenium/silence_stream.rb +18 -0
  71. data/spec/fakes/test_session.rb +34 -0
  72. data/spec/integration/merb/.gitignore +21 -0
  73. data/spec/integration/merb/Rakefile +35 -0
  74. data/spec/integration/merb/app/controllers/application.rb +2 -0
  75. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  76. data/spec/integration/merb/app/controllers/testing.rb +27 -0
  77. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  78. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  79. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  80. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  81. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  82. data/spec/integration/merb/config/environments/development.rb +15 -0
  83. data/spec/integration/merb/config/environments/rake.rb +11 -0
  84. data/spec/integration/merb/config/environments/test.rb +14 -0
  85. data/spec/integration/merb/config/init.rb +25 -0
  86. data/spec/integration/merb/config/rack.rb +11 -0
  87. data/spec/integration/merb/config/router.rb +34 -0
  88. data/spec/integration/merb/spec/spec.opts +1 -0
  89. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  90. data/spec/integration/merb/spec/webrat_spec.rb +39 -0
  91. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  92. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  93. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  94. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  95. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  96. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  97. data/spec/integration/rack/Rakefile +5 -0
  98. data/spec/integration/rack/rack_app.rb +16 -0
  99. data/spec/integration/rack/test/test_helper.rb +20 -0
  100. data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  101. data/spec/integration/rails/.gitignore +3 -0
  102. data/spec/integration/rails/Rakefile +30 -0
  103. data/spec/integration/rails/app/controllers/application.rb +15 -0
  104. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  105. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  106. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  107. data/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
  108. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  109. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  110. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  111. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  112. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  113. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  114. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  115. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  116. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  117. data/spec/integration/rails/config/boot.rb +109 -0
  118. data/spec/integration/rails/config/environment.rb +12 -0
  119. data/spec/integration/rails/config/environments/development.rb +17 -0
  120. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  121. data/spec/integration/rails/config/environments/test.rb +22 -0
  122. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  123. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  124. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  125. data/spec/integration/rails/config/locales/en.yml +5 -0
  126. data/spec/integration/rails/config/routes.rb +18 -0
  127. data/spec/integration/rails/public/404.html +30 -0
  128. data/spec/integration/rails/public/422.html +30 -0
  129. data/spec/integration/rails/public/500.html +33 -0
  130. data/spec/integration/rails/script/about +4 -0
  131. data/spec/integration/rails/script/console +3 -0
  132. data/spec/integration/rails/script/dbconsole +3 -0
  133. data/spec/integration/rails/script/destroy +3 -0
  134. data/spec/integration/rails/script/generate +3 -0
  135. data/spec/integration/rails/script/performance/benchmarker +3 -0
  136. data/spec/integration/rails/script/performance/profiler +3 -0
  137. data/spec/integration/rails/script/performance/request +3 -0
  138. data/spec/integration/rails/script/plugin +3 -0
  139. data/spec/integration/rails/script/process/inspector +3 -0
  140. data/spec/integration/rails/script/process/reaper +3 -0
  141. data/spec/integration/rails/script/process/spawner +3 -0
  142. data/spec/integration/rails/script/runner +3 -0
  143. data/spec/integration/rails/script/server +3 -0
  144. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  145. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  146. data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
  147. data/spec/integration/rails/test/integration/webrat_test.rb +97 -0
  148. data/spec/integration/rails/test/test_helper.rb +25 -0
  149. data/spec/integration/sinatra/Rakefile +5 -0
  150. data/spec/integration/sinatra/classic_app.rb +64 -0
  151. data/spec/integration/sinatra/modular_app.rb +16 -0
  152. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  153. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  154. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  155. data/spec/private/core/configuration_spec.rb +116 -0
  156. data/spec/private/core/field_spec.rb +85 -0
  157. data/spec/private/core/link_spec.rb +24 -0
  158. data/spec/private/core/logging_spec.rb +10 -0
  159. data/spec/private/core/session_spec.rb +195 -0
  160. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  161. data/spec/private/merb/attaches_file_spec.rb +93 -0
  162. data/spec/private/merb/merb_session_spec.rb +61 -0
  163. data/spec/private/nokogiri_spec.rb +77 -0
  164. data/spec/private/rails/attaches_file_spec.rb +81 -0
  165. data/spec/private/rails/rails_session_spec.rb +110 -0
  166. data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
  167. data/spec/public/basic_auth_spec.rb +24 -0
  168. data/spec/public/check_spec.rb +191 -0
  169. data/spec/public/choose_spec.rb +118 -0
  170. data/spec/public/click_area_spec.rb +106 -0
  171. data/spec/public/click_button_spec.rb +496 -0
  172. data/spec/public/click_link_spec.rb +511 -0
  173. data/spec/public/fill_in_spec.rb +209 -0
  174. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  175. data/spec/public/locators/field_labeled_spec.rb +172 -0
  176. data/spec/public/locators/field_with_id_spec.rb +16 -0
  177. data/spec/public/matchers/contain_spec.rb +114 -0
  178. data/spec/public/matchers/have_selector_spec.rb +142 -0
  179. data/spec/public/matchers/have_tag_spec.rb +39 -0
  180. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  181. data/spec/public/reload_spec.rb +10 -0
  182. data/spec/public/save_and_open_spec.rb +70 -0
  183. data/spec/public/select_date_spec.rb +112 -0
  184. data/spec/public/select_datetime_spec.rb +137 -0
  185. data/spec/public/select_spec.rb +249 -0
  186. data/spec/public/select_time_spec.rb +100 -0
  187. data/spec/public/selenium/application_server_factory_spec.rb +49 -0
  188. data/spec/public/selenium/application_servers/external_spec.rb +12 -0
  189. data/spec/public/selenium/selenium_session_spec.rb +37 -0
  190. data/spec/public/set_hidden_field_spec.rb +5 -0
  191. data/spec/public/submit_form_spec.rb +5 -0
  192. data/spec/public/visit_spec.rb +58 -0
  193. data/spec/public/within_spec.rb +177 -0
  194. data/spec/rcov.opts +1 -0
  195. data/spec/spec.opts +2 -0
  196. data/spec/spec_helper.rb +50 -0
  197. data/vendor/selenium-server.jar +0 -0
  198. data/webrat.gemspec +340 -0
  199. metadata +248 -33
  200. data/lib/webrat/selenium/application_server.rb +0 -71
  201. data/lib/webrat/selenium/merb_application_server.rb +0 -48
  202. data/lib/webrat/selenium/rails_application_server.rb +0 -42
  203. data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
@@ -1,33 +1,34 @@
1
- require "webrat/core_extensions/blank"
1
+ require "English"
2
2
 
3
+ require "webrat/core_extensions/blank"
3
4
  require "webrat/core/elements/element"
4
5
 
5
6
  module Webrat
6
7
  class Link < Element #:nodoc:
7
-
8
+
8
9
  def self.xpath_search
9
10
  ".//a[@href]"
10
11
  end
11
-
12
+
12
13
  def click(options = {})
13
14
  method = options[:method] || http_method
14
15
  return if href =~ /^#/ && method == :get
15
-
16
+
16
17
  options[:javascript] = true if options[:javascript].nil?
17
-
18
+
18
19
  if options[:javascript]
19
20
  @session.request_page(absolute_href, method, data)
20
21
  else
21
22
  @session.request_page(absolute_href, :get, {})
22
23
  end
23
24
  end
24
-
25
+
25
26
  protected
26
-
27
+
27
28
  def id
28
29
  Webrat::XML.attribute(@element, "id")
29
30
  end
30
-
31
+
31
32
  def data
32
33
  authenticity_token.blank? ? {} : {"authenticity_token" => authenticity_token}
33
34
  end
@@ -49,17 +50,17 @@ module Webrat
49
50
  href
50
51
  end
51
52
  end
52
-
53
+
53
54
  def authenticity_token
54
55
  return unless onclick && onclick.include?("s.setAttribute('name', 'authenticity_token');") &&
55
56
  onclick =~ /s\.setAttribute\('value', '([a-f0-9]{40})'\);/
56
57
  $LAST_MATCH_INFO.captures.first
57
58
  end
58
-
59
+
59
60
  def onclick
60
61
  Webrat::XML.attribute(@element, "onclick")
61
62
  end
62
-
63
+
63
64
  def http_method
64
65
  if !onclick.blank? && onclick.include?("f.submit()")
65
66
  http_method_from_js_form
@@ -87,6 +88,6 @@ module Webrat
87
88
  raise Webrat::WebratError.new("No HTTP method for _method param in #{onclick.inspect}")
88
89
  end
89
90
  end
90
-
91
+
91
92
  end
92
93
  end
@@ -2,34 +2,34 @@ require "webrat/core/elements/element"
2
2
 
3
3
  module Webrat
4
4
  class SelectOption < Element #:nodoc:
5
-
5
+
6
6
  def self.xpath_search
7
7
  ".//option"
8
8
  end
9
-
9
+
10
10
  def choose
11
11
  select.raise_error_if_disabled
12
12
  select.set(value)
13
13
  end
14
-
14
+
15
15
  protected
16
-
16
+
17
17
  def select
18
18
  SelectField.load(@session, select_element)
19
19
  end
20
-
20
+
21
21
  def select_element
22
22
  parent = @element.parent
23
-
23
+
24
24
  while parent.respond_to?(:parent)
25
25
  return parent if parent.name == 'select'
26
26
  parent = parent.parent
27
27
  end
28
28
  end
29
-
29
+
30
30
  def value
31
31
  Webrat::XML.attribute(@element, "value") || Webrat::XML.inner_html(@element)
32
32
  end
33
-
33
+
34
34
  end
35
- end
35
+ end
@@ -11,10 +11,10 @@ require "webrat/core/locators/form_locator"
11
11
 
12
12
  module Webrat
13
13
  module Locators
14
-
14
+
15
15
  def field_by_xpath(xpath)
16
16
  Field.load(@session, Webrat::XML.xpath_at(dom, xpath))
17
17
  end
18
-
18
+
19
19
  end
20
20
  end
@@ -2,37 +2,37 @@ require "webrat/core/locators/locator"
2
2
 
3
3
  module Webrat
4
4
  module Locators
5
-
5
+
6
6
  class AreaLocator < Locator # :nodoc:
7
-
7
+
8
8
  def locate
9
9
  Area.load(@session, area_element)
10
10
  end
11
-
11
+
12
12
  def area_element
13
13
  area_elements.detect do |area_element|
14
14
  Webrat::XML.attribute(area_element, "title") =~ matcher ||
15
15
  Webrat::XML.attribute(area_element, "id") =~ matcher
16
16
  end
17
17
  end
18
-
18
+
19
19
  def matcher
20
20
  /#{Regexp.escape(@value.to_s)}/i
21
21
  end
22
-
22
+
23
23
  def area_elements
24
24
  Webrat::XML.xpath_search(@dom, Area.xpath_search)
25
25
  end
26
-
26
+
27
27
  def error_message
28
28
  "Could not find area with name #{@value}"
29
29
  end
30
-
30
+
31
31
  end
32
-
32
+
33
33
  def find_area(id_or_title) #:nodoc:
34
34
  AreaLocator.new(@session, dom, id_or_title).locate!
35
35
  end
36
-
36
+
37
37
  end
38
- end
38
+ end
@@ -2,13 +2,13 @@ require "webrat/core/locators/locator"
2
2
 
3
3
  module Webrat
4
4
  module Locators
5
-
5
+
6
6
  class ButtonLocator < Locator # :nodoc:
7
-
7
+
8
8
  def locate
9
9
  ButtonField.load(@session, button_element)
10
10
  end
11
-
11
+
12
12
  def button_element
13
13
  button_elements.detect do |element|
14
14
  @value.nil? ||
@@ -18,37 +18,37 @@ module Webrat
18
18
  matches_alt?(element)
19
19
  end
20
20
  end
21
-
21
+
22
22
  def matches_id?(element)
23
23
  (@value.is_a?(Regexp) && Webrat::XML.attribute(element, "id") =~ @value) ||
24
24
  (!@value.is_a?(Regexp) && Webrat::XML.attribute(element, "id") == @value.to_s)
25
25
  end
26
-
26
+
27
27
  def matches_value?(element)
28
28
  Webrat::XML.attribute(element, "value") =~ /^\W*#{Regexp.escape(@value.to_s)}/i
29
29
  end
30
-
30
+
31
31
  def matches_html?(element)
32
32
  Webrat::XML.inner_html(element) =~ /#{Regexp.escape(@value.to_s)}/i
33
33
  end
34
-
34
+
35
35
  def matches_alt?(element)
36
36
  Webrat::XML.attribute(element, "alt") =~ /^\W*#{Regexp.escape(@value.to_s)}/i
37
37
  end
38
-
38
+
39
39
  def button_elements
40
40
  Webrat::XML.xpath_search(@dom, *ButtonField.xpath_search)
41
41
  end
42
-
42
+
43
43
  def error_message
44
44
  "Could not find button #{@value.inspect}"
45
45
  end
46
-
46
+
47
47
  end
48
-
48
+
49
49
  def find_button(value) #:nodoc:
50
50
  ButtonLocator.new(@session, dom, value).locate!
51
51
  end
52
-
52
+
53
53
  end
54
- end
54
+ end
@@ -2,13 +2,13 @@ require "webrat/core/locators/locator"
2
2
 
3
3
  module Webrat
4
4
  module Locators
5
-
5
+
6
6
  class FieldByIdLocator < Locator # :nodoc:
7
-
7
+
8
8
  def locate
9
9
  Field.load(@session, field_element)
10
10
  end
11
-
11
+
12
12
  def field_element
13
13
  field_elements.detect do |field_element|
14
14
  if @value.is_a?(Regexp)
@@ -18,7 +18,7 @@ module Webrat
18
18
  end
19
19
  end
20
20
  end
21
-
21
+
22
22
  def field_elements
23
23
  Webrat::XML.xpath_search(@dom, *Field.xpath_search)
24
24
  end
@@ -26,12 +26,12 @@ module Webrat
26
26
  def error_message
27
27
  "Could not find field with id #{@value.inspect}"
28
28
  end
29
-
29
+
30
30
  end
31
-
31
+
32
32
  def field_with_id(id, *field_types)
33
33
  FieldByIdLocator.new(@session, dom, id, *field_types).locate!
34
34
  end
35
-
35
+
36
36
  end
37
- end
37
+ end
@@ -3,13 +3,13 @@ require "webrat/core/locators/locator"
3
3
 
4
4
  module Webrat
5
5
  module Locators
6
-
6
+
7
7
  class FieldLabeledLocator < Locator # :nodoc:
8
-
8
+
9
9
  def locate
10
10
  matching_labels.any? && matching_labels.detect_mapped { |label| label.field }
11
11
  end
12
-
12
+
13
13
  def matching_labels
14
14
  matching_label_elements.sort_by do |label_element|
15
15
  text(label_element).length
@@ -17,21 +17,21 @@ module Webrat
17
17
  Label.load(@session, label_element)
18
18
  end
19
19
  end
20
-
20
+
21
21
  def matching_label_elements
22
22
  label_elements.select do |label_element|
23
- text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}\b/i
23
+ text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}(\b|\Z)/i
24
24
  end
25
25
  end
26
-
26
+
27
27
  def label_elements
28
28
  Webrat::XML.xpath_search(@dom, Label.xpath_search)
29
29
  end
30
-
30
+
31
31
  def error_message
32
32
  "Could not find field labeled #{@value.inspect}"
33
33
  end
34
-
34
+
35
35
  def text(element)
36
36
  str = Webrat::XML.all_inner_text(element)
37
37
  str.gsub!("\n","")
@@ -39,9 +39,9 @@ module Webrat
39
39
  str.squeeze!(" ")
40
40
  str
41
41
  end
42
-
42
+
43
43
  end
44
-
44
+
45
45
  # Locates a form field based on a <tt>label</tt> element in the HTML source.
46
46
  # This can be useful in order to verify that a field is pre-filled with the
47
47
  # correct value.
@@ -51,6 +51,6 @@ module Webrat
51
51
  def field_labeled(label, *field_types)
52
52
  FieldLabeledLocator.new(@session, dom, label, *field_types).locate!
53
53
  end
54
-
54
+
55
55
  end
56
56
  end
@@ -2,24 +2,24 @@ require "webrat/core/locators/locator"
2
2
 
3
3
  module Webrat
4
4
  module Locators
5
-
5
+
6
6
  class FieldLocator < Locator # :nodoc:
7
-
7
+
8
8
  def locate
9
9
  FieldByIdLocator.new(@session, @dom, @value).locate ||
10
10
  FieldNamedLocator.new(@session, @dom, @value, *@field_types).locate ||
11
11
  FieldLabeledLocator.new(@session, @dom, @value, *@field_types).locate
12
12
  end
13
-
13
+
14
14
  def error_message
15
15
  "Could not find field: #{@value.inspect}"
16
16
  end
17
-
17
+
18
18
  end
19
-
19
+
20
20
  def field(*args) # :nodoc:
21
21
  FieldLocator.new(@session, dom, *args).locate!
22
22
  end
23
-
23
+
24
24
  end
25
- end
25
+ end
@@ -2,23 +2,23 @@ require "webrat/core/locators/locator"
2
2
 
3
3
  module Webrat
4
4
  module Locators
5
-
5
+
6
6
  class FieldNamedLocator < Locator # :nodoc:
7
-
7
+
8
8
  def locate
9
9
  Field.load(@session, field_element)
10
10
  end
11
-
11
+
12
12
  def field_element
13
13
  field_elements.detect do |field_element|
14
14
  Webrat::XML.attribute(field_element, "name") == @value.to_s
15
15
  end
16
16
  end
17
-
17
+
18
18
  def field_elements
19
19
  Webrat::XML.xpath_search(@dom, *xpath_searches)
20
20
  end
21
-
21
+
22
22
  def xpath_searches
23
23
  if @field_types.any?
24
24
  @field_types.map { |field_type| field_type.xpath_search }.flatten
@@ -26,16 +26,16 @@ module Webrat
26
26
  Array(Field.xpath_search)
27
27
  end
28
28
  end
29
-
29
+
30
30
  def error_message
31
31
  "Could not find field named #{@value.inspect}"
32
32
  end
33
-
33
+
34
34
  end
35
-
35
+
36
36
  def field_named(name, *field_types)
37
37
  FieldNamedLocator.new(@session, dom, name, *field_types).locate!
38
38
  end
39
-
39
+
40
40
  end
41
- end
41
+ end
@@ -2,18 +2,18 @@ require "webrat/core/locators/locator"
2
2
 
3
3
  module Webrat
4
4
  module Locators
5
-
5
+
6
6
  class FormLocator < Locator # :nodoc:
7
-
7
+
8
8
  def locate
9
9
  Form.load(@session, form_element)
10
10
  end
11
-
11
+
12
12
  def form_element
13
13
  Webrat::XML.css_at(@dom, "#" + @value)
14
14
  end
15
-
15
+
16
16
  end
17
-
17
+
18
18
  end
19
- end
19
+ end