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
@@ -1,72 +1,74 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Capybara::SpecHelper.spec '#text' do
4
- it "should print the text of the page" do
4
+ it 'should print the text of the page' do
5
5
  @session.visit('/with_simple_html')
6
6
  expect(@session.text).to eq('Bar')
7
7
  end
8
8
 
9
- it "ignores invisible text by default" do
9
+ it 'ignores invisible text by default' do
10
10
  @session.visit('/with_html')
11
- expect(@session.find(:id, "hidden-text").text).to eq('Some of this text is')
11
+ expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
12
12
  end
13
13
 
14
- it "shows invisible text if `:all` given" do
14
+ it 'shows invisible text if `:all` given' do
15
15
  @session.visit('/with_html')
16
- expect(@session.find(:id, "hidden-text").text(:all)).to eq('Some of this text is hidden!')
16
+ expect(@session.find(:id, 'hidden-text').text(:all)).to eq('Some of this text is hidden!')
17
17
  end
18
18
 
19
- it "ignores invisible text if `:visible` given" do
19
+ it 'ignores invisible text if `:visible` given' do
20
20
  Capybara.ignore_hidden_elements = false
21
21
  @session.visit('/with_html')
22
- expect(@session.find(:id, "hidden-text").text(:visible)).to eq('Some of this text is')
22
+ expect(@session.find(:id, 'hidden-text').text(:visible)).to eq('Some of this text is')
23
23
  end
24
24
 
25
- it "ignores invisible text if `Capybara.ignore_hidden_elements = true`" do
25
+ it 'ignores invisible text if `Capybara.ignore_hidden_elements = true`' do
26
26
  @session.visit('/with_html')
27
- expect(@session.find(:id, "hidden-text").text).to eq('Some of this text is')
27
+ expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
28
28
  Capybara.ignore_hidden_elements = false
29
- expect(@session.find(:id, "hidden-text").text).to eq('Some of this text is hidden!')
29
+ expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is hidden!')
30
30
  end
31
31
 
32
- it "ignores invisible text if `Capybara.visible_text_only = true`" do
32
+ it 'ignores invisible text if `Capybara.visible_text_only = true`' do
33
33
  @session.visit('/with_html')
34
34
  Capybara.visible_text_only = true
35
- expect(@session.find(:id, "hidden-text").text).to eq('Some of this text is')
35
+ expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
36
36
  Capybara.ignore_hidden_elements = false
37
- expect(@session.find(:id, "hidden-text").text).to eq('Some of this text is')
37
+ expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
38
38
  end
39
39
 
40
- it "ignores invisible text if ancestor is invisible" do
40
+ it 'ignores invisible text if ancestor is invisible' do
41
41
  @session.visit('/with_html')
42
- expect(@session.find(:id, "hidden_via_ancestor", visible: false).text).to eq('')
42
+ expect(@session.find(:id, 'hidden_via_ancestor', visible: false).text).to eq('')
43
43
  end
44
44
 
45
- context "with css as default selector" do
45
+ context 'with css as default selector' do
46
46
  before { Capybara.default_selector = :css }
47
- it "should print the text of the page" do
47
+
48
+ after { Capybara.default_selector = :xpath }
49
+
50
+ it 'should print the text of the page' do
48
51
  @session.visit('/with_simple_html')
49
52
  expect(@session.text).to eq('Bar')
50
53
  end
51
- after { Capybara.default_selector = :xpath }
52
54
  end
53
55
 
54
- it "should be correctly normalized when visible" do
56
+ it 'should be correctly normalized when visible' do
55
57
  @session.visit('/with_html')
56
58
  el = @session.find(:css, '#normalized')
57
59
  expect(el.text).to eq "Some text\nMore text\nAnd more text\nEven more text on multiple lines"
58
60
  end
59
61
 
60
- it "should be a textContent with irrelevant whitespace collapsed when non-visible" do
62
+ it 'should be a textContent with irrelevant whitespace collapsed when non-visible' do
61
63
  @session.visit('/with_html')
62
64
  el = @session.find(:css, '#non_visible_normalized', visible: false)
63
- expect(el.text(:all)).to eq "Some textMore text And more text Even more text on multiple lines"
65
+ expect(el.text(:all)).to eq 'Some textMore text And more text Even more text on multiple lines'
64
66
  end
65
67
 
66
- it "should strip correctly" do
68
+ it 'should strip correctly' do
67
69
  @session.visit('/with_html')
68
70
  el = @session.find(:css, '#ws')
69
- expect(el.text).to eq " "
70
- expect(el.text(:all)).to eq " "
71
+ expect(el.text).to eq ' '
72
+ expect(el.text(:all)).to eq ' '
71
73
  end
72
74
  end
@@ -1,22 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Capybara::SpecHelper.spec '#title' do
4
- it "should get the title of the page" do
4
+ it 'should get the title of the page' do
5
5
  @session.visit('/with_title')
6
6
  expect(@session.title).to eq('Test Title')
7
7
  end
8
8
 
9
- context "with css as default selector" do
9
+ context 'with css as default selector' do
10
10
  before { Capybara.default_selector = :css }
11
- it "should get the title of the page" do
11
+
12
+ after { Capybara.default_selector = :xpath }
13
+
14
+ it 'should get the title of the page' do
12
15
  @session.visit('/with_title')
13
16
  expect(@session.title).to eq('Test Title')
14
17
  end
15
- after { Capybara.default_selector = :xpath }
16
18
  end
17
19
 
18
- context "within iframe", requires: [:frames] do
19
- it "should get the title of the top level browsing context" do
20
+ context 'within iframe', requires: [:frames] do
21
+ it 'should get the title of the top level browsing context' do
20
22
  @session.visit('/within_frames')
21
23
  expect(@session.title).to eq('With Frames')
22
24
  @session.within_frame('frameOne') do
@@ -1,80 +1,99 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Capybara::SpecHelper.spec "#uncheck" do
3
+ Capybara::SpecHelper.spec '#uncheck' do
4
4
  before do
5
5
  @session.visit('/form')
6
6
  end
7
7
 
8
- it "should uncheck a checkbox by id" do
9
- @session.uncheck("form_pets_hamster")
8
+ it 'should uncheck a checkbox by id' do
9
+ @session.uncheck('form_pets_hamster')
10
10
  @session.click_button('awesome')
11
11
  expect(extract_results(@session)['pets']).to include('dog')
12
12
  expect(extract_results(@session)['pets']).not_to include('hamster')
13
13
  end
14
14
 
15
- it "should uncheck a checkbox by label" do
16
- @session.uncheck("Hamster")
15
+ it 'should uncheck a checkbox by label' do
16
+ @session.uncheck('Hamster')
17
17
  @session.click_button('awesome')
18
18
  expect(extract_results(@session)['pets']).to include('dog')
19
19
  expect(extract_results(@session)['pets']).not_to include('hamster')
20
20
  end
21
21
 
22
- it "casts to string" do
22
+ it 'should work without a locator string' do
23
+ @session.uncheck(id: 'form_pets_hamster')
24
+ @session.click_button('awesome')
25
+ expect(extract_results(@session)['pets']).to include('dog')
26
+ expect(extract_results(@session)['pets']).not_to include('hamster')
27
+ end
28
+
29
+ it 'should be able to uncheck itself if no locator specified' do
30
+ cb = @session.find(:id, 'form_pets_hamster')
31
+ cb.uncheck
32
+ @session.click_button('awesome')
33
+ expect(extract_results(@session)['pets']).to include('dog')
34
+ expect(extract_results(@session)['pets']).not_to include('hamster')
35
+ end
36
+
37
+ it 'casts to string' do
23
38
  @session.uncheck(:form_pets_hamster)
24
39
  @session.click_button('awesome')
25
40
  expect(extract_results(@session)['pets']).to include('dog')
26
41
  expect(extract_results(@session)['pets']).not_to include('hamster')
27
42
  end
28
43
 
29
- context "with :exact option" do
30
- it "should accept partial matches when false" do
44
+ context 'with :exact option' do
45
+ it 'should accept partial matches when false' do
31
46
  @session.uncheck('Ham', exact: false)
32
47
  @session.click_button('awesome')
33
48
  expect(extract_results(@session)['pets']).not_to include('hamster')
34
49
  end
35
50
 
36
- it "should not accept partial matches when true" do
51
+ it 'should not accept partial matches when true' do
37
52
  expect do
38
- @session.uncheck('Ham', exact: true)
53
+ @session.uncheck('Ham', exact: true)
39
54
  end.to raise_error(Capybara::ElementNotFound)
40
55
  end
41
56
  end
42
57
 
43
- context "when checkbox hidden" do
44
- context "with Capybara.automatic_label_click == true" do
58
+ context 'when checkbox hidden' do
59
+ context 'with Capybara.automatic_label_click == true' do
45
60
  around do |spec|
46
61
  old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
47
62
  spec.run
48
63
  Capybara.automatic_label_click = old_click_label
49
64
  end
50
65
 
51
- it "should uncheck via clicking the label with :for attribute if possible" do
52
- expect(@session.find(:checkbox, 'form_cars_jaguar', checked: true, visible: :hidden)).to be
66
+ it 'should uncheck via clicking the label with :for attribute if possible' do
67
+ expect(@session.find(:checkbox, 'form_cars_jaguar', checked: true, visible: :hidden)).to be_truthy
53
68
  @session.uncheck('form_cars_jaguar')
54
69
  @session.click_button('awesome')
55
70
  expect(extract_results(@session)['cars']).not_to include('jaguar')
56
71
  end
57
72
 
58
- it "should uncheck via clicking the wrapping label if possible" do
59
- expect(@session.find(:checkbox, 'form_cars_koenigsegg', checked: true, visible: :hidden)).to be
73
+ it 'should uncheck via clicking the wrapping label if possible' do
74
+ expect(@session.find(:checkbox, 'form_cars_koenigsegg', checked: true, visible: :hidden)).to be_truthy
60
75
  @session.uncheck('form_cars_koenigsegg')
61
76
  @session.click_button('awesome')
62
77
  expect(extract_results(@session)['cars']).not_to include('koenigsegg')
63
78
  end
64
79
 
65
- it "should not click the label if unneeded" do
66
- expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
80
+ it 'should not click the label if unneeded' do
81
+ expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be_truthy
67
82
  @session.uncheck('form_cars_tesla')
68
83
  @session.click_button('awesome')
69
84
  expect(extract_results(@session)['cars']).not_to include('tesla')
70
85
  end
71
86
 
72
- it "should raise original error when no label available" do
73
- expect { @session.uncheck('form_cars_porsche') }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_porsche" that is not disabled')
87
+ it 'should raise original error when no label available' do
88
+ expect { @session.uncheck('form_cars_porsche') }.to raise_error(Capybara::ElementNotFound, /Unable to find visible checkbox "form_cars_porsche"/)
89
+ end
90
+
91
+ it 'should raise error if not allowed to click label' do
92
+ expect { @session.uncheck('form_cars_jaguar', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, /Unable to find visible checkbox "form_cars_jaguar"/)
74
93
  end
75
94
 
76
- it "should raise error if not allowed to click label" do
77
- expect { @session.uncheck('form_cars_jaguar', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_jaguar" that is not disabled')
95
+ it 'should include node filter description in error if necessary' do
96
+ expect { @session.uncheck('form_cars_maserati', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_maserati" that is not disabled')
78
97
  end
79
98
  end
80
99
  end
@@ -1,46 +1,46 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Capybara::SpecHelper.spec "#unselect" do
3
+ Capybara::SpecHelper.spec '#unselect' do
4
4
  before do
5
5
  @session.visit('/form')
6
6
  end
7
7
 
8
- context "with multiple select" do
9
- it "should unselect an option from a select box by id" do
8
+ context 'with multiple select' do
9
+ it 'should unselect an option from a select box by id' do
10
10
  @session.unselect('Commando', from: 'form_underwear')
11
11
  @session.click_button('awesome')
12
12
  expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
13
13
  expect(extract_results(@session)['underwear']).not_to include('Commando')
14
14
  end
15
15
 
16
- it "should unselect an option without a select box" do
16
+ it 'should unselect an option without a select box' do
17
17
  @session.unselect('Commando')
18
18
  @session.click_button('awesome')
19
19
  expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
20
20
  expect(extract_results(@session)['underwear']).not_to include('Commando')
21
21
  end
22
22
 
23
- it "should unselect an option from a select box by label" do
23
+ it 'should unselect an option from a select box by label' do
24
24
  @session.unselect('Commando', from: 'Underwear')
25
25
  @session.click_button('awesome')
26
26
  expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
27
27
  expect(extract_results(@session)['underwear']).not_to include('Commando')
28
28
  end
29
29
 
30
- it "should favour exact matches to option labels" do
31
- @session.unselect("Briefs", from: 'Underwear')
30
+ it 'should favour exact matches to option labels' do
31
+ @session.unselect('Briefs', from: 'Underwear')
32
32
  @session.click_button('awesome')
33
33
  expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
34
34
  expect(extract_results(@session)['underwear']).not_to include('Briefs')
35
35
  end
36
36
 
37
- it "should escape quotes" do
37
+ it 'should escape quotes' do
38
38
  @session.unselect("Frenchman's Pantalons", from: 'Underwear')
39
39
  @session.click_button('awesome')
40
40
  expect(extract_results(@session)['underwear']).not_to include("Frenchman's Pantalons")
41
41
  end
42
42
 
43
- it "casts to string" do
43
+ it 'casts to string' do
44
44
  @session.unselect(:Briefs, from: :Underwear)
45
45
  @session.click_button('awesome')
46
46
  expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
@@ -48,15 +48,15 @@ Capybara::SpecHelper.spec "#unselect" do
48
48
  end
49
49
  end
50
50
 
51
- context "with single select" do
52
- it "should raise an error" do
53
- expect { @session.unselect("English", from: 'form_locale') }.to raise_error(Capybara::UnselectNotAllowed)
51
+ context 'with single select' do
52
+ it 'should raise an error' do
53
+ expect { @session.unselect('English', from: 'form_locale') }.to raise_error(Capybara::UnselectNotAllowed)
54
54
  end
55
55
  end
56
56
 
57
57
  context "with a locator that doesn't exist" do
58
- it "should raise an error" do
59
- msg = "Unable to find visible select box \"does not exist\" that is not disabled"
58
+ it 'should raise an error' do
59
+ msg = /Unable to find select box "does not exist"/
60
60
  expect do
61
61
  @session.unselect('foo', from: 'does not exist')
62
62
  end.to raise_error(Capybara::ElementNotFound, msg)
@@ -64,51 +64,51 @@ Capybara::SpecHelper.spec "#unselect" do
64
64
  end
65
65
 
66
66
  context "with an option that doesn't exist" do
67
- it "should raise an error" do
68
- msg = /^Unable to find visible option "Does not Exist" within/
67
+ it 'should raise an error' do
68
+ msg = /^Unable to find option "Does not Exist" within/
69
69
  expect do
70
70
  @session.unselect('Does not Exist', from: 'form_underwear')
71
71
  end.to raise_error(Capybara::ElementNotFound, msg)
72
72
  end
73
73
  end
74
74
 
75
- context "with :exact option" do
76
- context "when `false`" do
77
- it "can match select box approximately" do
78
- @session.unselect("Boxerbriefs", from: "Under", exact: false)
79
- @session.click_button("awesome")
80
- expect(extract_results(@session)["underwear"]).not_to include("Boxerbriefs")
75
+ context 'with :exact option' do
76
+ context 'when `false`' do
77
+ it 'can match select box approximately' do
78
+ @session.unselect('Boxerbriefs', from: 'Under', exact: false)
79
+ @session.click_button('awesome')
80
+ expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
81
81
  end
82
82
 
83
- it "can match option approximately" do
84
- @session.unselect("Boxerbr", from: "Underwear", exact: false)
85
- @session.click_button("awesome")
86
- expect(extract_results(@session)["underwear"]).not_to include("Boxerbriefs")
83
+ it 'can match option approximately' do
84
+ @session.unselect('Boxerbr', from: 'Underwear', exact: false)
85
+ @session.click_button('awesome')
86
+ expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
87
87
  end
88
88
 
89
- it "can match option approximately when :from not given" do
90
- @session.unselect("Boxerbr", exact: false)
91
- @session.click_button("awesome")
92
- expect(extract_results(@session)["underwear"]).not_to include("Boxerbriefs")
89
+ it 'can match option approximately when :from not given' do
90
+ @session.unselect('Boxerbr', exact: false)
91
+ @session.click_button('awesome')
92
+ expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
93
93
  end
94
94
  end
95
95
 
96
- context "when `true`" do
97
- it "can match select box approximately" do
96
+ context 'when `true`' do
97
+ it 'can match select box approximately' do
98
98
  expect do
99
- @session.unselect("Boxerbriefs", from: "Under", exact: true)
99
+ @session.unselect('Boxerbriefs', from: 'Under', exact: true)
100
100
  end.to raise_error(Capybara::ElementNotFound)
101
101
  end
102
102
 
103
- it "can match option approximately" do
103
+ it 'can match option approximately' do
104
104
  expect do
105
- @session.unselect("Boxerbr", from: "Underwear", exact: true)
105
+ @session.unselect('Boxerbr', from: 'Underwear', exact: true)
106
106
  end.to raise_error(Capybara::ElementNotFound)
107
107
  end
108
108
 
109
- it "can match option approximately when :from not given" do
109
+ it 'can match option approximately when :from not given' do
110
110
  expect do
111
- @session.unselect("Boxerbr", exact: true)
111
+ @session.unselect('Boxerbr', exact: true)
112
112
  end.to raise_error(Capybara::ElementNotFound)
113
113
  end
114
114
  end