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