capybara 3.0.0 → 3.40.0

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