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,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
  require 'capybara/minitest'
4
5
  require 'capybara/minitest/spec'
@@ -10,109 +11,135 @@ class MinitestSpecTest < Minitest::Spec
10
11
  before do
11
12
  visit('/form')
12
13
  end
14
+
13
15
  after do
14
16
  Capybara.reset_sessions!
15
17
  end
16
18
 
17
- it "supports text expectations" do
18
- page.must_have_text('Form', minimum: 1)
19
- page.wont_have_text('Not a form')
19
+ def self.test_order
20
+ :sorted
21
+ end
22
+
23
+ it 'supports text expectations' do
24
+ _(page).must_have_text('Form', minimum: 1)
25
+ _(page).wont_have_text('Not a form')
20
26
  form = find(:css, 'form', text: 'Title')
21
- form.must_have_text('Customer Email')
22
- form.wont_have_text('Some other email')
27
+ _(form).must_have_text('Customer Email')
28
+ _(form).wont_have_text('Some other email')
23
29
  end
24
30
 
25
- it "supports current_path expectations" do
26
- page.must_have_current_path('/form')
27
- page.wont_have_current_path('/form2')
31
+ it 'supports current_path expectations' do
32
+ _(page).must_have_current_path('/form')
33
+ _(page).wont_have_current_path('/form2')
28
34
  end
29
35
 
30
- it "supports title expectations" do
36
+ it 'supports title expectations' do
31
37
  visit('/with_title')
32
- page.must_have_title('Test Title')
33
- page.wont_have_title('Not the title')
38
+ _(page).must_have_title('Test Title')
39
+ _(page).wont_have_title('Not the title')
34
40
  end
35
41
 
36
- it "supports xpath expectations" do
37
- page.must_have_xpath('.//input[@id="customer_email"]')
38
- page.wont_have_xpath('.//select[@id="not_form_title"]')
39
- page.wont_have_xpath('.//input[@id="customer_email"]') { |el| el[:id] == "not_customer_email" }
42
+ it 'supports xpath expectations' do
43
+ _(page).must_have_xpath('.//input[@id="customer_email"]')
44
+ _(page).wont_have_xpath('.//select[@id="not_form_title"]')
45
+ _(page).wont_have_xpath('.//input[@id="customer_email"]') { |el| el[:id] == 'not_customer_email' }
40
46
  select = find(:select, 'form_title')
41
- select.must_have_xpath('.//option[@class="title"]')
42
- select.must_have_xpath('.//option', count: 1) { |option| option[:class] != 'title' && !option.disabled?}
43
- select.wont_have_xpath('.//input[@id="customer_email"]')
47
+ _(select).must_have_xpath('.//option[@class="title"]')
48
+ _(select).must_have_xpath('.//option', count: 1) { |option| option[:class] != 'title' && !option.disabled? }
49
+ _(select).wont_have_xpath('.//input[@id="customer_email"]')
44
50
  end
45
51
 
46
- it "support css expectations" do
47
- page.must_have_css('input#customer_email')
48
- page.wont_have_css('select#not_form_title')
52
+ it 'support css expectations' do
53
+ _(page).must_have_css('input#customer_email')
54
+ _(page).wont_have_css('select#not_form_title')
49
55
  el = find(:select, 'form_title')
50
- el.must_have_css('option.title')
51
- el.wont_have_css('input#customer_email')
56
+ _(el).must_have_css('option.title')
57
+ _(el).wont_have_css('input#customer_email')
52
58
  end
53
59
 
54
- it "supports link expectations" do
60
+ it 'supports link expectations' do
55
61
  visit('/with_html')
56
- page.must_have_link('A link')
57
- page.wont_have_link('Not on page')
62
+ _(page).must_have_link('A link')
63
+ _(page).wont_have_link('Not on page')
58
64
  end
59
65
 
60
- it "supports button expectations" do
61
- page.must_have_button('fresh_btn')
62
- page.wont_have_button('not_btn')
66
+ it 'supports button expectations' do
67
+ _(page).must_have_button('fresh_btn')
68
+ _(page).wont_have_button('not_btn')
63
69
  end
64
70
 
65
- it "supports field expectations" do
66
- page.must_have_field('customer_email')
67
- page.wont_have_field('not_on_the_form')
71
+ it 'supports field expectations' do
72
+ _(page).must_have_field('customer_email')
73
+ _(page).wont_have_field('not_on_the_form')
68
74
  end
69
75
 
70
- it "supports select expectations" do
71
- page.must_have_select('form_title')
72
- page.wont_have_select('not_form_title')
76
+ it 'supports select expectations' do
77
+ _(page).must_have_select('form_title')
78
+ _(page).wont_have_select('not_form_title')
73
79
  end
74
80
 
75
- it "supports checked_field expectations" do
76
- page.must_have_checked_field('form_pets_dog')
77
- page.wont_have_checked_field('form_pets_cat')
81
+ it 'supports checked_field expectations' do
82
+ _(page).must_have_checked_field('form_pets_dog')
83
+ _(page).wont_have_checked_field('form_pets_cat')
78
84
  end
79
85
 
80
- it "supports unchecked_field expectations" do
81
- page.must_have_unchecked_field('form_pets_cat')
82
- page.wont_have_unchecked_field('form_pets_dog')
86
+ it 'supports unchecked_field expectations' do
87
+ _(page).must_have_unchecked_field('form_pets_cat')
88
+ _(page).wont_have_unchecked_field('form_pets_dog')
83
89
  end
84
90
 
85
- it "supports table expectations" do
91
+ it 'supports table expectations' do
86
92
  visit('/tables')
87
- page.must_have_table('agent_table')
88
- page.wont_have_table('not_on_form')
93
+ _(page).must_have_table('agent_table')
94
+ _(page).wont_have_table('not_on_form')
95
+ end
96
+
97
+ it 'supports all_of_selectors expectations' do
98
+ _(page).must_have_all_of_selectors(:css, 'select#form_other_title', 'input#form_last_name')
99
+ end
100
+
101
+ it 'supports none_of_selectors expectations' do
102
+ _(page).must_have_none_of_selectors(:css, 'input#not_on_page', 'input#also_not_on_page')
89
103
  end
90
104
 
91
- it "supports all_of_selectors expectations" do
92
- page.must_have_all_of_selectors(:css, 'select#form_other_title', 'input#form_last_name')
105
+ it 'supports any_of_selectors expectations' do
106
+ _(page).must_have_any_of_selectors(:css, 'select#form_other_title', 'input#not_on_page')
93
107
  end
94
108
 
95
- it "supports none_of_selectors expectations" do
96
- page.must_have_none_of_selectors(:css, 'input#not_on_page', 'input#also_not_on_page')
109
+ it 'supports match_selector expectations' do
110
+ _(find(:field, 'customer_email')).must_match_selector(:field, 'customer_email')
111
+ _(find(:select, 'form_title')).wont_match_selector(:field, 'customer_email')
97
112
  end
98
113
 
99
- it "supports match_selector expectations" do
100
- find(:field, 'customer_email').must_match_selector(:field, 'customer_email')
101
- find(:select, 'form_title').wont_match_selector(:field, 'customer_email')
114
+ it 'supports match_css expectations' do
115
+ _(find(:select, 'form_title')).must_match_css('select#form_title')
116
+ _(find(:select, 'form_title')).wont_match_css('select#form_other_title')
102
117
  end
103
118
 
104
- it "supports match_css expectations" do
105
- find(:select, 'form_title').must_match_css('select#form_title')
106
- find(:select, 'form_title').wont_match_css('select#form_other_title')
119
+ it 'supports match_xpath expectations' do
120
+ _(find(:select, 'form_title')).must_match_xpath('.//select[@id="form_title"]')
121
+ _(find(:select, 'form_title')).wont_match_xpath('.//select[@id="not_on_page"]')
107
122
  end
108
123
 
109
- it "supports match_xpath expectations" do
110
- find(:select, 'form_title').must_match_xpath('.//select[@id="form_title"]')
111
- find(:select, 'form_title').wont_match_xpath('.//select[@id="not_on_page"]')
124
+ it 'handles failures' do
125
+ _(page).must_have_select('non_existing_form_title')
112
126
  end
113
127
 
114
- it "handles failures" do
115
- page.must_have_select('non_existing_form_title')
128
+ it 'supports style expectations' do
129
+ skip "Rack test doesn't support style" if Capybara.current_driver == :rack_test
130
+ visit('/with_html')
131
+ _(find(:css, '#second')).must_have_style('display' => 'inline') # deprecated
132
+ _(find(:css, '#second')).must_match_style('display' => 'inline')
133
+ end
134
+
135
+ it 'supports ancestor expectations' do
136
+ option = find(:option, 'Finnish')
137
+ _(option).must_have_ancestor(:css, '#form_locale')
138
+ end
139
+
140
+ it 'supports sibling expectations' do
141
+ option = find(:css, '#form_title').find(:option, 'Mrs')
142
+ _(option).must_have_sibling(:option, 'Mr')
116
143
  end
117
144
  end
118
145
 
@@ -122,14 +149,18 @@ RSpec.describe 'capybara/minitest/spec' do
122
149
  Capybara.app = TestApp
123
150
  end
124
151
 
125
- it "should support minitest spec" do
152
+ after do
153
+ Capybara.use_default_driver
154
+ end
155
+
156
+ it 'should support minitest spec' do
126
157
  output = StringIO.new
127
158
  reporter = Minitest::SummaryReporter.new(output)
128
159
  reporter.start
129
160
  MinitestSpecTest.run reporter, {}
130
161
  reporter.report
131
- expect(output.string).to include("18 runs, 41 assertions, 1 failures, 0 errors, 0 skips")
132
- #Make sure error messages are displayed
133
- expect(output.string).to include('expected to find visible select box "non_existing_form_title" that is not disabled but there were no matches')
162
+ expect(output.string).to include('22 runs, 44 assertions, 1 failures, 0 errors, 1 skips')
163
+ # Make sure error messages are displayed
164
+ expect(output.string).to match(/expected to find select box "non_existing_form_title" .*but there were no matches/)
134
165
  end
135
166
  end
@@ -1,24 +1,25 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
  require 'capybara/dsl'
4
5
 
5
6
  RSpec.describe Capybara::SessionConfig do
6
- describe "threadsafe" do
7
- it "defaults to global session options" do
7
+ describe 'threadsafe' do
8
+ it 'defaults to global session options' do
8
9
  Capybara.threadsafe = true
9
10
  session = Capybara::Session.new(:rack_test, TestApp)
10
- [:default_host, :app_host, :save_and_open_page_path,
11
- :always_include_port, :run_server, :default_selector, :default_max_wait_time, :ignore_hidden_elements,
12
- :automatic_reload, :match, :exact, :raise_server_errors, :visible_text_only, :wait_on_first_by_default,
13
- :automatic_label_click, :enable_aria_label,
14
- :save_path, :exact_options, :asset_host].each do |m|
15
- expect(session.config.public_send(m)).to eq Capybara.public_send(m)
16
- end
11
+ %i[default_host app_host always_include_port run_server
12
+ default_selector default_max_wait_time ignore_hidden_elements
13
+ automatic_reload match exact raise_server_errors visible_text_only
14
+ automatic_label_click enable_aria_label save_path
15
+ asset_host default_retry_interval].each do |m|
16
+ expect(session.config.public_send(m)).to eq Capybara.public_send(m)
17
+ end
17
18
  end
18
19
 
19
20
  it "doesn't change global session when changed" do
20
21
  Capybara.threadsafe = true
21
- host = "http://my.example.com"
22
+ host = 'http://my.example.com'
22
23
  session = Capybara::Session.new(:rack_test, TestApp) do |config|
23
24
  config.default_host = host
24
25
  config.automatic_label_click = !config.automatic_label_click
@@ -34,7 +35,7 @@ RSpec.describe Capybara::SessionConfig do
34
35
  Capybara.threadsafe = false
35
36
  expect do
36
37
  Capybara::Session.new(:rack_test, TestApp) { |config| }
37
- end.to raise_error "A configuration block is only accepted when Capybara.threadsafe == true"
38
+ end.to raise_error 'A configuration block is only accepted when Capybara.threadsafe == true'
38
39
  end
39
40
 
40
41
  it "doesn't allow session config when false" do
@@ -48,7 +49,7 @@ RSpec.describe Capybara::SessionConfig do
48
49
  end.to raise_error(/Session configuration is only supported when Capybara.threadsafe == true/)
49
50
  end
50
51
 
51
- it "uses the config from the session" do
52
+ it 'uses the config from the session' do
52
53
  Capybara.threadsafe = true
53
54
  session = Capybara::Session.new(:rack_test, TestApp) do |config|
54
55
  config.default_selector = :link
@@ -64,4 +65,4 @@ RSpec.describe Capybara::SessionConfig do
64
65
  expect { Capybara.threadsafe = true }.to raise_error(/Threadsafe setting cannot be changed once a session is created/)
65
66
  end
66
67
  end
67
- end
68
+ end