capybara 3.0.0 → 3.40.0

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 (312) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/History.md +891 -12
  4. data/License.txt +1 -1
  5. data/README.md +257 -84
  6. data/lib/capybara/config.rb +29 -10
  7. data/lib/capybara/cucumber.rb +1 -1
  8. data/lib/capybara/driver/base.rb +22 -4
  9. data/lib/capybara/driver/node.rb +38 -9
  10. data/lib/capybara/dsl.rb +9 -7
  11. data/lib/capybara/helpers.rb +57 -8
  12. data/lib/capybara/minitest/spec.rb +185 -84
  13. data/lib/capybara/minitest.rb +264 -145
  14. data/lib/capybara/node/actions.rb +248 -124
  15. data/lib/capybara/node/base.rb +35 -20
  16. data/lib/capybara/node/document.rb +14 -2
  17. data/lib/capybara/node/document_matchers.rb +13 -15
  18. data/lib/capybara/node/element.rb +350 -113
  19. data/lib/capybara/node/finders.rb +104 -82
  20. data/lib/capybara/node/matchers.rb +363 -157
  21. data/lib/capybara/node/simple.rb +54 -15
  22. data/lib/capybara/node/whitespace_normalizer.rb +81 -0
  23. data/lib/capybara/queries/active_element_query.rb +18 -0
  24. data/lib/capybara/queries/ancestor_query.rb +9 -10
  25. data/lib/capybara/queries/base_query.rb +25 -18
  26. data/lib/capybara/queries/current_path_query.rb +16 -6
  27. data/lib/capybara/queries/match_query.rb +11 -0
  28. data/lib/capybara/queries/selector_query.rb +617 -104
  29. data/lib/capybara/queries/sibling_query.rb +9 -7
  30. data/lib/capybara/queries/style_query.rb +45 -0
  31. data/lib/capybara/queries/text_query.rb +40 -22
  32. data/lib/capybara/queries/title_query.rb +2 -2
  33. data/lib/capybara/rack_test/browser.rb +106 -31
  34. data/lib/capybara/rack_test/driver.rb +16 -7
  35. data/lib/capybara/rack_test/errors.rb +6 -0
  36. data/lib/capybara/rack_test/form.rb +74 -49
  37. data/lib/capybara/rack_test/node.rb +120 -47
  38. data/lib/capybara/rails.rb +1 -1
  39. data/lib/capybara/registration_container.rb +41 -0
  40. data/lib/capybara/registrations/drivers.rb +42 -0
  41. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  42. data/lib/capybara/registrations/servers.rb +66 -0
  43. data/lib/capybara/result.rb +87 -53
  44. data/lib/capybara/rspec/features.rb +8 -10
  45. data/lib/capybara/rspec/matcher_proxies.rb +39 -18
  46. data/lib/capybara/rspec/matchers/base.rb +113 -0
  47. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  48. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  49. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  50. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  51. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  52. data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
  53. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  54. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  55. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  56. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  57. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  58. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  59. data/lib/capybara/rspec/matchers.rb +142 -315
  60. data/lib/capybara/rspec.rb +3 -2
  61. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  62. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  63. data/lib/capybara/selector/css.rb +85 -8
  64. data/lib/capybara/selector/definition/button.rb +68 -0
  65. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  66. data/lib/capybara/selector/definition/css.rb +10 -0
  67. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  68. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  69. data/lib/capybara/selector/definition/element.rb +28 -0
  70. data/lib/capybara/selector/definition/field.rb +40 -0
  71. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  72. data/lib/capybara/selector/definition/file_field.rb +13 -0
  73. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  74. data/lib/capybara/selector/definition/frame.rb +17 -0
  75. data/lib/capybara/selector/definition/id.rb +6 -0
  76. data/lib/capybara/selector/definition/label.rb +62 -0
  77. data/lib/capybara/selector/definition/link.rb +55 -0
  78. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  79. data/lib/capybara/selector/definition/option.rb +27 -0
  80. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  81. data/lib/capybara/selector/definition/select.rb +81 -0
  82. data/lib/capybara/selector/definition/table.rb +109 -0
  83. data/lib/capybara/selector/definition/table_row.rb +21 -0
  84. data/lib/capybara/selector/definition/xpath.rb +5 -0
  85. data/lib/capybara/selector/definition.rb +280 -0
  86. data/lib/capybara/selector/filter.rb +1 -0
  87. data/lib/capybara/selector/filter_set.rb +72 -28
  88. data/lib/capybara/selector/filters/base.rb +45 -2
  89. data/lib/capybara/selector/filters/expression_filter.rb +5 -6
  90. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  91. data/lib/capybara/selector/filters/node_filter.rb +18 -4
  92. data/lib/capybara/selector/regexp_disassembler.rb +211 -0
  93. data/lib/capybara/selector/selector.rb +89 -200
  94. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  95. data/lib/capybara/selector.rb +474 -534
  96. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  97. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  98. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  99. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  100. data/lib/capybara/selenium/driver.rb +270 -245
  101. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  102. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
  103. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
  104. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  105. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  106. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  107. data/lib/capybara/selenium/extensions/find.rb +110 -0
  108. data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
  109. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  110. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  111. data/lib/capybara/selenium/node.rb +460 -170
  112. data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
  113. data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
  114. data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  115. data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  116. data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  117. data/lib/capybara/selenium/patches/atoms.rb +18 -0
  118. data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  119. data/lib/capybara/selenium/patches/logs.rb +45 -0
  120. data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  121. data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  122. data/lib/capybara/server/animation_disabler.rb +80 -0
  123. data/lib/capybara/server/checker.rb +44 -0
  124. data/lib/capybara/server/middleware.rb +71 -0
  125. data/lib/capybara/server.rb +58 -67
  126. data/lib/capybara/session/config.rb +40 -6
  127. data/lib/capybara/session/matchers.rb +26 -19
  128. data/lib/capybara/session.rb +252 -194
  129. data/lib/capybara/spec/public/jquery.js +5 -5
  130. data/lib/capybara/spec/public/offset.js +6 -0
  131. data/lib/capybara/spec/public/test.js +126 -8
  132. data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
  133. data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
  134. data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
  135. data/lib/capybara/spec/session/active_element_spec.rb +31 -0
  136. data/lib/capybara/spec/session/all_spec.rb +135 -44
  137. data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
  138. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
  139. data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
  140. data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  141. data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  142. data/lib/capybara/spec/session/{assert_text.rb → assert_text_spec.rb} +76 -52
  143. data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
  144. data/lib/capybara/spec/session/attach_file_spec.rb +126 -72
  145. data/lib/capybara/spec/session/body_spec.rb +11 -13
  146. data/lib/capybara/spec/session/check_spec.rb +112 -51
  147. data/lib/capybara/spec/session/choose_spec.rb +62 -30
  148. data/lib/capybara/spec/session/click_button_spec.rb +227 -161
  149. data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
  150. data/lib/capybara/spec/session/click_link_spec.rb +89 -55
  151. data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
  152. data/lib/capybara/spec/session/current_url_spec.rb +44 -37
  153. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
  154. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
  155. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
  156. data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
  157. data/lib/capybara/spec/session/element/match_xpath_spec.rb +8 -6
  158. data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
  159. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
  160. data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
  161. data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
  162. data/lib/capybara/spec/session/fill_in_spec.rb +110 -44
  163. data/lib/capybara/spec/session/find_button_spec.rb +23 -23
  164. data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
  165. data/lib/capybara/spec/session/find_field_spec.rb +33 -31
  166. data/lib/capybara/spec/session/find_link_spec.rb +42 -14
  167. data/lib/capybara/spec/session/find_spec.rb +251 -142
  168. data/lib/capybara/spec/session/first_spec.rb +45 -44
  169. data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
  170. data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
  171. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
  172. data/lib/capybara/spec/session/frame/within_frame_spec.rb +46 -19
  173. data/lib/capybara/spec/session/go_back_spec.rb +1 -1
  174. data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
  175. data/lib/capybara/spec/session/has_all_selectors_spec.rb +23 -23
  176. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  177. data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  178. data/lib/capybara/spec/session/has_button_spec.rb +98 -12
  179. data/lib/capybara/spec/session/has_css_spec.rb +271 -137
  180. data/lib/capybara/spec/session/has_current_path_spec.rb +50 -35
  181. data/lib/capybara/spec/session/has_element_spec.rb +47 -0
  182. data/lib/capybara/spec/session/has_field_spec.rb +137 -58
  183. data/lib/capybara/spec/session/has_link_spec.rb +46 -6
  184. data/lib/capybara/spec/session/has_none_selectors_spec.rb +33 -31
  185. data/lib/capybara/spec/session/has_select_spec.rb +84 -50
  186. data/lib/capybara/spec/session/has_selector_spec.rb +117 -69
  187. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  188. data/lib/capybara/spec/session/has_table_spec.rb +181 -4
  189. data/lib/capybara/spec/session/has_text_spec.rb +101 -53
  190. data/lib/capybara/spec/session/has_title_spec.rb +19 -14
  191. data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
  192. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
  193. data/lib/capybara/spec/session/html_spec.rb +13 -6
  194. data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
  195. data/lib/capybara/spec/session/node_spec.rb +958 -122
  196. data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
  197. data/lib/capybara/spec/session/refresh_spec.rb +9 -7
  198. data/lib/capybara/spec/session/reset_session_spec.rb +65 -37
  199. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
  200. data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
  201. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
  202. data/lib/capybara/spec/session/save_page_spec.rb +41 -38
  203. data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
  204. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  205. data/lib/capybara/spec/session/scroll_spec.rb +119 -0
  206. data/lib/capybara/spec/session/select_spec.rb +102 -76
  207. data/lib/capybara/spec/session/selectors_spec.rb +51 -18
  208. data/lib/capybara/spec/session/sibling_spec.rb +9 -9
  209. data/lib/capybara/spec/session/text_spec.rb +26 -24
  210. data/lib/capybara/spec/session/title_spec.rb +8 -6
  211. data/lib/capybara/spec/session/uncheck_spec.rb +41 -22
  212. data/lib/capybara/spec/session/unselect_spec.rb +37 -37
  213. data/lib/capybara/spec/session/visit_spec.rb +79 -53
  214. data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
  215. data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
  216. data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
  217. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
  218. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
  219. data/lib/capybara/spec/session/window/window_spec.rb +88 -54
  220. data/lib/capybara/spec/session/window/windows_spec.rb +11 -8
  221. data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
  222. data/lib/capybara/spec/session/within_spec.rb +82 -44
  223. data/lib/capybara/spec/spec_helper.rb +46 -52
  224. data/lib/capybara/spec/test_app.rb +148 -41
  225. data/lib/capybara/spec/views/animated.erb +49 -0
  226. data/lib/capybara/spec/views/form.erb +156 -42
  227. data/lib/capybara/spec/views/frame_child.erb +4 -3
  228. data/lib/capybara/spec/views/frame_one.erb +2 -1
  229. data/lib/capybara/spec/views/frame_parent.erb +1 -1
  230. data/lib/capybara/spec/views/frame_two.erb +1 -1
  231. data/lib/capybara/spec/views/initial_alert.erb +2 -1
  232. data/lib/capybara/spec/views/layout.erb +10 -0
  233. data/lib/capybara/spec/views/obscured.erb +47 -0
  234. data/lib/capybara/spec/views/offset.erb +33 -0
  235. data/lib/capybara/spec/views/path.erb +2 -2
  236. data/lib/capybara/spec/views/popup_one.erb +1 -1
  237. data/lib/capybara/spec/views/popup_two.erb +1 -1
  238. data/lib/capybara/spec/views/react.erb +45 -0
  239. data/lib/capybara/spec/views/scroll.erb +21 -0
  240. data/lib/capybara/spec/views/spatial.erb +31 -0
  241. data/lib/capybara/spec/views/tables.erb +68 -1
  242. data/lib/capybara/spec/views/with_animation.erb +81 -0
  243. data/lib/capybara/spec/views/with_base_tag.erb +2 -2
  244. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  245. data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
  246. data/lib/capybara/spec/views/with_hover.erb +3 -2
  247. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  248. data/lib/capybara/spec/views/with_html.erb +46 -11
  249. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  250. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  251. data/lib/capybara/spec/views/with_js.erb +30 -5
  252. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  253. data/lib/capybara/spec/views/with_namespace.erb +21 -0
  254. data/lib/capybara/spec/views/with_scope.erb +2 -2
  255. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  256. data/lib/capybara/spec/views/with_shadow.erb +31 -0
  257. data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
  258. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  259. data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
  260. data/lib/capybara/spec/views/with_windows.erb +1 -1
  261. data/lib/capybara/spec/views/within_frames.erb +1 -1
  262. data/lib/capybara/version.rb +1 -1
  263. data/lib/capybara/window.rb +32 -26
  264. data/lib/capybara.rb +128 -104
  265. data/spec/basic_node_spec.rb +59 -34
  266. data/spec/capybara_spec.rb +65 -51
  267. data/spec/counter_spec.rb +35 -0
  268. data/spec/css_builder_spec.rb +101 -0
  269. data/spec/css_splitter_spec.rb +38 -0
  270. data/spec/dsl_spec.rb +84 -55
  271. data/spec/filter_set_spec.rb +24 -7
  272. data/spec/fixtures/certificate.pem +25 -0
  273. data/spec/fixtures/key.pem +27 -0
  274. data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -5
  275. data/spec/fixtures/selenium_driver_rspec_success.rb +5 -5
  276. data/spec/minitest_spec.rb +49 -5
  277. data/spec/minitest_spec_spec.rb +92 -62
  278. data/spec/per_session_config_spec.rb +6 -6
  279. data/spec/rack_test_spec.rb +183 -115
  280. data/spec/regexp_dissassembler_spec.rb +250 -0
  281. data/spec/result_spec.rb +99 -39
  282. data/spec/rspec/features_spec.rb +28 -25
  283. data/spec/rspec/scenarios_spec.rb +10 -6
  284. data/spec/rspec/shared_spec_matchers.rb +418 -364
  285. data/spec/rspec/views_spec.rb +4 -3
  286. data/spec/rspec_matchers_spec.rb +35 -10
  287. data/spec/rspec_spec.rb +109 -85
  288. data/spec/sauce_spec_chrome.rb +43 -0
  289. data/spec/selector_spec.rb +392 -62
  290. data/spec/selenium_spec_chrome.rb +183 -41
  291. data/spec/selenium_spec_chrome_remote.rb +96 -0
  292. data/spec/selenium_spec_edge.rb +41 -8
  293. data/spec/selenium_spec_firefox.rb +228 -0
  294. data/spec/selenium_spec_firefox_remote.rb +94 -0
  295. data/spec/selenium_spec_ie.rb +129 -11
  296. data/spec/selenium_spec_safari.rb +162 -0
  297. data/spec/server_spec.rb +192 -81
  298. data/spec/session_spec.rb +52 -16
  299. data/spec/shared_selenium_node.rb +79 -0
  300. data/spec/shared_selenium_session.rb +460 -123
  301. data/spec/spec_helper.rb +124 -2
  302. data/spec/whitespace_normalizer_spec.rb +54 -0
  303. data/spec/xpath_builder_spec.rb +93 -0
  304. metadata +344 -45
  305. data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
  306. data/.yard/templates_custom/default/class/html/setup.rb +0 -17
  307. data/.yard/yard_extensions.rb +0 -78
  308. data/lib/capybara/rspec/compound.rb +0 -90
  309. data/lib/capybara/spec/session/assert_selector.rb +0 -149
  310. data/lib/capybara/spec/session/source_spec.rb +0 -0
  311. data/lib/capybara/spec/views/with_title.erb +0 -5
  312. data/spec/selenium_spec_marionette.rb +0 -143
@@ -1,67 +1,76 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Capybara::SpecHelper.spec "#fill_in" do
3
+ Capybara::SpecHelper.spec '#fill_in' do
4
4
  before do
5
5
  @session.visit('/form')
6
6
  end
7
7
 
8
- it "should fill in a text field by id" do
8
+ it 'should fill in a text field by id' do
9
9
  @session.fill_in('form_first_name', with: 'Harry')
10
10
  @session.click_button('awesome')
11
11
  expect(extract_results(@session)['first_name']).to eq('Harry')
12
12
  end
13
13
 
14
- it "should fill in a text field by name" do
14
+ it 'should fill in a text field by name' do
15
15
  @session.fill_in('form[last_name]', with: 'Green')
16
16
  @session.click_button('awesome')
17
17
  expect(extract_results(@session)['last_name']).to eq('Green')
18
18
  end
19
19
 
20
- it "should fill in a text field by label without for" do
20
+ it 'should fill in a text field by label without for' do
21
21
  @session.fill_in('First Name', with: 'Harry')
22
22
  @session.click_button('awesome')
23
23
  expect(extract_results(@session)['first_name']).to eq('Harry')
24
24
  end
25
25
 
26
- it "should fill in a url field by label without for" do
26
+ it 'should fill in a url field by label without for' do
27
27
  @session.fill_in('Html5 Url', with: 'http://www.avenueq.com')
28
28
  @session.click_button('html5_submit')
29
29
  expect(extract_results(@session)['html5_url']).to eq('http://www.avenueq.com')
30
30
  end
31
31
 
32
- it "should fill in a textarea by id" do
32
+ it 'should fill in a textarea by id' do
33
33
  @session.fill_in('form_description', with: 'Texty text')
34
34
  @session.click_button('awesome')
35
35
  expect(extract_results(@session)['description']).to eq('Texty text')
36
36
  end
37
37
 
38
- it "should fill in a textarea by label" do
38
+ it 'should fill in a textarea by label' do
39
39
  @session.fill_in('Description', with: 'Texty text')
40
40
  @session.click_button('awesome')
41
41
  expect(extract_results(@session)['description']).to eq('Texty text')
42
42
  end
43
43
 
44
- it "should fill in a textarea by name" do
44
+ it 'should fill in a textarea by name' do
45
45
  @session.fill_in('form[description]', with: 'Texty text')
46
46
  @session.click_button('awesome')
47
47
  expect(extract_results(@session)['description']).to eq('Texty text')
48
48
  end
49
49
 
50
- it "should fill in a password field by id" do
50
+ it 'should fill in a textarea in a reasonable time by default' do
51
+ textarea = @session.find(:fillable_field, 'form[description]')
52
+ value = 'a' * 4000
53
+ start = Time.now
54
+ textarea.fill_in(with: value)
55
+ expect(Time.now.to_f).to be_within(0.25).of start.to_f
56
+ expect(textarea.value).to eq value
57
+ end
58
+
59
+ it 'should fill in a password field by id' do
51
60
  @session.fill_in('form_password', with: 'supasikrit')
52
61
  @session.click_button('awesome')
53
62
  expect(extract_results(@session)['password']).to eq('supasikrit')
54
63
  end
55
64
 
56
- context "Date/Time" do
57
- it "should fill in a date input" do
65
+ context 'Date/Time' do
66
+ it 'should fill in a date input' do
58
67
  date = Date.today
59
68
  @session.fill_in('form_date', with: date)
60
69
  @session.click_button('awesome')
61
70
  expect(Date.parse(extract_results(@session)['date'])).to eq date
62
71
  end
63
72
 
64
- it "should fill in a time input" do
73
+ it 'should fill in a time input' do
65
74
  time = Time.new(2018, 3, 9, 15, 26)
66
75
  @session.fill_in('form_time', with: time)
67
76
  @session.click_button('awesome')
@@ -69,7 +78,7 @@ Capybara::SpecHelper.spec "#fill_in" do
69
78
  expect(Time.parse(results).strftime('%r')).to eq time.strftime('%r')
70
79
  end
71
80
 
72
- it "should fill in a datetime input" do
81
+ it 'should fill in a datetime input' do
73
82
  dt = Time.new(2018, 3, 13, 9, 53)
74
83
  @session.fill_in('form_datetime', with: dt)
75
84
  @session.click_button('awesome')
@@ -77,94 +86,143 @@ Capybara::SpecHelper.spec "#fill_in" do
77
86
  end
78
87
  end
79
88
 
80
- it "should handle HTML in a textarea" do
89
+ it 'should handle HTML in a textarea' do
81
90
  @session.fill_in('form_description', with: 'is <strong>very</strong> secret!')
82
91
  @session.click_button('awesome')
83
92
  expect(extract_results(@session)['description']).to eq('is <strong>very</strong> secret!')
84
93
  end
85
94
 
86
- it "should handle newlines in a textarea" do
95
+ it 'should handle newlines in a textarea' do
87
96
  @session.fill_in('form_description', with: "\nSome text\n")
88
97
  @session.click_button('awesome')
89
98
  expect(extract_results(@session)['description']).to eq("\r\nSome text\r\n")
90
99
  end
91
100
 
92
- it "should fill in a field with a custom type" do
101
+ it 'should handle carriage returns with line feeds in a textarea correctly' do
102
+ @session.fill_in('form_description', with: "\r\nSome text\r\n")
103
+ @session.click_button('awesome')
104
+ expect(extract_results(@session)['description']).to eq("\r\nSome text\r\n")
105
+ end
106
+
107
+ it 'should fill in a color field' do
108
+ @session.fill_in('Html5 Color', with: '#112233')
109
+ @session.click_button('html5_submit')
110
+ expect(extract_results(@session)['html5_color']).to eq('#112233')
111
+ end
112
+
113
+ describe 'with input[type="range"]' do
114
+ it 'should set the range slider correctly' do
115
+ @session.fill_in('form_age', with: 51)
116
+ @session.click_button('awesome')
117
+ expect(extract_results(@session)['age'].to_f).to eq 51
118
+ end
119
+
120
+ it 'should set the range slider to valid values' do
121
+ @session.fill_in('form_age', with: '37.6')
122
+ @session.click_button('awesome')
123
+ expect(extract_results(@session)['age'].to_f).to eq 37.5
124
+ end
125
+
126
+ it 'should respect the range slider limits' do
127
+ @session.fill_in('form_age', with: '3')
128
+ @session.click_button('awesome')
129
+ expect(extract_results(@session)['age'].to_f).to eq 13
130
+ end
131
+ end
132
+
133
+ it 'should fill in a field with a custom type' do
93
134
  @session.fill_in('Schmooo', with: 'Schmooo is the game')
94
135
  @session.click_button('awesome')
95
136
  expect(extract_results(@session)['schmooo']).to eq('Schmooo is the game')
96
137
  end
97
138
 
98
- it "should fill in a field without a type" do
139
+ it 'should fill in a field without a type' do
99
140
  @session.fill_in('Phone', with: '+1 555 7022')
100
141
  @session.click_button('awesome')
101
142
  expect(extract_results(@session)['phone']).to eq('+1 555 7022')
102
143
  end
103
144
 
104
- it "should fill in a text field respecting its maxlength attribute" do
145
+ it 'should fill in a text field respecting its maxlength attribute' do
105
146
  @session.fill_in('Zipcode', with: '52071350')
106
147
  @session.click_button('awesome')
107
148
  expect(extract_results(@session)['zipcode']).to eq('52071')
108
149
  end
109
150
 
110
- it "should fill in a password field by name" do
151
+ it 'should fill in a password field by name' do
111
152
  @session.fill_in('form[password]', with: 'supasikrit')
112
153
  @session.click_button('awesome')
113
154
  expect(extract_results(@session)['password']).to eq('supasikrit')
114
155
  end
115
156
 
116
- it "should fill in a password field by label" do
157
+ it 'should fill in a password field by label' do
117
158
  @session.fill_in('Password', with: 'supasikrit')
118
159
  @session.click_button('awesome')
119
160
  expect(extract_results(@session)['password']).to eq('supasikrit')
120
161
  end
121
162
 
122
- it "should fill in a password field by name" do
163
+ it 'should fill in a password field by name' do
123
164
  @session.fill_in('form[password]', with: 'supasikrit')
124
165
  @session.click_button('awesome')
125
166
  expect(extract_results(@session)['password']).to eq('supasikrit')
126
167
  end
127
168
 
128
- it "should fill in a field based on current value" do
129
- @session.fill_in(currently_with: 'John', with: 'Thomas')
169
+ it 'should fill in a field based on current value' do
170
+ @session.fill_in(id: /form.*name/, currently_with: 'John', with: 'Thomas')
130
171
  @session.click_button('awesome')
131
172
  expect(extract_results(@session)['first_name']).to eq('Thomas')
132
173
  end
133
174
 
134
- it "should fill in a field based on type" do
175
+ it 'should fill in a field based on type' do
135
176
  @session.fill_in(type: 'schmooo', with: 'Schmooo for all')
136
177
  @session.click_button('awesome')
137
178
  expect(extract_results(@session)['schmooo']).to eq('Schmooo for all')
138
179
  end
139
180
 
181
+ it 'should be able to fill in element called on when no locator passed' do
182
+ field = @session.find(:fillable_field, 'form[password]')
183
+ field.fill_in(with: 'supasikrit')
184
+ @session.click_button('awesome')
185
+ expect(extract_results(@session)['password']).to eq('supasikrit')
186
+ end
187
+
140
188
  it "should throw an exception if a hash containing 'with' is not provided" do
141
189
  expect { @session.fill_in 'Name' }.to raise_error(ArgumentError, /with/)
142
190
  end
143
191
 
144
- it "should wait for asynchronous load", requires: [:js] do
192
+ it 'should wait for asynchronous load', requires: [:js] do
193
+ Capybara.default_max_wait_time = 2
145
194
  @session.visit('/with_js')
146
195
  @session.click_link('Click me')
147
196
  @session.fill_in('new_field', with: 'Testing...')
148
197
  end
149
198
 
150
- it "casts to string" do
199
+ it 'casts to string' do
151
200
  @session.fill_in(:form_first_name, with: :Harry)
152
201
  @session.click_button('awesome')
153
202
  expect(extract_results(@session)['first_name']).to eq('Harry')
154
203
  end
155
204
 
156
- it "casts to string if field has maxlength" do
205
+ it 'casts to string if field has maxlength' do
157
206
  @session.fill_in(:form_zipcode, with: 1234567)
158
207
  @session.click_button('awesome')
159
208
  expect(extract_results(@session)['zipcode']).to eq('12345')
160
209
  end
161
210
 
211
+ it 'fills in a field if default_set_options is nil' do
212
+ Capybara.default_set_options = nil
213
+ @session.fill_in(:form_first_name, with: 'Thomas')
214
+ @session.click_button('awesome')
215
+ expect(extract_results(@session)['first_name']).to eq('Thomas')
216
+ end
217
+
162
218
  context 'on a pre-populated textfield with a reformatting onchange', requires: [:js] do
163
219
  it 'should only trigger onchange once' do
164
220
  @session.visit('/with_js')
221
+ # Click somewhere on the page to ensure focus is acquired. Without this FF won't generate change events for some reason???
222
+ @session.find(:css, 'h1', text: 'FooBar').click
165
223
  @session.fill_in('with_change_event', with: 'some value')
166
224
  # click outside the field to trigger the change event
167
- @session.find(:css, 'body').click
225
+ @session.find(:css, 'h1', text: 'FooBar').click
168
226
  expect(@session.find(:css, '.change_event_triggered', match: :one)).to have_text 'some value'
169
227
  end
170
228
 
@@ -172,16 +230,18 @@ Capybara::SpecHelper.spec "#fill_in" do
172
230
  @session.visit('/with_js')
173
231
  @session.fill_in('with_change_event', with: '')
174
232
  # click outside the field to trigger the change event
175
- @session.find(:css, 'body').click
233
+ @session.find(:css, 'h1', text: 'FooBar').click
176
234
  expect(@session).to have_selector(:css, '.change_event_triggered', match: :one)
177
235
  end
178
236
  end
179
237
 
180
- context "with ignore_hidden_fields" do
238
+ context 'with ignore_hidden_fields' do
181
239
  before { Capybara.ignore_hidden_elements = true }
240
+
182
241
  after { Capybara.ignore_hidden_elements = false }
183
- it "should not find a hidden field" do
184
- msg = "Unable to find visible field \"Super Secret\" that is not disabled"
242
+
243
+ it 'should not find a hidden field' do
244
+ msg = /Unable to find visible field "Super Secret"/
185
245
  expect do
186
246
  @session.fill_in('Super Secret', with: '777')
187
247
  end.to raise_error(Capybara::ElementNotFound, msg)
@@ -189,38 +249,44 @@ Capybara::SpecHelper.spec "#fill_in" do
189
249
  end
190
250
 
191
251
  context "with a locator that doesn't exist" do
192
- it "should raise an error" do
193
- msg = "Unable to find visible field \"does not exist\" that is not disabled"
252
+ it 'should raise an error' do
253
+ msg = /Unable to find field "does not exist"/
194
254
  expect do
195
255
  @session.fill_in('does not exist', with: 'Blah blah')
196
256
  end.to raise_error(Capybara::ElementNotFound, msg)
197
257
  end
198
258
  end
199
259
 
200
- context "on a disabled field" do
201
- it "should raise an error" do
260
+ context 'on a disabled field' do
261
+ it 'should raise an error' do
202
262
  expect do
203
263
  @session.fill_in('Disabled Text Field', with: 'Blah blah')
204
264
  end.to raise_error(Capybara::ElementNotFound)
205
265
  end
206
266
  end
207
267
 
208
- context "with :exact option" do
209
- it "should accept partial matches when false" do
210
- @session.fill_in("Explanation", with: "Dude", exact: false)
211
- @session.click_button("awesome")
212
- expect(extract_results(@session)["name_explanation"]).to eq("Dude")
268
+ context 'with :exact option' do
269
+ it 'should accept partial matches when false' do
270
+ @session.fill_in('Explanation', with: 'Dude', exact: false)
271
+ @session.click_button('awesome')
272
+ expect(extract_results(@session)['name_explanation']).to eq('Dude')
213
273
  end
214
274
 
215
- it "should not accept partial matches when true" do
275
+ it 'should not accept partial matches when true' do
216
276
  expect do
217
- @session.fill_in("Explanation", with: "Dude", exact: true)
277
+ @session.fill_in('Explanation', with: 'Dude', exact: true)
218
278
  end.to raise_error(Capybara::ElementNotFound)
219
279
  end
220
280
  end
221
281
 
222
- it "should return the element filled in" do
282
+ it 'should return the element filled in' do
223
283
  el = @session.find(:fillable_field, 'form_first_name')
224
284
  expect(@session.fill_in('form_first_name', with: 'Harry')).to eq el
225
285
  end
286
+
287
+ it 'should warn if passed what looks like a CSS id selector' do
288
+ expect do
289
+ @session.fill_in('#form_first_name', with: 'Harry')
290
+ end.to raise_error(/you may be passing a CSS selector or XPath expression rather than a locator/)
291
+ end
226
292
  end
@@ -5,25 +5,25 @@ Capybara::SpecHelper.spec '#find_button' do
5
5
  @session.visit('/form')
6
6
  end
7
7
 
8
- it "should find any button" do
9
- expect(@session.find_button('med')[:id]).to eq("mediocre")
10
- expect(@session.find_button('crap321').value).to eq("crappy")
8
+ it 'should find any button' do
9
+ expect(@session.find_button('med')[:id]).to eq('mediocre')
10
+ expect(@session.find_button('crap321').value).to eq('crappy')
11
11
  end
12
12
 
13
- context "aria_label attribute with Capybara.enable_aria_label" do
14
- it "should find when true" do
13
+ context 'aria_label attribute with Capybara.enable_aria_label' do
14
+ it 'should find when true' do
15
15
  Capybara.enable_aria_label = true
16
- expect(@session.find_button('Mediocre Button')[:id]).to eq("mediocre")
16
+ expect(@session.find_button('Mediocre Button')[:id]).to eq('mediocre')
17
17
  end
18
18
 
19
- it "should not find when false" do
19
+ it 'should not find when false' do
20
20
  Capybara.enable_aria_label = false
21
21
  expect { @session.find_button('Mediocre Button') }.to raise_error(Capybara::ElementNotFound)
22
22
  end
23
23
  end
24
24
 
25
- it "casts to string" do
26
- expect(@session.find_button(:med)[:id]).to eq("mediocre")
25
+ it 'casts to string' do
26
+ expect(@session.find_button(:med)[:id]).to eq('mediocre')
27
27
  end
28
28
 
29
29
  it "should raise error if the button doesn't exist" do
@@ -32,43 +32,43 @@ Capybara::SpecHelper.spec '#find_button' do
32
32
  end.to raise_error(Capybara::ElementNotFound)
33
33
  end
34
34
 
35
- context "with :exact option" do
36
- it "should accept partial matches when false" do
37
- expect(@session.find_button('What an Awesome', exact: false).value).to eq("awesome")
35
+ context 'with :exact option' do
36
+ it 'should accept partial matches when false' do
37
+ expect(@session.find_button('What an Awesome', exact: false).value).to eq('awesome')
38
38
  end
39
39
 
40
- it "should not accept partial matches when true" do
40
+ it 'should not accept partial matches when true' do
41
41
  expect do
42
42
  @session.find_button('What an Awesome', exact: true)
43
43
  end.to raise_error(Capybara::ElementNotFound)
44
44
  end
45
45
  end
46
46
 
47
- context "with :disabled option" do
48
- it "should find disabled buttons when true" do
49
- expect(@session.find_button('Disabled button', disabled: true).value).to eq("Disabled button")
47
+ context 'with :disabled option' do
48
+ it 'should find disabled buttons when true' do
49
+ expect(@session.find_button('Disabled button', disabled: true).value).to eq('Disabled button')
50
50
  end
51
51
 
52
- it "should not find disabled buttons when false" do
52
+ it 'should not find disabled buttons when false' do
53
53
  expect do
54
54
  @session.find_button('Disabled button', disabled: false)
55
55
  end.to raise_error(Capybara::ElementNotFound)
56
56
  end
57
57
 
58
- it "should default to not finding disabled buttons" do
58
+ it 'should default to not finding disabled buttons' do
59
59
  expect do
60
60
  @session.find_button('Disabled button')
61
61
  end.to raise_error(Capybara::ElementNotFound)
62
62
  end
63
63
 
64
- it "should find disabled buttons when :all" do
65
- expect(@session.find_button('Disabled button', disabled: :all).value).to eq("Disabled button")
64
+ it 'should find disabled buttons when :all' do
65
+ expect(@session.find_button('Disabled button', disabled: :all).value).to eq('Disabled button')
66
66
  end
67
67
  end
68
68
 
69
- context "without locator" do
70
- it "should use options" do
71
- expect(@session.find_button(disabled: true).value).to eq("Disabled button")
69
+ context 'without locator' do
70
+ it 'should use options' do
71
+ expect(@session.find_button(disabled: true).value).to eq('Disabled button')
72
72
  end
73
73
  end
74
74
  end
@@ -5,28 +5,28 @@ Capybara::SpecHelper.spec '#find_by_id' do
5
5
  @session.visit('/with_html')
6
6
  end
7
7
 
8
- it "should find any element by id" do
8
+ it 'should find any element by id' do
9
9
  expect(@session.find_by_id('red').tag_name).to eq('a')
10
10
  end
11
11
 
12
- it "casts to string" do
12
+ it 'casts to string' do
13
13
  expect(@session.find_by_id(:red).tag_name).to eq('a')
14
14
  end
15
15
 
16
- it "should raise error if no element with id is found" do
16
+ it 'should raise error if no element with id is found' do
17
17
  expect do
18
18
  @session.find_by_id('nothing_with_this_id')
19
19
  end.to raise_error(Capybara::ElementNotFound)
20
20
  end
21
21
 
22
- context "with :visible option" do
23
- it "finds invisible elements when `false`" do
24
- expect(@session.find_by_id("hidden_via_ancestor", visible: false).text(:all)).to match(/with hidden ancestor/)
22
+ context 'with :visible option' do
23
+ it 'finds invisible elements when `false`' do
24
+ expect(@session.find_by_id('hidden_via_ancestor', visible: false).text(:all)).to match(/with hidden ancestor/)
25
25
  end
26
26
 
27
- it "finds invisible elements when `false`" do
27
+ it "doesn't find invisible elements when `true`" do
28
28
  expect do
29
- @session.find_by_id("hidden_via_ancestor", visible: true)
29
+ @session.find_by_id('hidden_via_ancestor', visible: true)
30
30
  end.to raise_error(Capybara::ElementNotFound)
31
31
  end
32
32
  end
@@ -5,28 +5,30 @@ Capybara::SpecHelper.spec '#find_field' do
5
5
  @session.visit('/form')
6
6
  end
7
7
 
8
- it "should find any field" do
8
+ it 'should find any field' do
9
+ Capybara.test_id = 'data-test-id'
9
10
  expect(@session.find_field('Dog').value).to eq('dog')
10
11
  expect(@session.find_field('form_description').value).to eq('Descriptive text goes here')
11
12
  expect(@session.find_field('Region')[:name]).to eq('form[region]')
12
- expect(@session.find_field('With Asterisk*')).to be
13
+ expect(@session.find_field('With Asterisk*')).to be_truthy
14
+ expect(@session.find_field('my_test_id')).to be_truthy
13
15
  end
14
16
 
15
- context "aria_label attribute with Capybara.enable_aria_label" do
16
- it "should find when true" do
17
+ context 'aria_label attribute with Capybara.enable_aria_label' do
18
+ it 'should find when true' do
17
19
  Capybara.enable_aria_label = true
18
20
  expect(@session.find_field('Unlabelled Input')[:name]).to eq('form[which_form]')
19
21
  # expect(@session.find_field('Emergency Number')[:id]).to eq('html5_tel')
20
22
  end
21
23
 
22
- it "should not find when false" do
24
+ it 'should not find when false' do
23
25
  Capybara.enable_aria_label = false
24
26
  expect { @session.find_field('Unlabelled Input') }.to raise_error(Capybara::ElementNotFound)
25
27
  # expect { @session.find_field('Emergency Number') }.to raise_error(Capybara::ElementNotFound)
26
28
  end
27
29
  end
28
30
 
29
- it "casts to string" do
31
+ it 'casts to string' do
30
32
  expect(@session.find_field(:Dog).value).to eq('dog')
31
33
  end
32
34
 
@@ -36,62 +38,62 @@ Capybara::SpecHelper.spec '#find_field' do
36
38
  end.to raise_error(Capybara::ElementNotFound)
37
39
  end
38
40
 
39
- it "should raise error if filter option is invalid" do
41
+ it 'should raise error if filter option is invalid' do
40
42
  expect do
41
43
  @session.find_field('Dog', disabled: nil)
42
- end.to raise_error ArgumentError, "Invalid value nil passed to filter disabled"
44
+ end.to raise_error ArgumentError, 'Invalid value nil passed to NodeFilter disabled'
43
45
  end
44
46
 
45
- context "with :exact option" do
46
- it "should accept partial matches when false" do
47
- expect(@session.find_field("Explanation", exact: false)[:name]).to eq("form[name_explanation]")
47
+ context 'with :exact option' do
48
+ it 'should accept partial matches when false' do
49
+ expect(@session.find_field('Explanation', exact: false)[:name]).to eq('form[name_explanation]')
48
50
  end
49
51
 
50
- it "should not accept partial matches when true" do
52
+ it 'should not accept partial matches when true' do
51
53
  expect do
52
- @session.find_field("Explanation", exact: true)
54
+ @session.find_field('Explanation', exact: true)
53
55
  end.to raise_error(Capybara::ElementNotFound)
54
56
  end
55
57
  end
56
58
 
57
- context "with :disabled option" do
58
- it "should find disabled fields when true" do
59
- expect(@session.find_field("Disabled Checkbox", disabled: true)[:name]).to eq("form[disabled_checkbox]")
60
- expect(@session.find_field("form_disabled_fieldset_child", disabled: true)[:name]).to eq("form[disabled_fieldset_child]")
61
- expect(@session.find_field("form_disabled_fieldset_descendant", disabled: true)[:name]).to eq("form[disabled_fieldset_descendant]")
59
+ context 'with :disabled option' do
60
+ it 'should find disabled fields when true' do
61
+ expect(@session.find_field('Disabled Checkbox', disabled: true)[:name]).to eq('form[disabled_checkbox]')
62
+ expect(@session.find_field('form_disabled_fieldset_child', disabled: true)[:name]).to eq('form[disabled_fieldset_child]')
63
+ expect(@session.find_field('form_disabled_fieldset_descendant', disabled: true)[:name]).to eq('form[disabled_fieldset_descendant]')
62
64
  end
63
65
 
64
- it "should not find disabled fields when false" do
66
+ it 'should not find disabled fields when false' do
65
67
  expect do
66
- @session.find_field("Disabled Checkbox", disabled: false)
68
+ @session.find_field('Disabled Checkbox', disabled: false)
67
69
  end.to raise_error(Capybara::ElementNotFound)
68
70
  end
69
71
 
70
- it "should not find disabled fields by default" do
72
+ it 'should not find disabled fields by default' do
71
73
  expect do
72
- @session.find_field("Disabled Checkbox")
74
+ @session.find_field('Disabled Checkbox')
73
75
  end.to raise_error(Capybara::ElementNotFound)
74
76
  end
75
77
 
76
- it "should find disabled fields when :all" do
77
- expect(@session.find_field("Disabled Checkbox", disabled: :all)[:name]).to eq("form[disabled_checkbox]")
78
+ it 'should find disabled fields when :all' do
79
+ expect(@session.find_field('Disabled Checkbox', disabled: :all)[:name]).to eq('form[disabled_checkbox]')
78
80
  end
79
81
 
80
- it "should find enabled fields when :all" do
82
+ it 'should find enabled fields when :all' do
81
83
  expect(@session.find_field('Dog', disabled: :all).value).to eq('dog')
82
84
  end
83
85
  end
84
86
 
85
87
  context 'with :readonly option' do
86
- it "should find readonly fields when true" do
88
+ it 'should find readonly fields when true' do
87
89
  expect(@session.find_field('form[readonly_test]', readonly: true)[:id]).to eq 'readonly'
88
90
  end
89
91
 
90
- it "should not find readonly fields when false" do
92
+ it 'should not find readonly fields when false' do
91
93
  expect(@session.find_field('form[readonly_test]', readonly: false)[:id]).to eq 'not_readonly'
92
94
  end
93
95
 
94
- it "should ignore readonly by default" do
96
+ it 'should ignore readonly by default' do
95
97
  expect do
96
98
  @session.find_field('form[readonly_test]')
97
99
  end.to raise_error(Capybara::Ambiguous, /found 2 elements/)
@@ -100,12 +102,12 @@ Capybara::SpecHelper.spec '#find_field' do
100
102
 
101
103
  context 'with no locator' do
102
104
  it 'should use options to find the field' do
103
- expect(@session.find_field(with: 'dog')['id']).to eq "form_pets_dog"
105
+ expect(@session.find_field(type: 'checkbox', with: 'dog')['id']).to eq 'form_pets_dog'
104
106
  end
105
107
  end
106
108
 
107
- it "should accept an optional filter block" do
109
+ it 'should accept an optional filter block' do
108
110
  # this would be better done with the :with option but this is just a test
109
- expect(@session.find_field('form[pets][]') { |node| node.value == 'dog' }[:id]).to eq "form_pets_dog"
111
+ expect(@session.find_field('form[pets][]') { |node| node.value == 'dog' }[:id]).to eq 'form_pets_dog'
110
112
  end
111
113
  end