capybara 2.18.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 (316) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/History.md +945 -12
  4. data/License.txt +1 -1
  5. data/README.md +264 -90
  6. data/lib/capybara/config.rb +29 -57
  7. data/lib/capybara/cucumber.rb +2 -3
  8. data/lib/capybara/driver/base.rb +35 -18
  9. data/lib/capybara/driver/node.rb +40 -10
  10. data/lib/capybara/dsl.rb +10 -7
  11. data/lib/capybara/helpers.rb +70 -31
  12. data/lib/capybara/minitest/spec.rb +185 -83
  13. data/lib/capybara/minitest.rb +232 -112
  14. data/lib/capybara/node/actions.rb +274 -171
  15. data/lib/capybara/node/base.rb +42 -34
  16. data/lib/capybara/node/document.rb +15 -3
  17. data/lib/capybara/node/document_matchers.rb +19 -21
  18. data/lib/capybara/node/element.rb +362 -135
  19. data/lib/capybara/node/finders.rb +151 -137
  20. data/lib/capybara/node/matchers.rb +394 -209
  21. data/lib/capybara/node/simple.rb +59 -26
  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 +12 -9
  25. data/lib/capybara/queries/base_query.rb +39 -28
  26. data/lib/capybara/queries/current_path_query.rb +21 -27
  27. data/lib/capybara/queries/match_query.rb +14 -7
  28. data/lib/capybara/queries/selector_query.rb +659 -149
  29. data/lib/capybara/queries/sibling_query.rb +11 -9
  30. data/lib/capybara/queries/style_query.rb +45 -0
  31. data/lib/capybara/queries/text_query.rb +56 -38
  32. data/lib/capybara/queries/title_query.rb +8 -11
  33. data/lib/capybara/rack_test/browser.rb +114 -42
  34. data/lib/capybara/rack_test/css_handlers.rb +6 -4
  35. data/lib/capybara/rack_test/driver.rb +22 -17
  36. data/lib/capybara/rack_test/errors.rb +6 -0
  37. data/lib/capybara/rack_test/form.rb +93 -58
  38. data/lib/capybara/rack_test/node.rb +184 -81
  39. data/lib/capybara/rails.rb +3 -7
  40. data/lib/capybara/registration_container.rb +41 -0
  41. data/lib/capybara/registrations/drivers.rb +42 -0
  42. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  43. data/lib/capybara/registrations/servers.rb +66 -0
  44. data/lib/capybara/result.rb +97 -63
  45. data/lib/capybara/rspec/features.rb +17 -50
  46. data/lib/capybara/rspec/matcher_proxies.rb +52 -15
  47. data/lib/capybara/rspec/matchers/base.rb +113 -0
  48. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  49. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  50. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  51. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  52. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  53. data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
  54. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  55. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  56. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  57. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  58. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  59. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  60. data/lib/capybara/rspec/matchers.rb +146 -310
  61. data/lib/capybara/rspec.rb +7 -11
  62. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  63. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  64. data/lib/capybara/selector/css.rb +85 -13
  65. data/lib/capybara/selector/definition/button.rb +68 -0
  66. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  67. data/lib/capybara/selector/definition/css.rb +10 -0
  68. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  69. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  70. data/lib/capybara/selector/definition/element.rb +28 -0
  71. data/lib/capybara/selector/definition/field.rb +40 -0
  72. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  73. data/lib/capybara/selector/definition/file_field.rb +13 -0
  74. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  75. data/lib/capybara/selector/definition/frame.rb +17 -0
  76. data/lib/capybara/selector/definition/id.rb +6 -0
  77. data/lib/capybara/selector/definition/label.rb +62 -0
  78. data/lib/capybara/selector/definition/link.rb +55 -0
  79. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  80. data/lib/capybara/selector/definition/option.rb +27 -0
  81. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  82. data/lib/capybara/selector/definition/select.rb +81 -0
  83. data/lib/capybara/selector/definition/table.rb +109 -0
  84. data/lib/capybara/selector/definition/table_row.rb +21 -0
  85. data/lib/capybara/selector/definition/xpath.rb +5 -0
  86. data/lib/capybara/selector/definition.rb +280 -0
  87. data/lib/capybara/selector/filter.rb +2 -17
  88. data/lib/capybara/selector/filter_set.rb +80 -33
  89. data/lib/capybara/selector/filters/base.rb +50 -6
  90. data/lib/capybara/selector/filters/expression_filter.rb +8 -26
  91. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  92. data/lib/capybara/selector/filters/node_filter.rb +16 -12
  93. data/lib/capybara/selector/regexp_disassembler.rb +211 -0
  94. data/lib/capybara/selector/selector.rb +93 -210
  95. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  96. data/lib/capybara/selector.rb +475 -523
  97. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  98. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  99. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  100. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  101. data/lib/capybara/selenium/driver.rb +298 -267
  102. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  103. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
  104. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
  105. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  106. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  107. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  108. data/lib/capybara/selenium/extensions/find.rb +110 -0
  109. data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
  110. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  111. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  112. data/lib/capybara/selenium/node.rb +517 -145
  113. data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
  114. data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
  115. data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  116. data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  117. data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  118. data/lib/capybara/selenium/patches/atoms.rb +18 -0
  119. data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  120. data/lib/capybara/selenium/patches/logs.rb +45 -0
  121. data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  122. data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  123. data/lib/capybara/server/animation_disabler.rb +80 -0
  124. data/lib/capybara/server/checker.rb +44 -0
  125. data/lib/capybara/server/middleware.rb +71 -0
  126. data/lib/capybara/server.rb +59 -67
  127. data/lib/capybara/session/config.rb +81 -67
  128. data/lib/capybara/session/matchers.rb +28 -20
  129. data/lib/capybara/session.rb +337 -365
  130. data/lib/capybara/spec/public/jquery.js +5 -5
  131. data/lib/capybara/spec/public/offset.js +6 -0
  132. data/lib/capybara/spec/public/test.js +151 -12
  133. data/lib/capybara/spec/session/accept_alert_spec.rb +12 -11
  134. data/lib/capybara/spec/session/accept_confirm_spec.rb +6 -5
  135. data/lib/capybara/spec/session/accept_prompt_spec.rb +10 -10
  136. data/lib/capybara/spec/session/active_element_spec.rb +31 -0
  137. data/lib/capybara/spec/session/all_spec.rb +161 -57
  138. data/lib/capybara/spec/session/ancestor_spec.rb +27 -24
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +68 -38
  140. data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
  141. data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  142. data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  143. data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
  144. data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +22 -12
  145. data/lib/capybara/spec/session/attach_file_spec.rb +144 -69
  146. data/lib/capybara/spec/session/body_spec.rb +12 -13
  147. data/lib/capybara/spec/session/check_spec.rb +117 -55
  148. data/lib/capybara/spec/session/choose_spec.rb +64 -31
  149. data/lib/capybara/spec/session/click_button_spec.rb +231 -173
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +55 -35
  151. data/lib/capybara/spec/session/click_link_spec.rb +93 -58
  152. data/lib/capybara/spec/session/current_scope_spec.rb +12 -11
  153. data/lib/capybara/spec/session/current_url_spec.rb +57 -39
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +4 -4
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +3 -2
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +71 -57
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +8 -7
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +29 -8
  162. data/lib/capybara/spec/session/execute_script_spec.rb +10 -8
  163. data/lib/capybara/spec/session/fill_in_spec.rb +134 -43
  164. data/lib/capybara/spec/session/find_button_spec.rb +25 -24
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
  166. data/lib/capybara/spec/session/find_field_spec.rb +37 -41
  167. data/lib/capybara/spec/session/find_link_spec.rb +46 -17
  168. data/lib/capybara/spec/session/find_spec.rb +260 -145
  169. data/lib/capybara/spec/session/first_spec.rb +80 -52
  170. data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
  171. data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
  172. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +33 -20
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +52 -32
  174. data/lib/capybara/spec/session/go_back_spec.rb +2 -1
  175. data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +31 -31
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +100 -13
  180. data/lib/capybara/spec/session/has_css_spec.rb +272 -137
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +60 -61
  182. data/lib/capybara/spec/session/has_element_spec.rb +47 -0
  183. data/lib/capybara/spec/session/has_field_spec.rb +139 -59
  184. data/lib/capybara/spec/session/has_link_spec.rb +47 -6
  185. data/lib/capybara/spec/session/has_none_selectors_spec.rb +42 -40
  186. data/lib/capybara/spec/session/has_select_spec.rb +107 -72
  187. data/lib/capybara/spec/session/has_selector_spec.rb +120 -71
  188. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  189. data/lib/capybara/spec/session/has_table_spec.rb +183 -5
  190. data/lib/capybara/spec/session/has_text_spec.rb +106 -62
  191. data/lib/capybara/spec/session/has_title_spec.rb +20 -14
  192. data/lib/capybara/spec/session/has_xpath_spec.rb +57 -38
  193. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
  194. data/lib/capybara/spec/session/html_spec.rb +14 -6
  195. data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
  196. data/lib/capybara/spec/session/node_spec.rb +1024 -153
  197. data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  198. data/lib/capybara/spec/session/refresh_spec.rb +12 -6
  199. data/lib/capybara/spec/session/reset_session_spec.rb +82 -35
  200. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
  201. data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
  202. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +8 -12
  203. data/lib/capybara/spec/session/save_page_spec.rb +42 -55
  204. data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
  205. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  206. data/lib/capybara/spec/session/scroll_spec.rb +119 -0
  207. data/lib/capybara/spec/session/select_spec.rb +107 -81
  208. data/lib/capybara/spec/session/selectors_spec.rb +52 -19
  209. data/lib/capybara/spec/session/sibling_spec.rb +10 -10
  210. data/lib/capybara/spec/session/text_spec.rb +37 -21
  211. data/lib/capybara/spec/session/title_spec.rb +17 -5
  212. data/lib/capybara/spec/session/uncheck_spec.rb +43 -23
  213. data/lib/capybara/spec/session/unselect_spec.rb +39 -38
  214. data/lib/capybara/spec/session/visit_spec.rb +85 -53
  215. data/lib/capybara/spec/session/window/become_closed_spec.rb +24 -20
  216. data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
  217. data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
  218. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +27 -22
  219. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +12 -6
  220. data/lib/capybara/spec/session/window/window_spec.rb +97 -63
  221. data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
  222. data/lib/capybara/spec/session/window/within_window_spec.rb +31 -86
  223. data/lib/capybara/spec/session/within_spec.rb +83 -44
  224. data/lib/capybara/spec/spec_helper.rb +54 -44
  225. data/lib/capybara/spec/test_app.rb +158 -43
  226. data/lib/capybara/spec/views/animated.erb +49 -0
  227. data/lib/capybara/spec/views/form.erb +163 -42
  228. data/lib/capybara/spec/views/frame_child.erb +4 -3
  229. data/lib/capybara/spec/views/frame_one.erb +2 -1
  230. data/lib/capybara/spec/views/frame_parent.erb +1 -1
  231. data/lib/capybara/spec/views/frame_two.erb +1 -1
  232. data/lib/capybara/spec/views/initial_alert.erb +2 -1
  233. data/lib/capybara/spec/views/layout.erb +10 -0
  234. data/lib/capybara/spec/views/obscured.erb +47 -0
  235. data/lib/capybara/spec/views/offset.erb +33 -0
  236. data/lib/capybara/spec/views/path.erb +2 -2
  237. data/lib/capybara/spec/views/popup_one.erb +1 -1
  238. data/lib/capybara/spec/views/popup_two.erb +1 -1
  239. data/lib/capybara/spec/views/react.erb +45 -0
  240. data/lib/capybara/spec/views/scroll.erb +21 -0
  241. data/lib/capybara/spec/views/spatial.erb +31 -0
  242. data/lib/capybara/spec/views/tables.erb +68 -1
  243. data/lib/capybara/spec/views/with_animation.erb +81 -0
  244. data/lib/capybara/spec/views/with_base_tag.erb +2 -2
  245. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  246. data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
  247. data/lib/capybara/spec/views/with_hover.erb +3 -2
  248. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  249. data/lib/capybara/spec/views/with_html.erb +69 -12
  250. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  251. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  252. data/lib/capybara/spec/views/with_js.erb +30 -5
  253. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  254. data/lib/capybara/spec/views/with_namespace.erb +21 -0
  255. data/lib/capybara/spec/views/with_scope.erb +2 -2
  256. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  257. data/lib/capybara/spec/views/with_shadow.erb +31 -0
  258. data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
  259. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  260. data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
  261. data/lib/capybara/spec/views/with_windows.erb +1 -1
  262. data/lib/capybara/spec/views/within_frames.erb +5 -2
  263. data/lib/capybara/version.rb +2 -1
  264. data/lib/capybara/window.rb +36 -34
  265. data/lib/capybara.rb +134 -107
  266. data/spec/basic_node_spec.rb +60 -34
  267. data/spec/capybara_spec.rb +63 -88
  268. data/spec/counter_spec.rb +35 -0
  269. data/spec/css_builder_spec.rb +101 -0
  270. data/spec/css_splitter_spec.rb +38 -0
  271. data/spec/dsl_spec.rb +85 -64
  272. data/spec/filter_set_spec.rb +27 -9
  273. data/spec/fixtures/certificate.pem +25 -0
  274. data/spec/fixtures/key.pem +27 -0
  275. data/spec/fixtures/selenium_driver_rspec_failure.rb +6 -5
  276. data/spec/fixtures/selenium_driver_rspec_success.rb +6 -5
  277. data/spec/minitest_spec.rb +52 -7
  278. data/spec/minitest_spec_spec.rb +94 -63
  279. data/spec/per_session_config_spec.rb +14 -13
  280. data/spec/rack_test_spec.rb +194 -125
  281. data/spec/regexp_dissassembler_spec.rb +250 -0
  282. data/spec/result_spec.rb +111 -50
  283. data/spec/rspec/features_spec.rb +37 -31
  284. data/spec/rspec/scenarios_spec.rb +10 -8
  285. data/spec/rspec/shared_spec_matchers.rb +473 -422
  286. data/spec/rspec/views_spec.rb +5 -3
  287. data/spec/rspec_matchers_spec.rb +52 -11
  288. data/spec/rspec_spec.rb +109 -89
  289. data/spec/sauce_spec_chrome.rb +43 -0
  290. data/spec/selector_spec.rb +397 -68
  291. data/spec/selenium_spec_chrome.rb +187 -40
  292. data/spec/selenium_spec_chrome_remote.rb +96 -0
  293. data/spec/selenium_spec_edge.rb +60 -0
  294. data/spec/selenium_spec_firefox.rb +201 -41
  295. data/spec/selenium_spec_firefox_remote.rb +94 -0
  296. data/spec/selenium_spec_ie.rb +149 -0
  297. data/spec/selenium_spec_safari.rb +162 -0
  298. data/spec/server_spec.rb +213 -102
  299. data/spec/session_spec.rb +53 -16
  300. data/spec/shared_selenium_node.rb +79 -0
  301. data/spec/shared_selenium_session.rb +473 -122
  302. data/spec/spec_helper.rb +126 -7
  303. data/spec/whitespace_normalizer_spec.rb +54 -0
  304. data/spec/xpath_builder_spec.rb +93 -0
  305. metadata +355 -73
  306. data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
  307. data/.yard/templates_custom/default/class/html/setup.rb +0 -17
  308. data/.yard/yard_extensions.rb +0 -78
  309. data/lib/capybara/query.rb +0 -7
  310. data/lib/capybara/rspec/compound.rb +0 -95
  311. data/lib/capybara/spec/session/assert_current_path.rb +0 -72
  312. data/lib/capybara/spec/session/assert_selector.rb +0 -148
  313. data/lib/capybara/spec/session/assert_text.rb +0 -234
  314. data/lib/capybara/spec/session/source_spec.rb +0 -0
  315. data/lib/capybara/spec/views/with_title.erb +0 -5
  316. data/spec/selenium_spec_marionette.rb +0 -127
@@ -1,20 +1,21 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Capybara::SpecHelper.spec '#has_field' do
3
4
  before { @session.visit('/form') }
4
5
 
5
- it "should be true if the field is on the page" do
6
+ it 'should be true if the field is on the page' do
6
7
  expect(@session).to have_field('Dog')
7
8
  expect(@session).to have_field('form_description')
8
9
  expect(@session).to have_field('Region')
9
- expect(@session).to have_field(:'Region')
10
+ expect(@session).to have_field(:Region)
10
11
  end
11
12
 
12
- it "should be false if the field is not on the page" do
13
+ it 'should be false if the field is not on the page' do
13
14
  expect(@session).not_to have_field('Monkey')
14
15
  end
15
16
 
16
17
  context 'with value' do
17
- it "should be true if a field with the given value is on the page" do
18
+ it 'should be true if a field with the given value is on the page' do
18
19
  expect(@session).to have_field('First Name', with: 'John')
19
20
  expect(@session).to have_field('First Name', with: /^Joh/)
20
21
  expect(@session).to have_field('Phone', with: '+1 555 7021')
@@ -22,28 +23,61 @@ Capybara::SpecHelper.spec '#has_field' do
22
23
  expect(@session).to have_field('Description', with: 'Descriptive text goes here')
23
24
  end
24
25
 
25
- it "should be false if the given field is not on the page" do
26
+ it 'should be false if the given field is not on the page' do
26
27
  expect(@session).not_to have_field('First Name', with: 'Peter')
27
28
  expect(@session).not_to have_field('First Name', with: /eter$/)
28
29
  expect(@session).not_to have_field('Wrong Name', with: 'John')
29
30
  expect(@session).not_to have_field('Description', with: 'Monkey')
30
31
  end
31
32
 
32
- it "should be true after the field has been filled in with the given value" do
33
+ it 'should be true after the field has been filled in with the given value' do
33
34
  @session.fill_in('First Name', with: 'Jonas')
34
35
  expect(@session).to have_field('First Name', with: 'Jonas')
35
36
  expect(@session).to have_field('First Name', with: /ona/)
36
37
  end
37
38
 
38
- it "should be false after the field has been filled in with a different value" do
39
+ it 'should be false after the field has been filled in with a different value' do
39
40
  @session.fill_in('First Name', with: 'Jonas')
40
41
  expect(@session).not_to have_field('First Name', with: 'John')
41
42
  expect(@session).not_to have_field('First Name', with: /John|Paul|George|Ringo/)
42
43
  end
44
+
45
+ it 'should output filter errors if only one element matched the selector but failed the filters' do
46
+ @session.fill_in('First Name', with: 'Thomas')
47
+ expect do
48
+ expect(@session).to have_field('First Name', with: 'Jonas')
49
+ end.to raise_exception(RSpec::Expectations::ExpectationNotMetError, /Expected value to be "Jonas" but was "Thomas"/)
50
+
51
+ # native boolean node filter
52
+ expect do
53
+ expect(@session).to have_field('First Name', readonly: true)
54
+ end.to raise_exception(RSpec::Expectations::ExpectationNotMetError, /Expected readonly true but it wasn't/)
55
+
56
+ # inherited boolean node filter
57
+ expect do
58
+ expect(@session).to have_field('form_pets_cat', checked: true)
59
+ end.to raise_exception(RSpec::Expectations::ExpectationNotMetError, /Expected checked true but it wasn't/)
60
+ end
61
+ end
62
+
63
+ context 'with validation message', requires: [:html_validation] do
64
+ it 'should accept a regexp' do
65
+ @session.fill_in('form_zipcode', with: '1234')
66
+ expect(@session).to have_field('form_zipcode', validation_message: /match the requested format/)
67
+ expect(@session).not_to have_field('form_zipcode', validation_message: /random/)
68
+ end
69
+
70
+ it 'should accept a string' do
71
+ @session.fill_in('form_zipcode', with: '1234')
72
+ expect(@session).to have_field('form_zipcode', validation_message: 'Please match the requested format.')
73
+ expect(@session).not_to have_field('form_zipcode', validation_message: 'match the requested format.')
74
+ @session.fill_in('form_zipcode', with: '12345')
75
+ expect(@session).to have_field('form_zipcode', validation_message: '')
76
+ end
43
77
  end
44
78
 
45
79
  context 'with type' do
46
- it "should be true if a field with the given type is on the page" do
80
+ it 'should be true if a field with the given type is on the page' do
47
81
  expect(@session).to have_field('First Name', type: 'text')
48
82
  expect(@session).to have_field('Html5 Email', type: 'email')
49
83
  expect(@session).to have_field('Html5 Multiple Email', type: 'email')
@@ -52,7 +86,7 @@ Capybara::SpecHelper.spec '#has_field' do
52
86
  expect(@session).to have_field('Languages', type: 'select')
53
87
  end
54
88
 
55
- it "should be false if the given field is not on the page" do
89
+ it 'should be false if the given field is not on the page' do
56
90
  expect(@session).not_to have_field('First Name', type: 'textarea')
57
91
  expect(@session).not_to have_field('Html5 Email', type: 'tel')
58
92
  expect(@session).not_to have_field('Html5 Multiple Email', type: 'tel')
@@ -60,59 +94,93 @@ Capybara::SpecHelper.spec '#has_field' do
60
94
  expect(@session).not_to have_field('Description', type: 'email')
61
95
  expect(@session).not_to have_field('Languages', type: 'textarea')
62
96
  end
97
+
98
+ it 'it can find type="hidden" elements if explicity specified' do
99
+ expect(@session).to have_field('form[data]', with: 'TWTW', type: 'hidden')
100
+ end
63
101
  end
64
102
 
65
103
  context 'with multiple' do
66
- it "should be true if a field with the multiple attribute is on the page" do
104
+ it 'should be true if a field with the multiple attribute is on the page' do
67
105
  expect(@session).to have_field('Html5 Multiple Email', multiple: true)
68
106
  end
69
107
 
70
- it "should be false if a field without the multiple attribute is not on the page" do
108
+ it 'should be false if a field without the multiple attribute is not on the page' do
71
109
  expect(@session).not_to have_field('Html5 Multiple Email', multiple: false)
72
110
  end
73
111
  end
112
+
113
+ context 'with focused:', requires: [:active_element] do
114
+ it 'should be true if a field has focus' do
115
+ 2.times { @session.send_keys(:tab) }
116
+
117
+ expect(@session).to have_field('An Input', focused: true)
118
+ end
119
+
120
+ it 'should be false if a field does not have focus' do
121
+ expect(@session).to have_field('An Input', focused: false)
122
+ end
123
+ end
124
+
125
+ context 'with valid', requires: [:js] do
126
+ it 'should be true if field is valid' do
127
+ @session.fill_in 'required', with: 'something'
128
+ @session.fill_in 'length', with: 'abcd'
129
+
130
+ expect(@session).to have_field('required', valid: true)
131
+ expect(@session).to have_field('length', valid: true)
132
+ end
133
+
134
+ it 'should be false if field is invalid' do
135
+ expect(@session).not_to have_field('required', valid: true)
136
+ expect(@session).to have_field('required', valid: false)
137
+
138
+ @session.fill_in 'length', with: 'abc'
139
+ expect(@session).not_to have_field('length', valid: true)
140
+ end
141
+ end
74
142
  end
75
143
 
76
144
  Capybara::SpecHelper.spec '#has_no_field' do
77
145
  before { @session.visit('/form') }
78
146
 
79
- it "should be false if the field is on the page" do
147
+ it 'should be false if the field is on the page' do
80
148
  expect(@session).not_to have_no_field('Dog')
81
149
  expect(@session).not_to have_no_field('form_description')
82
150
  expect(@session).not_to have_no_field('Region')
83
151
  end
84
152
 
85
- it "should be true if the field is not on the page" do
153
+ it 'should be true if the field is not on the page' do
86
154
  expect(@session).to have_no_field('Monkey')
87
155
  end
88
156
 
89
157
  context 'with value' do
90
- it "should be false if a field with the given value is on the page" do
158
+ it 'should be false if a field with the given value is on the page' do
91
159
  expect(@session).not_to have_no_field('First Name', with: 'John')
92
160
  expect(@session).not_to have_no_field('Phone', with: '+1 555 7021')
93
161
  expect(@session).not_to have_no_field('Street', with: 'Sesame street 66')
94
162
  expect(@session).not_to have_no_field('Description', with: 'Descriptive text goes here')
95
163
  end
96
164
 
97
- it "should be true if the given field is not on the page" do
165
+ it 'should be true if the given field is not on the page' do
98
166
  expect(@session).to have_no_field('First Name', with: 'Peter')
99
167
  expect(@session).to have_no_field('Wrong Name', with: 'John')
100
168
  expect(@session).to have_no_field('Description', with: 'Monkey')
101
169
  end
102
170
 
103
- it "should be false after the field has been filled in with the given value" do
171
+ it 'should be false after the field has been filled in with the given value' do
104
172
  @session.fill_in('First Name', with: 'Jonas')
105
173
  expect(@session).not_to have_no_field('First Name', with: 'Jonas')
106
174
  end
107
175
 
108
- it "should be true after the field has been filled in with a different value" do
176
+ it 'should be true after the field has been filled in with a different value' do
109
177
  @session.fill_in('First Name', with: 'Jonas')
110
178
  expect(@session).to have_no_field('First Name', with: 'John')
111
179
  end
112
180
  end
113
181
 
114
182
  context 'with type' do
115
- it "should be false if a field with the given type is on the page" do
183
+ it 'should be false if a field with the given type is on the page' do
116
184
  expect(@session).not_to have_no_field('First Name', type: 'text')
117
185
  expect(@session).not_to have_no_field('Html5 Email', type: 'email')
118
186
  expect(@session).not_to have_no_field('Html5 Tel', type: 'tel')
@@ -120,7 +188,7 @@ Capybara::SpecHelper.spec '#has_no_field' do
120
188
  expect(@session).not_to have_no_field('Languages', type: 'select')
121
189
  end
122
190
 
123
- it "should be true if the given field is not on the page" do
191
+ it 'should be true if the given field is not on the page' do
124
192
  expect(@session).to have_no_field('First Name', type: 'textarea')
125
193
  expect(@session).to have_no_field('Html5 Email', type: 'tel')
126
194
  expect(@session).to have_no_field('Description', type: '')
@@ -128,61 +196,73 @@ Capybara::SpecHelper.spec '#has_no_field' do
128
196
  expect(@session).to have_no_field('Languages', type: 'textarea')
129
197
  end
130
198
  end
199
+
200
+ context 'with focused:', requires: [:active_element] do
201
+ it 'should be true if a field does not have focus when focused: true' do
202
+ expect(@session).to have_no_field('An Input', focused: true)
203
+ end
204
+
205
+ it 'should be false if a field has focus when focused: true' do
206
+ 2.times { @session.send_keys(:tab) }
207
+
208
+ expect(@session).not_to have_no_field('An Input', focused: true)
209
+ end
210
+ end
131
211
  end
132
212
 
133
213
  Capybara::SpecHelper.spec '#has_checked_field?' do
134
214
  before { @session.visit('/form') }
135
215
 
136
- it "should be true if a checked field is on the page" do
216
+ it 'should be true if a checked field is on the page' do
137
217
  expect(@session).to have_checked_field('gender_female')
138
218
  expect(@session).to have_checked_field('Hamster')
139
219
  end
140
220
 
141
- it "should be true for disabled checkboxes if disabled: true" do
221
+ it 'should be true for disabled checkboxes if disabled: true' do
142
222
  expect(@session).to have_checked_field('Disabled Checkbox', disabled: true)
143
223
  end
144
224
 
145
- it "should be false if an unchecked field is on the page" do
225
+ it 'should be false if an unchecked field is on the page' do
146
226
  expect(@session).not_to have_checked_field('form_pets_cat')
147
227
  expect(@session).not_to have_checked_field('Male')
148
228
  end
149
229
 
150
- it "should be false if no field is on the page" do
230
+ it 'should be false if no field is on the page' do
151
231
  expect(@session).not_to have_checked_field('Does Not Exist')
152
232
  end
153
233
 
154
- it "should be false for disabled checkboxes by default" do
234
+ it 'should be false for disabled checkboxes by default' do
155
235
  expect(@session).not_to have_checked_field('Disabled Checkbox')
156
236
  end
157
237
 
158
- it "should be false for disabled checkboxes if disabled: false" do
238
+ it 'should be false for disabled checkboxes if disabled: false' do
159
239
  expect(@session).not_to have_checked_field('Disabled Checkbox', disabled: false)
160
240
  end
161
241
 
162
- it "should be true for disabled checkboxes if disabled: :all" do
242
+ it 'should be true for disabled checkboxes if disabled: :all' do
163
243
  expect(@session).to have_checked_field('Disabled Checkbox', disabled: :all)
164
244
  end
165
245
 
166
- it "should be true for enabled checkboxes if disabled: :all" do
246
+ it 'should be true for enabled checkboxes if disabled: :all' do
167
247
  expect(@session).to have_checked_field('gender_female', disabled: :all)
168
248
  end
169
249
 
170
- it "should be true after an unchecked checkbox is checked" do
250
+ it 'should be true after an unchecked checkbox is checked' do
171
251
  @session.check('form_pets_cat')
172
252
  expect(@session).to have_checked_field('form_pets_cat')
173
253
  end
174
254
 
175
- it "should be false after a checked checkbox is unchecked" do
255
+ it 'should be false after a checked checkbox is unchecked' do
176
256
  @session.uncheck('form_pets_dog')
177
257
  expect(@session).not_to have_checked_field('form_pets_dog')
178
258
  end
179
259
 
180
- it "should be true after an unchecked radio button is chosen" do
260
+ it 'should be true after an unchecked radio button is chosen' do
181
261
  @session.choose('gender_male')
182
262
  expect(@session).to have_checked_field('gender_male')
183
263
  end
184
264
 
185
- it "should be false after another radio button in the group is chosen" do
265
+ it 'should be false after another radio button in the group is chosen' do
186
266
  @session.choose('gender_male')
187
267
  expect(@session).not_to have_checked_field('gender_female')
188
268
  end
@@ -191,29 +271,29 @@ end
191
271
  Capybara::SpecHelper.spec '#has_no_checked_field?' do
192
272
  before { @session.visit('/form') }
193
273
 
194
- it "should be false if a checked field is on the page" do
274
+ it 'should be false if a checked field is on the page' do
195
275
  expect(@session).not_to have_no_checked_field('gender_female')
196
276
  expect(@session).not_to have_no_checked_field('Hamster')
197
277
  end
198
278
 
199
- it "should be false for disabled checkboxes if disabled: true" do
279
+ it 'should be false for disabled checkboxes if disabled: true' do
200
280
  expect(@session).not_to have_no_checked_field('Disabled Checkbox', disabled: true)
201
281
  end
202
282
 
203
- it "should be true if an unchecked field is on the page" do
283
+ it 'should be true if an unchecked field is on the page' do
204
284
  expect(@session).to have_no_checked_field('form_pets_cat')
205
285
  expect(@session).to have_no_checked_field('Male')
206
286
  end
207
287
 
208
- it "should be true if no field is on the page" do
288
+ it 'should be true if no field is on the page' do
209
289
  expect(@session).to have_no_checked_field('Does Not Exist')
210
290
  end
211
291
 
212
- it "should be true for disabled checkboxes by default" do
292
+ it 'should be true for disabled checkboxes by default' do
213
293
  expect(@session).to have_no_checked_field('Disabled Checkbox')
214
294
  end
215
295
 
216
- it "should be true for disabled checkboxes if disabled: false" do
296
+ it 'should be true for disabled checkboxes if disabled: false' do
217
297
  expect(@session).to have_no_checked_field('Disabled Checkbox', disabled: false)
218
298
  end
219
299
  end
@@ -221,89 +301,89 @@ end
221
301
  Capybara::SpecHelper.spec '#has_unchecked_field?' do
222
302
  before { @session.visit('/form') }
223
303
 
224
- it "should be false if a checked field is on the page" do
304
+ it 'should be false if a checked field is on the page' do
225
305
  expect(@session).not_to have_unchecked_field('gender_female')
226
306
  expect(@session).not_to have_unchecked_field('Hamster')
227
307
  end
228
308
 
229
- it "should be true if an unchecked field is on the page" do
309
+ it 'should be true if an unchecked field is on the page' do
230
310
  expect(@session).to have_unchecked_field('form_pets_cat')
231
311
  expect(@session).to have_unchecked_field('Male')
232
312
  end
233
313
 
234
- it "should be true for disabled unchecked fields if disabled: true" do
314
+ it 'should be true for disabled unchecked fields if disabled: true' do
235
315
  expect(@session).to have_unchecked_field('Disabled Unchecked Checkbox', disabled: true)
236
316
  end
237
317
 
238
- it "should be false if no field is on the page" do
318
+ it 'should be false if no field is on the page' do
239
319
  expect(@session).not_to have_unchecked_field('Does Not Exist')
240
320
  end
241
321
 
242
- it "should be false for disabled unchecked fields by default" do
322
+ it 'should be false for disabled unchecked fields by default' do
243
323
  expect(@session).not_to have_unchecked_field('Disabled Unchecked Checkbox')
244
324
  end
245
325
 
246
- it "should be false for disabled unchecked fields if disabled: false" do
326
+ it 'should be false for disabled unchecked fields if disabled: false' do
247
327
  expect(@session).not_to have_unchecked_field('Disabled Unchecked Checkbox', disabled: false)
248
328
  end
249
329
 
250
- it "should be false after an unchecked checkbox is checked" do
330
+ it 'should be false after an unchecked checkbox is checked' do
251
331
  @session.check('form_pets_cat')
252
332
  expect(@session).not_to have_unchecked_field('form_pets_cat')
253
333
  end
254
334
 
255
- it "should be true after a checked checkbox is unchecked" do
335
+ it 'should be true after a checked checkbox is unchecked' do
256
336
  @session.uncheck('form_pets_dog')
257
337
  expect(@session).to have_unchecked_field('form_pets_dog')
258
338
  end
259
339
 
260
- it "should be false after an unchecked radio button is chosen" do
340
+ it 'should be false after an unchecked radio button is chosen' do
261
341
  @session.choose('gender_male')
262
342
  expect(@session).not_to have_unchecked_field('gender_male')
263
343
  end
264
344
 
265
- it "should be true after another radio button in the group is chosen" do
345
+ it 'should be true after another radio button in the group is chosen' do
266
346
  @session.choose('gender_male')
267
347
  expect(@session).to have_unchecked_field('gender_female')
268
348
  end
269
349
 
270
- it "should support locator-less usage" do
271
- expect(@session.has_unchecked_field?(disabled: true, id: "form_disabled_unchecked_checkbox"))
272
- expect(@session).to have_unchecked_field(disabled: true, id: "form_disabled_unchecked_checkbox" )
350
+ it 'should support locator-less usage' do
351
+ expect(@session.has_unchecked_field?(disabled: true, id: 'form_disabled_unchecked_checkbox')).to be true
352
+ expect(@session).to have_unchecked_field(disabled: true, id: 'form_disabled_unchecked_checkbox')
273
353
  end
274
354
  end
275
355
 
276
356
  Capybara::SpecHelper.spec '#has_no_unchecked_field?' do
277
357
  before { @session.visit('/form') }
278
358
 
279
- it "should be true if a checked field is on the page" do
359
+ it 'should be true if a checked field is on the page' do
280
360
  expect(@session).to have_no_unchecked_field('gender_female')
281
361
  expect(@session).to have_no_unchecked_field('Hamster')
282
362
  end
283
363
 
284
- it "should be false if an unchecked field is on the page" do
364
+ it 'should be false if an unchecked field is on the page' do
285
365
  expect(@session).not_to have_no_unchecked_field('form_pets_cat')
286
366
  expect(@session).not_to have_no_unchecked_field('Male')
287
367
  end
288
368
 
289
- it "should be false for disabled unchecked fields if disabled: true" do
369
+ it 'should be false for disabled unchecked fields if disabled: true' do
290
370
  expect(@session).not_to have_no_unchecked_field('Disabled Unchecked Checkbox', disabled: true)
291
371
  end
292
372
 
293
- it "should be true if no field is on the page" do
373
+ it 'should be true if no field is on the page' do
294
374
  expect(@session).to have_no_unchecked_field('Does Not Exist')
295
375
  end
296
376
 
297
- it "should be true for disabled unchecked fields by default" do
377
+ it 'should be true for disabled unchecked fields by default' do
298
378
  expect(@session).to have_no_unchecked_field('Disabled Unchecked Checkbox')
299
379
  end
300
380
 
301
- it "should be true for disabled unchecked fields if disabled: false" do
381
+ it 'should be true for disabled unchecked fields if disabled: false' do
302
382
  expect(@session).to have_no_unchecked_field('Disabled Unchecked Checkbox', disabled: false)
303
383
  end
304
384
 
305
- it "should support locator-less usage" do
306
- expect(@session.has_no_unchecked_field?(disabled: false, id: "form_disabled_unchecked_checkbox")).to eq true
307
- expect(@session).to have_no_unchecked_field(disabled: false, id: "form_disabled_unchecked_checkbox" )
385
+ it 'should support locator-less usage' do
386
+ expect(@session.has_no_unchecked_field?(disabled: false, id: 'form_disabled_unchecked_checkbox')).to be true
387
+ expect(@session).to have_no_unchecked_field(disabled: false, id: 'form_disabled_unchecked_checkbox')
308
388
  end
309
389
  end
@@ -1,21 +1,48 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Capybara::SpecHelper.spec '#has_link?' do
3
4
  before do
4
5
  @session.visit('/with_html')
5
6
  end
6
7
 
7
- it "should be true if the given link is on the page" do
8
+ it 'should be true if the given link is on the page' do
8
9
  expect(@session).to have_link('foo')
9
10
  expect(@session).to have_link('awesome title')
10
11
  expect(@session).to have_link('A link', href: '/with_simple_html')
11
12
  expect(@session).to have_link(:'A link', href: :'/with_simple_html')
12
- expect(@session).to have_link('A link', href: /\/with_simple_html/)
13
+ expect(@session).to have_link('A link', href: %r{/with_simple_html})
14
+ expect(@session).to have_link('labore', target: '_self')
13
15
  end
14
16
 
15
- it "should be false if the given link is not on the page" do
17
+ it 'should be false if the given link is not on the page' do
16
18
  expect(@session).not_to have_link('monkey')
17
19
  expect(@session).not_to have_link('A link', href: '/nonexistent-href')
18
20
  expect(@session).not_to have_link('A link', href: /nonexistent/)
21
+ expect(@session).not_to have_link('labore', target: '_blank')
22
+ end
23
+
24
+ it 'should notify if an invalid locator is specified' do
25
+ allow(Capybara::Helpers).to receive(:warn).and_return(nil)
26
+ @session.has_link?(@session)
27
+ expect(Capybara::Helpers).to have_received(:warn).with(/Called from: .+/)
28
+ end
29
+
30
+ context 'with focused:', requires: [:active_element] do
31
+ it 'should be true if the given link is on the page and has focus' do
32
+ @session.send_keys(:tab)
33
+
34
+ expect(@session).to have_link('labore', focused: true)
35
+ end
36
+
37
+ it 'should be false if the given link is on the page and does not have focus' do
38
+ expect(@session).to have_link('labore', focused: false)
39
+ end
40
+ end
41
+
42
+ it 'should raise an error if an invalid option is passed' do
43
+ expect do
44
+ expect(@session).to have_link('labore', invalid: true)
45
+ end.to raise_error(ArgumentError, 'Invalid option(s) :invalid, should be one of :above, :below, :left_of, :right_of, :near, :count, :minimum, :maximum, :between, :text, :id, :class, :style, :visible, :obscured, :exact, :exact_text, :normalize_ws, :match, :wait, :filter_set, :focused, :href, :alt, :title, :target, :download')
19
46
  end
20
47
  end
21
48
 
@@ -24,15 +51,29 @@ Capybara::SpecHelper.spec '#has_no_link?' do
24
51
  @session.visit('/with_html')
25
52
  end
26
53
 
27
- it "should be false if the given link is on the page" do
54
+ it 'should be false if the given link is on the page' do
28
55
  expect(@session).not_to have_no_link('foo')
29
56
  expect(@session).not_to have_no_link('awesome title')
30
57
  expect(@session).not_to have_no_link('A link', href: '/with_simple_html')
58
+ expect(@session).not_to have_no_link('labore', target: '_self')
31
59
  end
32
60
 
33
- it "should be true if the given link is not on the page" do
61
+ it 'should be true if the given link is not on the page' do
34
62
  expect(@session).to have_no_link('monkey')
35
63
  expect(@session).to have_no_link('A link', href: '/nonexistent-href')
36
- expect(@session).to have_no_link('A link', href: /\/nonexistent-href/)
64
+ expect(@session).to have_no_link('A link', href: %r{/nonexistent-href})
65
+ expect(@session).to have_no_link('labore', target: '_blank')
66
+ end
67
+
68
+ context 'with focused:', requires: [:active_element] do
69
+ it 'should be true if the given link is on the page and has focus' do
70
+ expect(@session).to have_no_link('labore', focused: true)
71
+ end
72
+
73
+ it 'should be false if the given link is on the page and does not have focus' do
74
+ @session.send_keys(:tab)
75
+
76
+ expect(@session).to have_no_link('labore', focused: false)
77
+ end
37
78
  end
38
79
  end
@@ -1,76 +1,78 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Capybara::SpecHelper.spec '#have_none_of_selectors' do
2
4
  before do
3
5
  @session.visit('/with_html')
4
6
  end
5
7
 
6
- it "should be false if any of the given locators are on the page" do
7
- expect {
8
- expect(@session).to have_none_of_selectors(:xpath, "//p", "//a")
9
- }.to raise_error ::RSpec::Expectations::ExpectationNotMetError
10
- expect {
11
- expect(@session).to have_none_of_selectors(:css, "p a#foo")
12
- }.to raise_error ::RSpec::Expectations::ExpectationNotMetError
8
+ it 'should be false if any of the given locators are on the page' do
9
+ expect do
10
+ expect(@session).to have_none_of_selectors(:xpath, '//p', '//a')
11
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
12
+ expect do
13
+ expect(@session).to have_none_of_selectors(:css, 'p a#foo')
14
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
13
15
  end
14
16
 
15
- it "should be true if none of the given locators are on the page" do
16
- expect(@session).to have_none_of_selectors(:xpath, "//abbr", "//td" )
17
- expect(@session).to have_none_of_selectors(:css, "p a#doesnotexist", "abbr")
17
+ it 'should be true if none of the given locators are on the page' do
18
+ expect(@session).to have_none_of_selectors(:xpath, '//abbr', '//td')
19
+ expect(@session).to have_none_of_selectors(:css, 'p a#doesnotexist', 'abbr')
18
20
  end
19
21
 
20
- it "should use default selector" do
22
+ it 'should use default selector' do
21
23
  Capybara.default_selector = :css
22
- expect(@session).to have_none_of_selectors("p a#doesnotexist", "abbr")
23
- expect {
24
- expect(@session).to have_none_of_selectors("abbr", "p a#foo")
25
- }.to raise_error ::RSpec::Expectations::ExpectationNotMetError
24
+ expect(@session).to have_none_of_selectors('p a#doesnotexist', 'abbr')
25
+ expect do
26
+ expect(@session).to have_none_of_selectors('abbr', 'p a#foo')
27
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
26
28
  end
27
29
 
28
- context "should respect scopes" do
29
- it "when used with `within`" do
30
+ context 'should respect scopes' do
31
+ it 'when used with `within`' do
30
32
  @session.within "//p[@id='first']" do
31
- expect {
33
+ expect do
32
34
  expect(@session).to have_none_of_selectors(".//a[@id='foo']")
33
- }.to raise_error ::RSpec::Expectations::ExpectationNotMetError
35
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
34
36
  expect(@session).to have_none_of_selectors(".//a[@id='red']")
35
37
  end
36
38
  end
37
39
 
38
- it "when called on an element" do
40
+ it 'when called on an element' do
39
41
  el = @session.find "//p[@id='first']"
40
- expect {
42
+ expect do
41
43
  expect(el).to have_none_of_selectors(".//a[@id='foo']")
42
- }.to raise_error ::RSpec::Expectations::ExpectationNotMetError
44
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
43
45
  expect(el).to have_none_of_selectors(".//a[@id='red']")
44
46
  end
45
47
  end
46
48
 
47
- context "with options" do
48
- it "should apply the options to all locators" do
49
- expect {
50
- expect(@session).to have_none_of_selectors("//p//a", text: "Redirect")
51
- }.to raise_error ::RSpec::Expectations::ExpectationNotMetError
52
- expect(@session).to have_none_of_selectors("//p", text: "Doesnotexist")
49
+ context 'with options' do
50
+ it 'should apply the options to all locators' do
51
+ expect do
52
+ expect(@session).to have_none_of_selectors('//p//a', text: 'Redirect')
53
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
54
+ expect(@session).to have_none_of_selectors('//p', text: 'Doesnotexist')
53
55
  end
54
56
 
55
- it "should discard all matches where the given regexp is matched" do
56
- expect {
57
- expect(@session).to have_none_of_selectors("//p//a", text: /re[dab]i/i, count: 1)
58
- }.to raise_error ::RSpec::Expectations::ExpectationNotMetError
59
- expect(@session).to have_none_of_selectors("//p//a", text: /Red$/)
57
+ it 'should discard all matches where the given regexp is matched' do
58
+ expect do
59
+ expect(@session).to have_none_of_selectors('//p//a', text: /re[dab]i/i, count: 1)
60
+ end.to raise_error RSpec::Expectations::ExpectationNotMetError
61
+ expect(@session).to have_none_of_selectors('//p//a', text: /Red$/)
60
62
  end
61
63
  end
62
64
 
63
- context "with wait", requires: [:js] do
64
- it "should not find elements if they appear after given wait duration" do
65
+ context 'with wait', requires: [:js] do
66
+ it 'should not find elements if they appear after given wait duration' do
65
67
  @session.visit('/with_js')
66
68
  @session.click_link('Click me')
67
- expect(@session).to have_none_of_selectors(:css, "#new_field", "a#has-been-clicked", wait: 0.1)
69
+ expect(@session).to have_none_of_selectors(:css, '#new_field', 'a#has-been-clicked', wait: 0.1)
68
70
  end
69
71
  end
70
72
 
71
- it "cannot be negated" do
72
- expect {
73
- expect(@session).not_to have_none_of_selectors(:css, "p a#foo", "h2#h2one", "h2#h2two")
74
- }.to raise_error ArgumentError
73
+ it 'cannot be negated' do
74
+ expect do
75
+ expect(@session).not_to have_none_of_selectors(:css, 'p a#foo', 'h2#h2one', 'h2#h2two')
76
+ end.to raise_error ArgumentError
75
77
  end
76
78
  end