capybara 3.3.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 (308) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/History.md +803 -13
  4. data/License.txt +1 -1
  5. data/README.md +257 -84
  6. data/lib/capybara/config.rb +25 -9
  7. data/lib/capybara/cucumber.rb +1 -1
  8. data/lib/capybara/driver/base.rb +17 -3
  9. data/lib/capybara/driver/node.rb +31 -6
  10. data/lib/capybara/dsl.rb +9 -7
  11. data/lib/capybara/helpers.rb +31 -7
  12. data/lib/capybara/minitest/spec.rb +180 -88
  13. data/lib/capybara/minitest.rb +262 -149
  14. data/lib/capybara/node/actions.rb +202 -116
  15. data/lib/capybara/node/base.rb +34 -19
  16. data/lib/capybara/node/document.rb +14 -2
  17. data/lib/capybara/node/document_matchers.rb +10 -12
  18. data/lib/capybara/node/element.rb +269 -115
  19. data/lib/capybara/node/finders.rb +99 -77
  20. data/lib/capybara/node/matchers.rb +327 -151
  21. data/lib/capybara/node/simple.rb +48 -13
  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 +8 -9
  25. data/lib/capybara/queries/base_query.rb +23 -16
  26. data/lib/capybara/queries/current_path_query.rb +16 -6
  27. data/lib/capybara/queries/match_query.rb +1 -0
  28. data/lib/capybara/queries/selector_query.rb +587 -130
  29. data/lib/capybara/queries/sibling_query.rb +8 -6
  30. data/lib/capybara/queries/style_query.rb +6 -2
  31. data/lib/capybara/queries/text_query.rb +28 -14
  32. data/lib/capybara/queries/title_query.rb +2 -2
  33. data/lib/capybara/rack_test/browser.rb +92 -25
  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 +68 -41
  37. data/lib/capybara/rack_test/node.rb +106 -39
  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 +75 -52
  44. data/lib/capybara/rspec/features.rb +7 -7
  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 +141 -339
  60. data/lib/capybara/rspec.rb +2 -0
  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 +27 -25
  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 +73 -25
  88. data/lib/capybara/selector/filters/base.rb +24 -5
  89. data/lib/capybara/selector/filters/expression_filter.rb +3 -3
  90. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  91. data/lib/capybara/selector/filters/node_filter.rb +16 -2
  92. data/lib/capybara/selector/regexp_disassembler.rb +211 -0
  93. data/lib/capybara/selector/selector.rb +85 -348
  94. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  95. data/lib/capybara/selector.rb +474 -447
  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 +255 -143
  101. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +93 -11
  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 +436 -134
  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 +56 -19
  123. data/lib/capybara/server/checker.rb +9 -3
  124. data/lib/capybara/server/middleware.rb +28 -12
  125. data/lib/capybara/server.rb +33 -10
  126. data/lib/capybara/session/config.rb +34 -10
  127. data/lib/capybara/session/matchers.rb +23 -16
  128. data/lib/capybara/session.rb +230 -170
  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 +121 -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 +127 -40
  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_spec.rb +21 -18
  140. data/lib/capybara/spec/session/assert_selector_spec.rb +52 -58
  141. data/lib/capybara/spec/session/assert_style_spec.rb +7 -7
  142. data/lib/capybara/spec/session/assert_text_spec.rb +74 -50
  143. data/lib/capybara/spec/session/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 +6 -6
  146. data/lib/capybara/spec/session/check_spec.rb +102 -47
  147. data/lib/capybara/spec/session/choose_spec.rb +58 -32
  148. data/lib/capybara/spec/session/click_button_spec.rb +219 -163
  149. data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -23
  150. data/lib/capybara/spec/session/click_link_spec.rb +77 -54
  151. data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
  152. data/lib/capybara/spec/session/current_url_spec.rb +38 -29
  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_spec.rb +8 -8
  156. data/lib/capybara/spec/session/element/match_css_spec.rb +16 -10
  157. data/lib/capybara/spec/session/element/match_xpath_spec.rb +6 -6
  158. data/lib/capybara/spec/session/element/matches_selector_spec.rb +68 -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 +101 -46
  163. data/lib/capybara/spec/session/find_button_spec.rb +23 -23
  164. data/lib/capybara/spec/session/find_by_id_spec.rb +7 -7
  165. data/lib/capybara/spec/session/find_field_spec.rb +32 -30
  166. data/lib/capybara/spec/session/find_link_spec.rb +31 -21
  167. data/lib/capybara/spec/session/find_spec.rb +244 -141
  168. data/lib/capybara/spec/session/first_spec.rb +43 -43
  169. data/lib/capybara/spec/session/frame/frame_title_spec.rb +5 -5
  170. data/lib/capybara/spec/session/frame/frame_url_spec.rb +5 -5
  171. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +30 -18
  172. data/lib/capybara/spec/session/frame/within_frame_spec.rb +45 -18
  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 +94 -13
  179. data/lib/capybara/spec/session/has_css_spec.rb +272 -132
  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 +44 -4
  184. data/lib/capybara/spec/session/has_none_selectors_spec.rb +31 -31
  185. data/lib/capybara/spec/session/has_select_spec.rb +84 -50
  186. data/lib/capybara/spec/session/has_selector_spec.rb +111 -71
  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_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 +894 -142
  196. data/lib/capybara/spec/session/node_wrapper_spec.rb +10 -7
  197. data/lib/capybara/spec/session/refresh_spec.rb +9 -7
  198. data/lib/capybara/spec/session/reset_session_spec.rb +63 -35
  199. data/lib/capybara/spec/session/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 +2 -2
  202. data/lib/capybara/spec/session/save_page_spec.rb +37 -37
  203. data/lib/capybara/spec/session/save_screenshot_spec.rb +10 -10
  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 +85 -85
  207. data/lib/capybara/spec/session/selectors_spec.rb +49 -18
  208. data/lib/capybara/spec/session/sibling_spec.rb +9 -9
  209. data/lib/capybara/spec/session/text_spec.rb +25 -24
  210. data/lib/capybara/spec/session/title_spec.rb +7 -6
  211. data/lib/capybara/spec/session/uncheck_spec.rb +33 -21
  212. data/lib/capybara/spec/session/unselect_spec.rb +37 -37
  213. data/lib/capybara/spec/session/visit_spec.rb +68 -49
  214. data/lib/capybara/spec/session/window/become_closed_spec.rb +20 -17
  215. data/lib/capybara/spec/session/window/current_window_spec.rb +1 -1
  216. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +20 -16
  217. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +6 -2
  218. data/lib/capybara/spec/session/window/window_spec.rb +62 -63
  219. data/lib/capybara/spec/session/window/windows_spec.rb +5 -1
  220. data/lib/capybara/spec/session/window/within_window_spec.rb +14 -14
  221. data/lib/capybara/spec/session/within_spec.rb +79 -42
  222. data/lib/capybara/spec/spec_helper.rb +41 -53
  223. data/lib/capybara/spec/test_app.rb +132 -43
  224. data/lib/capybara/spec/views/animated.erb +49 -0
  225. data/lib/capybara/spec/views/form.erb +139 -42
  226. data/lib/capybara/spec/views/frame_child.erb +4 -3
  227. data/lib/capybara/spec/views/frame_one.erb +2 -1
  228. data/lib/capybara/spec/views/frame_parent.erb +1 -1
  229. data/lib/capybara/spec/views/frame_two.erb +1 -1
  230. data/lib/capybara/spec/views/initial_alert.erb +2 -1
  231. data/lib/capybara/spec/views/layout.erb +10 -0
  232. data/lib/capybara/spec/views/obscured.erb +47 -0
  233. data/lib/capybara/spec/views/offset.erb +33 -0
  234. data/lib/capybara/spec/views/path.erb +2 -2
  235. data/lib/capybara/spec/views/popup_one.erb +1 -1
  236. data/lib/capybara/spec/views/popup_two.erb +1 -1
  237. data/lib/capybara/spec/views/react.erb +45 -0
  238. data/lib/capybara/spec/views/scroll.erb +21 -0
  239. data/lib/capybara/spec/views/spatial.erb +31 -0
  240. data/lib/capybara/spec/views/tables.erb +67 -0
  241. data/lib/capybara/spec/views/with_animation.erb +39 -4
  242. data/lib/capybara/spec/views/with_base_tag.erb +2 -2
  243. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  244. data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
  245. data/lib/capybara/spec/views/with_hover.erb +3 -2
  246. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  247. data/lib/capybara/spec/views/with_html.erb +37 -9
  248. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  249. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  250. data/lib/capybara/spec/views/with_js.erb +26 -5
  251. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  252. data/lib/capybara/spec/views/with_namespace.erb +1 -0
  253. data/lib/capybara/spec/views/with_scope.erb +2 -2
  254. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  255. data/lib/capybara/spec/views/with_shadow.erb +31 -0
  256. data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
  257. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  258. data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
  259. data/lib/capybara/spec/views/with_windows.erb +1 -1
  260. data/lib/capybara/spec/views/within_frames.erb +1 -1
  261. data/lib/capybara/version.rb +1 -1
  262. data/lib/capybara/window.rb +19 -25
  263. data/lib/capybara.rb +126 -111
  264. data/spec/basic_node_spec.rb +59 -34
  265. data/spec/capybara_spec.rb +56 -44
  266. data/spec/counter_spec.rb +35 -0
  267. data/spec/css_builder_spec.rb +101 -0
  268. data/spec/css_splitter_spec.rb +8 -8
  269. data/spec/dsl_spec.rb +79 -52
  270. data/spec/filter_set_spec.rb +9 -9
  271. data/spec/fixtures/selenium_driver_rspec_failure.rb +4 -4
  272. data/spec/fixtures/selenium_driver_rspec_success.rb +4 -4
  273. data/spec/minitest_spec.rb +45 -7
  274. data/spec/minitest_spec_spec.rb +87 -64
  275. data/spec/per_session_config_spec.rb +6 -6
  276. data/spec/rack_test_spec.rb +172 -116
  277. data/spec/regexp_dissassembler_spec.rb +250 -0
  278. data/spec/result_spec.rb +80 -72
  279. data/spec/rspec/features_spec.rb +21 -16
  280. data/spec/rspec/scenarios_spec.rb +10 -6
  281. data/spec/rspec/shared_spec_matchers.rb +407 -365
  282. data/spec/rspec/views_spec.rb +3 -3
  283. data/spec/rspec_matchers_spec.rb +35 -10
  284. data/spec/rspec_spec.rb +63 -41
  285. data/spec/sauce_spec_chrome.rb +43 -0
  286. data/spec/selector_spec.rb +334 -89
  287. data/spec/selenium_spec_chrome.rb +176 -62
  288. data/spec/selenium_spec_chrome_remote.rb +54 -14
  289. data/spec/selenium_spec_edge.rb +41 -8
  290. data/spec/selenium_spec_firefox.rb +228 -0
  291. data/spec/selenium_spec_firefox_remote.rb +94 -0
  292. data/spec/selenium_spec_ie.rb +129 -11
  293. data/spec/selenium_spec_safari.rb +162 -0
  294. data/spec/server_spec.rb +171 -97
  295. data/spec/session_spec.rb +34 -18
  296. data/spec/shared_selenium_node.rb +79 -0
  297. data/spec/shared_selenium_session.rb +344 -80
  298. data/spec/spec_helper.rb +124 -2
  299. data/spec/whitespace_normalizer_spec.rb +54 -0
  300. data/spec/xpath_builder_spec.rb +93 -0
  301. metadata +326 -28
  302. data/lib/capybara/rspec/compound.rb +0 -94
  303. data/lib/capybara/selenium/driver_specializations/marionette_driver.rb +0 -31
  304. data/lib/capybara/selenium/nodes/marionette_node.rb +0 -31
  305. data/lib/capybara/spec/session/has_style_spec.rb +0 -25
  306. data/lib/capybara/spec/session/source_spec.rb +0 -0
  307. data/lib/capybara/spec/views/with_title.erb +0 -5
  308. data/spec/selenium_spec_marionette.rb +0 -167
@@ -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,89 +86,129 @@ 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
 
162
- it "fills in a field if default_set_options is nil" do
211
+ it 'fills in a field if default_set_options is nil' do
163
212
  Capybara.default_set_options = nil
164
213
  @session.fill_in(:form_first_name, with: 'Thomas')
165
214
  @session.click_button('awesome')
@@ -170,10 +219,10 @@ Capybara::SpecHelper.spec "#fill_in" do
170
219
  it 'should only trigger onchange once' do
171
220
  @session.visit('/with_js')
172
221
  # Click somewhere on the page to ensure focus is acquired. Without this FF won't generate change events for some reason???
173
- @session.find(:css, 'body').click
222
+ @session.find(:css, 'h1', text: 'FooBar').click
174
223
  @session.fill_in('with_change_event', with: 'some value')
175
224
  # click outside the field to trigger the change event
176
- @session.find(:css, 'body').click
225
+ @session.find(:css, 'h1', text: 'FooBar').click
177
226
  expect(@session.find(:css, '.change_event_triggered', match: :one)).to have_text 'some value'
178
227
  end
179
228
 
@@ -181,18 +230,18 @@ Capybara::SpecHelper.spec "#fill_in" do
181
230
  @session.visit('/with_js')
182
231
  @session.fill_in('with_change_event', with: '')
183
232
  # click outside the field to trigger the change event
184
- @session.find(:css, 'body').click
233
+ @session.find(:css, 'h1', text: 'FooBar').click
185
234
  expect(@session).to have_selector(:css, '.change_event_triggered', match: :one)
186
235
  end
187
236
  end
188
237
 
189
- context "with ignore_hidden_fields" do
238
+ context 'with ignore_hidden_fields' do
190
239
  before { Capybara.ignore_hidden_elements = true }
191
240
 
192
241
  after { Capybara.ignore_hidden_elements = false }
193
242
 
194
- it "should not find a hidden field" do
195
- msg = "Unable to find visible field \"Super Secret\" that is not disabled"
243
+ it 'should not find a hidden field' do
244
+ msg = /Unable to find visible field "Super Secret"/
196
245
  expect do
197
246
  @session.fill_in('Super Secret', with: '777')
198
247
  end.to raise_error(Capybara::ElementNotFound, msg)
@@ -200,38 +249,44 @@ Capybara::SpecHelper.spec "#fill_in" do
200
249
  end
201
250
 
202
251
  context "with a locator that doesn't exist" do
203
- it "should raise an error" do
204
- 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"/
205
254
  expect do
206
255
  @session.fill_in('does not exist', with: 'Blah blah')
207
256
  end.to raise_error(Capybara::ElementNotFound, msg)
208
257
  end
209
258
  end
210
259
 
211
- context "on a disabled field" do
212
- it "should raise an error" do
260
+ context 'on a disabled field' do
261
+ it 'should raise an error' do
213
262
  expect do
214
263
  @session.fill_in('Disabled Text Field', with: 'Blah blah')
215
264
  end.to raise_error(Capybara::ElementNotFound)
216
265
  end
217
266
  end
218
267
 
219
- context "with :exact option" do
220
- it "should accept partial matches when false" do
221
- @session.fill_in("Explanation", with: "Dude", exact: false)
222
- @session.click_button("awesome")
223
- 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')
224
273
  end
225
274
 
226
- it "should not accept partial matches when true" do
275
+ it 'should not accept partial matches when true' do
227
276
  expect do
228
- @session.fill_in("Explanation", with: "Dude", exact: true)
277
+ @session.fill_in('Explanation', with: 'Dude', exact: true)
229
278
  end.to raise_error(Capybara::ElementNotFound)
230
279
  end
231
280
  end
232
281
 
233
- it "should return the element filled in" do
282
+ it 'should return the element filled in' do
234
283
  el = @session.find(:fillable_field, 'form_first_name')
235
284
  expect(@session.fill_in('form_first_name', with: 'Harry')).to eq el
236
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
237
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
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
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 NodeFilter 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