capybara 2.7.0 → 3.35.3

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 (318) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +1 -0
  3. data/History.md +1147 -11
  4. data/License.txt +1 -1
  5. data/README.md +252 -131
  6. data/lib/capybara/config.rb +92 -0
  7. data/lib/capybara/cucumber.rb +3 -3
  8. data/lib/capybara/driver/base.rb +52 -21
  9. data/lib/capybara/driver/node.rb +48 -14
  10. data/lib/capybara/dsl.rb +16 -9
  11. data/lib/capybara/helpers.rb +72 -81
  12. data/lib/capybara/minitest/spec.rb +267 -0
  13. data/lib/capybara/minitest.rb +385 -0
  14. data/lib/capybara/node/actions.rb +337 -89
  15. data/lib/capybara/node/base.rb +50 -32
  16. data/lib/capybara/node/document.rb +19 -3
  17. data/lib/capybara/node/document_matchers.rb +22 -24
  18. data/lib/capybara/node/element.rb +388 -125
  19. data/lib/capybara/node/finders.rb +231 -121
  20. data/lib/capybara/node/matchers.rb +503 -217
  21. data/lib/capybara/node/simple.rb +64 -27
  22. data/lib/capybara/queries/ancestor_query.rb +27 -0
  23. data/lib/capybara/queries/base_query.rb +87 -11
  24. data/lib/capybara/queries/current_path_query.rb +24 -24
  25. data/lib/capybara/queries/match_query.rb +15 -10
  26. data/lib/capybara/queries/selector_query.rb +675 -81
  27. data/lib/capybara/queries/sibling_query.rb +26 -0
  28. data/lib/capybara/queries/style_query.rb +45 -0
  29. data/lib/capybara/queries/text_query.rb +88 -20
  30. data/lib/capybara/queries/title_query.rb +9 -11
  31. data/lib/capybara/rack_test/browser.rb +63 -39
  32. data/lib/capybara/rack_test/css_handlers.rb +6 -4
  33. data/lib/capybara/rack_test/driver.rb +26 -16
  34. data/lib/capybara/rack_test/errors.rb +6 -0
  35. data/lib/capybara/rack_test/form.rb +73 -58
  36. data/lib/capybara/rack_test/node.rb +187 -67
  37. data/lib/capybara/rails.rb +4 -8
  38. data/lib/capybara/registration_container.rb +44 -0
  39. data/lib/capybara/registrations/drivers.rb +42 -0
  40. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  41. data/lib/capybara/registrations/servers.rb +45 -0
  42. data/lib/capybara/result.rb +142 -14
  43. data/lib/capybara/rspec/features.rb +17 -42
  44. data/lib/capybara/rspec/matcher_proxies.rb +82 -0
  45. data/lib/capybara/rspec/matchers/base.rb +111 -0
  46. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  47. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  48. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  49. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  50. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  51. data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
  52. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  53. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  54. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  55. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  56. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  57. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  58. data/lib/capybara/rspec/matchers.rb +143 -244
  59. data/lib/capybara/rspec.rb +10 -12
  60. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  61. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  62. data/lib/capybara/selector/css.rb +102 -0
  63. data/lib/capybara/selector/definition/button.rb +63 -0
  64. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  65. data/lib/capybara/selector/definition/css.rb +10 -0
  66. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  67. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  68. data/lib/capybara/selector/definition/element.rb +28 -0
  69. data/lib/capybara/selector/definition/field.rb +40 -0
  70. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  71. data/lib/capybara/selector/definition/file_field.rb +13 -0
  72. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  73. data/lib/capybara/selector/definition/frame.rb +17 -0
  74. data/lib/capybara/selector/definition/id.rb +6 -0
  75. data/lib/capybara/selector/definition/label.rb +62 -0
  76. data/lib/capybara/selector/definition/link.rb +54 -0
  77. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  78. data/lib/capybara/selector/definition/option.rb +27 -0
  79. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  80. data/lib/capybara/selector/definition/select.rb +81 -0
  81. data/lib/capybara/selector/definition/table.rb +109 -0
  82. data/lib/capybara/selector/definition/table_row.rb +21 -0
  83. data/lib/capybara/selector/definition/xpath.rb +5 -0
  84. data/lib/capybara/selector/definition.rb +278 -0
  85. data/lib/capybara/selector/filter.rb +3 -46
  86. data/lib/capybara/selector/filter_set.rb +124 -0
  87. data/lib/capybara/selector/filters/base.rb +77 -0
  88. data/lib/capybara/selector/filters/expression_filter.rb +22 -0
  89. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  90. data/lib/capybara/selector/filters/node_filter.rb +31 -0
  91. data/lib/capybara/selector/regexp_disassembler.rb +214 -0
  92. data/lib/capybara/selector/selector.rb +155 -0
  93. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  94. data/lib/capybara/selector.rb +232 -369
  95. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  96. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  97. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  98. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  99. data/lib/capybara/selenium/driver.rb +380 -142
  100. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  101. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
  102. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
  103. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  104. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  105. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  106. data/lib/capybara/selenium/extensions/find.rb +110 -0
  107. data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
  108. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  109. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  110. data/lib/capybara/selenium/logger_suppressor.rb +40 -0
  111. data/lib/capybara/selenium/node.rb +528 -97
  112. data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
  113. data/lib/capybara/selenium/nodes/edge_node.rb +104 -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/action_pauser.rb +26 -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 +63 -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 +74 -71
  127. data/lib/capybara/session/config.rb +126 -0
  128. data/lib/capybara/session/matchers.rb +44 -27
  129. data/lib/capybara/session.rb +500 -297
  130. data/lib/capybara/spec/fixtures/no_extension +1 -0
  131. data/lib/capybara/spec/public/jquery.js +5 -5
  132. data/lib/capybara/spec/public/offset.js +6 -0
  133. data/lib/capybara/spec/public/test.js +168 -14
  134. data/lib/capybara/spec/session/accept_alert_spec.rb +37 -14
  135. data/lib/capybara/spec/session/accept_confirm_spec.rb +7 -6
  136. data/lib/capybara/spec/session/accept_prompt_spec.rb +38 -10
  137. data/lib/capybara/spec/session/all_spec.rb +179 -59
  138. data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
  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_spec.rb +93 -0
  145. data/lib/capybara/spec/session/attach_file_spec.rb +154 -48
  146. data/lib/capybara/spec/session/body_spec.rb +12 -13
  147. data/lib/capybara/spec/session/check_spec.rb +168 -41
  148. data/lib/capybara/spec/session/choose_spec.rb +75 -23
  149. data/lib/capybara/spec/session/click_button_spec.rb +243 -175
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +57 -32
  151. data/lib/capybara/spec/session/click_link_spec.rb +100 -53
  152. data/lib/capybara/spec/session/current_scope_spec.rb +11 -10
  153. data/lib/capybara/spec/session/current_url_spec.rb +61 -35
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +7 -7
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +5 -4
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +13 -6
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +21 -7
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +91 -34
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +45 -3
  162. data/lib/capybara/spec/session/execute_script_spec.rb +24 -4
  163. data/lib/capybara/spec/session/fill_in_spec.rb +166 -64
  164. data/lib/capybara/spec/session/find_button_spec.rb +37 -18
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
  166. data/lib/capybara/spec/session/find_field_spec.rb +57 -34
  167. data/lib/capybara/spec/session/find_link_spec.rb +47 -10
  168. data/lib/capybara/spec/session/find_spec.rb +290 -144
  169. data/lib/capybara/spec/session/first_spec.rb +91 -48
  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 +116 -0
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
  174. data/lib/capybara/spec/session/go_back_spec.rb +3 -2
  175. data/lib/capybara/spec/session/go_forward_spec.rb +3 -2
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +76 -19
  180. data/lib/capybara/spec/session/has_css_spec.rb +277 -131
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +98 -26
  182. data/lib/capybara/spec/session/has_field_spec.rb +177 -107
  183. data/lib/capybara/spec/session/has_link_spec.rb +13 -12
  184. data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
  185. data/lib/capybara/spec/session/has_select_spec.rb +191 -95
  186. data/lib/capybara/spec/session/has_selector_spec.rb +128 -64
  187. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  188. data/lib/capybara/spec/session/has_table_spec.rb +172 -5
  189. data/lib/capybara/spec/session/has_text_spec.rb +126 -60
  190. data/lib/capybara/spec/session/has_title_spec.rb +35 -12
  191. data/lib/capybara/spec/session/has_xpath_spec.rb +74 -53
  192. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
  193. data/lib/capybara/spec/session/html_spec.rb +14 -6
  194. data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
  195. data/lib/capybara/spec/session/node_spec.rb +1028 -131
  196. data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  197. data/lib/capybara/spec/session/refresh_spec.rb +34 -0
  198. data/lib/capybara/spec/session/reset_session_spec.rb +75 -34
  199. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
  200. data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
  201. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +11 -15
  202. data/lib/capybara/spec/session/save_page_spec.rb +42 -55
  203. data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
  204. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  205. data/lib/capybara/spec/session/scroll_spec.rb +117 -0
  206. data/lib/capybara/spec/session/select_spec.rb +112 -85
  207. data/lib/capybara/spec/session/selectors_spec.rb +71 -8
  208. data/lib/capybara/spec/session/sibling_spec.rb +52 -0
  209. data/lib/capybara/spec/session/text_spec.rb +38 -23
  210. data/lib/capybara/spec/session/title_spec.rb +17 -5
  211. data/lib/capybara/spec/session/uncheck_spec.rb +71 -12
  212. data/lib/capybara/spec/session/unselect_spec.rb +44 -43
  213. data/lib/capybara/spec/session/visit_spec.rb +99 -32
  214. data/lib/capybara/spec/session/window/become_closed_spec.rb +33 -29
  215. data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
  216. data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
  217. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +39 -30
  218. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +17 -10
  219. data/lib/capybara/spec/session/window/window_spec.rb +121 -73
  220. data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
  221. data/lib/capybara/spec/session/window/within_window_spec.rb +52 -82
  222. data/lib/capybara/spec/session/within_spec.rb +76 -43
  223. data/lib/capybara/spec/spec_helper.rb +67 -33
  224. data/lib/capybara/spec/test_app.rb +85 -36
  225. data/lib/capybara/spec/views/animated.erb +49 -0
  226. data/lib/capybara/spec/views/buttons.erb +1 -1
  227. data/lib/capybara/spec/views/fieldsets.erb +1 -1
  228. data/lib/capybara/spec/views/form.erb +227 -20
  229. data/lib/capybara/spec/views/frame_child.erb +10 -2
  230. data/lib/capybara/spec/views/frame_one.erb +2 -1
  231. data/lib/capybara/spec/views/frame_parent.erb +2 -2
  232. data/lib/capybara/spec/views/frame_two.erb +1 -1
  233. data/lib/capybara/spec/views/header_links.erb +1 -1
  234. data/lib/capybara/spec/views/host_links.erb +1 -1
  235. data/lib/capybara/spec/views/initial_alert.erb +10 -0
  236. data/lib/capybara/spec/views/obscured.erb +47 -0
  237. data/lib/capybara/spec/views/offset.erb +32 -0
  238. data/lib/capybara/spec/views/path.erb +1 -1
  239. data/lib/capybara/spec/views/popup_one.erb +1 -1
  240. data/lib/capybara/spec/views/popup_two.erb +1 -1
  241. data/lib/capybara/spec/views/postback.erb +1 -1
  242. data/lib/capybara/spec/views/react.erb +45 -0
  243. data/lib/capybara/spec/views/scroll.erb +20 -0
  244. data/lib/capybara/spec/views/spatial.erb +31 -0
  245. data/lib/capybara/spec/views/tables.erb +69 -2
  246. data/lib/capybara/spec/views/with_animation.erb +82 -0
  247. data/lib/capybara/spec/views/with_base_tag.erb +1 -1
  248. data/lib/capybara/spec/views/with_count.erb +1 -1
  249. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  250. data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
  251. data/lib/capybara/spec/views/with_hover.erb +7 -1
  252. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  253. data/lib/capybara/spec/views/with_html.erb +100 -10
  254. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  255. data/lib/capybara/spec/views/with_html_entities.erb +1 -1
  256. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  257. data/lib/capybara/spec/views/with_js.erb +49 -3
  258. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  259. data/lib/capybara/spec/views/with_namespace.erb +20 -0
  260. data/lib/capybara/spec/views/with_scope.erb +1 -1
  261. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  262. data/lib/capybara/spec/views/with_simple_html.erb +1 -1
  263. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  264. data/lib/capybara/spec/views/with_title.erb +1 -1
  265. data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
  266. data/lib/capybara/spec/views/with_windows.erb +7 -1
  267. data/lib/capybara/spec/views/within_frames.erb +6 -3
  268. data/lib/capybara/version.rb +2 -1
  269. data/lib/capybara/window.rb +39 -21
  270. data/lib/capybara.rb +208 -186
  271. data/spec/basic_node_spec.rb +52 -39
  272. data/spec/capybara_spec.rb +72 -50
  273. data/spec/css_builder_spec.rb +101 -0
  274. data/spec/css_splitter_spec.rb +38 -0
  275. data/spec/dsl_spec.rb +81 -61
  276. data/spec/filter_set_spec.rb +46 -0
  277. data/spec/fixtures/capybara.csv +1 -0
  278. data/spec/fixtures/certificate.pem +25 -0
  279. data/spec/fixtures/key.pem +27 -0
  280. data/spec/fixtures/selenium_driver_rspec_failure.rb +7 -3
  281. data/spec/fixtures/selenium_driver_rspec_success.rb +7 -3
  282. data/spec/minitest_spec.rb +164 -0
  283. data/spec/minitest_spec_spec.rb +162 -0
  284. data/spec/per_session_config_spec.rb +68 -0
  285. data/spec/rack_test_spec.rb +189 -96
  286. data/spec/regexp_dissassembler_spec.rb +250 -0
  287. data/spec/result_spec.rb +143 -13
  288. data/spec/rspec/features_spec.rb +38 -32
  289. data/spec/rspec/scenarios_spec.rb +9 -7
  290. data/spec/rspec/shared_spec_matchers.rb +959 -0
  291. data/spec/rspec/views_spec.rb +9 -3
  292. data/spec/rspec_matchers_spec.rb +62 -0
  293. data/spec/rspec_spec.rb +127 -30
  294. data/spec/sauce_spec_chrome.rb +43 -0
  295. data/spec/selector_spec.rb +458 -37
  296. data/spec/selenium_spec_chrome.rb +196 -9
  297. data/spec/selenium_spec_chrome_remote.rb +100 -0
  298. data/spec/selenium_spec_edge.rb +47 -0
  299. data/spec/selenium_spec_firefox.rb +210 -0
  300. data/spec/selenium_spec_firefox_remote.rb +80 -0
  301. data/spec/selenium_spec_ie.rb +150 -0
  302. data/spec/selenium_spec_safari.rb +148 -0
  303. data/spec/server_spec.rb +200 -101
  304. data/spec/session_spec.rb +91 -0
  305. data/spec/shared_selenium_node.rb +83 -0
  306. data/spec/shared_selenium_session.rb +558 -0
  307. data/spec/spec_helper.rb +94 -2
  308. data/spec/xpath_builder_spec.rb +93 -0
  309. metadata +420 -60
  310. data/lib/capybara/query.rb +0 -7
  311. data/lib/capybara/spec/session/assert_current_path.rb +0 -60
  312. data/lib/capybara/spec/session/assert_selector.rb +0 -148
  313. data/lib/capybara/spec/session/assert_text.rb +0 -196
  314. data/lib/capybara/spec/session/assert_title.rb +0 -70
  315. data/lib/capybara/spec/session/source_spec.rb +0 -0
  316. data/lib/capybara/spec/session/within_frame_spec.rb +0 -53
  317. data/spec/rspec/matchers_spec.rb +0 -827
  318. data/spec/selenium_spec.rb +0 -151
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'capybara/queries/selector_query'
3
- module Capybara
4
- # @deprecated This class and its methods are not supposed to be used by users of Capybara's public API.
5
- # It may be removed in future versions of Capybara.
6
- Query = Queries::SelectorQuery
7
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
- Capybara::SpecHelper.spec '#assert_current_path' do
3
- before do
4
- @session.visit('/with_js')
5
- end
6
-
7
- it "should not raise if the page has the given current path" do
8
- expect {@session.assert_current_path('/with_js')}.not_to raise_error
9
- end
10
-
11
- it "should allow regexp matches" do
12
- expect { @session.assert_current_path(/w[a-z]{3}_js/) }.not_to raise_error
13
- end
14
-
15
- it "should wait for current_path", :requires => [:js] do
16
- @session.click_link("Change page")
17
- expect { @session.assert_current_path("/with_html") }.not_to raise_error
18
- end
19
-
20
- it "should raise if the page has not the given current_path" do
21
- expect{@session.assert_current_path('/with_html')}.to raise_error(Capybara::ExpectationNotMet, 'expected "/with_js" to equal "/with_html"')
22
- end
23
-
24
- it "should check query options" do
25
- @session.visit('/with_js?test=test')
26
- expect{@session.assert_current_path('/with_js?test=test')}.not_to raise_error
27
- end
28
-
29
- it "should compare the full url" do
30
- expect{@session.assert_current_path(%r{\Ahttp://[^/]*/with_js\Z}, url: true)}.not_to raise_error
31
- end
32
-
33
- it "should ignore the query" do
34
- @session.visit('/with_js?test=test')
35
- expect{@session.assert_current_path('/with_js', only_path: true)}.not_to raise_error
36
- end
37
- end
38
-
39
- Capybara::SpecHelper.spec '#assert_no_current_path?' do
40
- before do
41
- @session.visit('/with_js')
42
- end
43
-
44
- it "should raise if the page has the given current_path" do
45
- expect{@session.assert_no_current_path('/with_js')}.to raise_error(Capybara::ExpectationNotMet)
46
- end
47
-
48
- it "should allow regexp matches" do
49
- expect{@session.assert_no_current_path(/monkey/)}.not_to raise_error
50
- end
51
-
52
- it "should wait for current_path to disappear", :requires => [:js] do
53
- @session.click_link("Change page")
54
- expect{@session.assert_no_current_path('/with_js')}.not_to raise_error
55
- end
56
-
57
- it "should not raise if the page has not the given current_path" do
58
- expect{@session.assert_no_current_path('/with_html')}.not_to raise_error
59
- end
60
- end
@@ -1,148 +0,0 @@
1
- # frozen_string_literal: true
2
- Capybara::SpecHelper.spec '#assert_selector' do
3
- before do
4
- @session.visit('/with_html')
5
- end
6
-
7
- it "should be true if the given selector is on the page" do
8
- @session.assert_selector(:xpath, "//p")
9
- @session.assert_selector(:css, "p a#foo")
10
- @session.assert_selector("//p[contains(.,'est')]")
11
- end
12
-
13
- it "should be false if the given selector is not on the page" do
14
- expect { @session.assert_selector(:xpath, "//abbr") }.to raise_error(Capybara::ElementNotFound)
15
- expect { @session.assert_selector(:css, "p a#doesnotexist") }.to raise_error(Capybara::ElementNotFound)
16
- expect { @session.assert_selector("//p[contains(.,'thisstringisnotonpage')]") }.to raise_error(Capybara::ElementNotFound)
17
- end
18
-
19
- it "should use default selector" do
20
- Capybara.default_selector = :css
21
- expect { @session.assert_selector("p a#doesnotexist") }.to raise_error(Capybara::ElementNotFound)
22
- @session.assert_selector("p a#foo")
23
- end
24
-
25
- it "should respect scopes" do
26
- @session.within "//p[@id='first']" do
27
- @session.assert_selector(".//a[@id='foo']")
28
- expect { @session.assert_selector(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
29
- end
30
- end
31
-
32
- context "with count" do
33
- it "should be true if the content is on the page the given number of times" do
34
- @session.assert_selector("//p", :count => 3)
35
- @session.assert_selector("//p//a[@id='foo']", :count => 1)
36
- @session.assert_selector("//p[contains(.,'est')]", :count => 1)
37
- end
38
-
39
- it "should be false if the content is on the page the given number of times" do
40
- expect { @session.assert_selector("//p", :count => 6) }.to raise_error(Capybara::ElementNotFound)
41
- expect { @session.assert_selector("//p//a[@id='foo']", :count => 2) }.to raise_error(Capybara::ElementNotFound)
42
- expect { @session.assert_selector("//p[contains(.,'est')]", :count => 5) }.to raise_error(Capybara::ElementNotFound)
43
- end
44
-
45
- it "should be false if the content isn't on the page at all" do
46
- expect { @session.assert_selector("//abbr", :count => 2) }.to raise_error(Capybara::ElementNotFound)
47
- expect { @session.assert_selector("//p//a[@id='doesnotexist']", :count => 1) }.to raise_error(Capybara::ElementNotFound)
48
- end
49
- end
50
-
51
- context "with text" do
52
- it "should discard all matches where the given string is not contained" do
53
- @session.assert_selector("//p//a", :text => "Redirect", :count => 1)
54
- expect { @session.assert_selector("//p", :text => "Doesnotexist") }.to raise_error(Capybara::ElementNotFound)
55
- end
56
-
57
- it "should discard all matches where the given regexp is not matched" do
58
- @session.assert_selector("//p//a", :text => /re[dab]i/i, :count => 1)
59
- expect { @session.assert_selector("//p//a", :text => /Red$/) }.to raise_error(Capybara::ElementNotFound)
60
- end
61
- end
62
-
63
- context "with wait", :requires => [:js] do
64
- it "should find element if it appears before given wait duration" do
65
- Capybara.using_wait_time(0.1) do
66
- @session.visit('/with_js')
67
- @session.click_link('Click me')
68
- @session.assert_selector(:css, "a#has-been-clicked", :text => "Has been clicked", :wait => 0.9)
69
- end
70
- end
71
- end
72
- end
73
-
74
- Capybara::SpecHelper.spec '#refute_selector' do
75
- it "should be an alias of #assert_no_selector" do
76
- expect(Capybara::Node::Matchers.instance_method(:refute_selector)).to eq Capybara::Node::Matchers.instance_method(:assert_no_selector)
77
- end
78
- end
79
-
80
- Capybara::SpecHelper.spec '#assert_no_selector' do
81
- before do
82
- @session.visit('/with_html')
83
- end
84
-
85
- it "should be false if the given selector is on the page" do
86
- expect { @session.assert_no_selector(:xpath, "//p") }.to raise_error(Capybara::ElementNotFound)
87
- expect { @session.assert_no_selector(:css, "p a#foo") }.to raise_error(Capybara::ElementNotFound)
88
- expect { @session.assert_no_selector("//p[contains(.,'est')]") }.to raise_error(Capybara::ElementNotFound)
89
- end
90
-
91
- it "should be true if the given selector is not on the page" do
92
- @session.assert_no_selector(:xpath, "//abbr")
93
- @session.assert_no_selector(:css, "p a#doesnotexist")
94
- @session.assert_no_selector("//p[contains(.,'thisstringisnotonpage')]")
95
- end
96
-
97
- it "should use default selector" do
98
- Capybara.default_selector = :css
99
- @session.assert_no_selector("p a#doesnotexist")
100
- expect { @session.assert_no_selector("p a#foo") }.to raise_error(Capybara::ElementNotFound)
101
- end
102
-
103
- it "should respect scopes" do
104
- @session.within "//p[@id='first']" do
105
- expect { @session.assert_no_selector(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
106
- @session.assert_no_selector(".//a[@id='red']")
107
- end
108
- end
109
-
110
- context "with count" do
111
- it "should be false if the content is on the page the given number of times" do
112
- expect { @session.assert_no_selector("//p", :count => 3) }.to raise_error(Capybara::ElementNotFound)
113
- expect { @session.assert_no_selector("//p//a[@id='foo']", :count => 1) }.to raise_error(Capybara::ElementNotFound)
114
- expect { @session.assert_no_selector("//p[contains(.,'est')]", :count => 1) }.to raise_error(Capybara::ElementNotFound)
115
- end
116
-
117
- it "should be true if the content is on the page the wrong number of times" do
118
- @session.assert_no_selector("//p", :count => 6)
119
- @session.assert_no_selector("//p//a[@id='foo']", :count => 2)
120
- @session.assert_no_selector("//p[contains(.,'est')]", :count => 5)
121
- end
122
-
123
- it "should be true if the content isn't on the page at all" do
124
- @session.assert_no_selector("//abbr", :count => 2)
125
- @session.assert_no_selector("//p//a[@id='doesnotexist']", :count => 1)
126
- end
127
- end
128
-
129
- context "with text" do
130
- it "should discard all matches where the given string is contained" do
131
- expect { @session.assert_no_selector("//p//a", :text => "Redirect", :count => 1) }.to raise_error(Capybara::ElementNotFound)
132
- @session.assert_no_selector("//p", :text => "Doesnotexist")
133
- end
134
-
135
- it "should discard all matches where the given regexp is matched" do
136
- expect { @session.assert_no_selector("//p//a", :text => /re[dab]i/i, :count => 1) }.to raise_error(Capybara::ElementNotFound)
137
- @session.assert_no_selector("//p//a", :text => /Red$/)
138
- end
139
- end
140
-
141
- context "with wait", :requires => [:js] do
142
- it "should not find element if it appears after given wait duration" do
143
- @session.visit('/with_js')
144
- @session.click_link('Click me')
145
- @session.assert_no_selector(:css, "a#has-been-clicked", :text => "Has been clicked", :wait => 0.1)
146
- end
147
- end
148
- end
@@ -1,196 +0,0 @@
1
- # frozen_string_literal: true
2
- Capybara::SpecHelper.spec '#assert_text' do
3
- it "should be true if the given text is on the page" do
4
- @session.visit('/with_html')
5
- expect(@session.assert_text('est')).to eq(true)
6
- expect(@session.assert_text('Lorem')).to eq(true)
7
- expect(@session.assert_text('Redirect')).to eq(true)
8
- expect(@session.assert_text(:'Redirect')).to eq(true)
9
- expect(@session.assert_text('text with whitespace')).to eq(true)
10
- expect(@session.assert_text("text with \n\n whitespace")).to eq(true)
11
- end
12
-
13
- it "should take scopes into account" do
14
- @session.visit('/with_html')
15
- @session.within("//a[@title='awesome title']") do
16
- expect(@session.assert_text('labore')).to eq(true)
17
- end
18
- end
19
-
20
- it "should raise if scoped to an element which does not have the text" do
21
- @session.visit('/with_html')
22
- @session.within("//a[@title='awesome title']") do
23
- expect do
24
- @session.assert_text('monkey')
25
- end.to raise_error(Capybara::ExpectationNotMet, 'expected to find text "monkey" in "labore"')
26
- end
27
- end
28
-
29
- it "should be true if :all given and text is invisible." do
30
- @session.visit('/with_html')
31
- expect(@session.assert_text(:all, 'Some of this text is hidden!')).to eq(true)
32
- end
33
-
34
- it "should be true if `Capybara.ignore_hidden_elements = true` and text is invisible." do
35
- Capybara.ignore_hidden_elements = false
36
- @session.visit('/with_html')
37
- expect(@session.assert_text('Some of this text is hidden!')).to eq(true)
38
- end
39
-
40
- it "should be true if the text in the page matches given regexp" do
41
- @session.visit('/with_html')
42
- expect(@session.assert_text(/Lorem/)).to eq(true)
43
- end
44
-
45
- it "should be raise error if the text in the page doesn't match given regexp" do
46
- @session.visit('/with_html')
47
- expect do
48
- @session.assert_text(/xxxxyzzz/)
49
- end.to raise_error(Capybara::ExpectationNotMet, /\Aexpected to find text matching \/xxxxyzzz\/ in "This is a test Header Class(.+)"\Z/)
50
- end
51
-
52
- it "should escape any characters that would have special meaning in a regexp" do
53
- @session.visit('/with_html')
54
- expect do
55
- @session.assert_text('.orem')
56
- end.to raise_error(Capybara::ExpectationNotMet)
57
- end
58
-
59
- it "should wait for text to appear", :requires => [:js] do
60
- @session.visit('/with_js')
61
- @session.click_link('Click me')
62
- expect(@session.assert_text('Has been clicked')).to eq(true)
63
- end
64
-
65
- context "with between" do
66
- it "should be true if the text occurs within the range given" do
67
- @session.visit('/with_count')
68
- expect(@session.assert_text('count', between: 1..3)).to eq(true)
69
- end
70
-
71
- it "should be false if the text occurs more or fewer times than range" do
72
- @session.visit('/with_html')
73
- expect do
74
- @session.find(:css, '.number').assert_text(/\d/, between: 0..1)
75
- end.to raise_error(Capybara::ExpectationNotMet, "expected to find text matching /\\d/ between 0 and 1 times but found 2 times in \"42\"")
76
- end
77
- end
78
-
79
- context "with wait", :requires => [:js] do
80
- it "should find element if it appears before given wait duration" do
81
- Capybara.using_wait_time(0) do
82
- @session.visit('/with_js')
83
- @session.find(:css, '#reload-list').click
84
- @session.find(:css, '#the-list').assert_text('Foo Bar', wait: 0.9)
85
- end
86
- end
87
-
88
- it "should raise error if it appears after given wait duration" do
89
- Capybara.using_wait_time(0) do
90
- @session.visit('/with_js')
91
- @session.find(:css, '#reload-list').click
92
- el = @session.find(:css, '#the-list', visible: false)
93
- expect do
94
- el.assert_text(:all, 'Foo Bar', wait: 0.3)
95
- end.to raise_error(Capybara::ExpectationNotMet)
96
- end
97
- end
98
- end
99
-
100
- context 'with multiple count filters' do
101
- before(:each) do
102
- @session.visit('/with_html')
103
- end
104
-
105
- it 'ignores other filters when :count is specified' do
106
- o = {:count => 5,
107
- :minimum => 6,
108
- :maximum => 0,
109
- :between => 0..4}
110
- expect { @session.assert_text('Header', o) }.not_to raise_error
111
- end
112
- context 'with no :count expectation' do
113
- it 'fails if :minimum is not met' do
114
- o = {:minimum => 6,
115
- :maximum => 5,
116
- :between => 2..7}
117
- expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
118
- end
119
- it 'fails if :maximum is not met' do
120
- o = {:minimum => 0,
121
- :maximum => 0,
122
- :between => 2..7}
123
- expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
124
- end
125
- it 'fails if :between is not met' do
126
- o = {:minimum => 0,
127
- :maximum => 5,
128
- :between => 0..4}
129
- expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
130
- end
131
- it 'succeeds if all combineable expectations are met' do
132
- o = {:minimum => 0,
133
- :maximum => 5,
134
- :between => 2..7}
135
- expect { @session.assert_text('Header', o) }.not_to raise_error
136
- end
137
- end
138
- end
139
- end
140
-
141
- Capybara::SpecHelper.spec '#assert_no_text' do
142
- it "should raise error if the given text is on the page at least once" do
143
- @session.visit('/with_html')
144
- expect do
145
- @session.assert_no_text('Lorem')
146
- end.to raise_error(Capybara::ExpectationNotMet, /\Aexpected not to find text "Lorem" in "This is a test Header Class.+"\Z/)
147
- end
148
-
149
- it "should be true if scoped to an element which does not have the text" do
150
- @session.visit('/with_html')
151
- @session.within("//a[@title='awesome title']") do
152
- expect(@session.assert_no_text('monkey')).to eq(true)
153
- end
154
- end
155
-
156
- it "should be true if the given text is on the page but not visible" do
157
- @session.visit('/with_html')
158
- expect(@session.assert_no_text('Inside element with hidden ancestor')).to eq(true)
159
- end
160
-
161
- it "should raise error if :all given and text is invisible." do
162
- @session.visit('/with_html')
163
- el = @session.find(:css, '#hidden-text', visible: false)
164
- expect do
165
- el.assert_no_text(:all, 'Some of this text is hidden!')
166
- end.to raise_error(Capybara::ExpectationNotMet, 'expected not to find text "Some of this text is hidden!" in "Some of this text is hidden!"')
167
- end
168
-
169
- it "should be true if the text in the page doesn't match given regexp" do
170
- @session.visit('/with_html')
171
- @session.assert_no_text(/xxxxyzzz/)
172
- end
173
-
174
- context "with count" do
175
- it "should be true if the text occurs within the range given" do
176
- @session.visit('/with_count')
177
- expect(@session.assert_text('count', count: 2)).to eq(true)
178
- end
179
-
180
- it "should be false if the text occurs more or fewer times than range" do
181
- @session.visit('/with_html')
182
- expect do
183
- @session.find(:css, '.number').assert_text(/\d/, count: 1)
184
- end.to raise_error(Capybara::ExpectationNotMet, "expected to find text matching /\\d/ 1 time but found 2 times in \"42\"")
185
- end
186
- end
187
-
188
- context "with wait", :requires => [:js] do
189
- it "should not find element if it appears after given wait duration" do
190
- @session.visit('/with_js')
191
- @session.click_link('Click me')
192
- @session.find(:css, '#reload-list').click
193
- @session.find(:css, '#the-list').assert_no_text('Foo Bar', :wait => 0.3)
194
- end
195
- end
196
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
- Capybara::SpecHelper.spec '#assert_title' do
3
- before do
4
- @session.visit('/with_js')
5
- end
6
-
7
- it "should be true if the page's title contains the given string" do
8
- expect(@session.assert_title('js')).to eq(true)
9
- end
10
-
11
- it "should be true when given an empty string" do
12
- expect(@session.assert_title('')).to eq(true)
13
- end
14
-
15
- it "should allow regexp matches" do
16
- expect(@session.assert_title(/w[a-z]{3}_js/)).to eq(true)
17
- expect do
18
- @session.assert_title(/w[a-z]{10}_js/)
19
- end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to match /w[a-z]{10}_js/')
20
- end
21
-
22
- it "should wait for title", :requires => [:js] do
23
- @session.click_link("Change title")
24
- expect(@session.assert_title("changed title")).to eq(true)
25
- end
26
-
27
- it "should raise error if the title doesn't contain the given string" do
28
- expect do
29
- @session.assert_title('monkey')
30
- end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to include "monkey"')
31
- end
32
-
33
- it "should normalize given title" do
34
- @session.assert_title(' with_js ')
35
- end
36
-
37
- it "should normalize given title in error message" do
38
- expect do
39
- @session.assert_title(2)
40
- end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to include "2"')
41
- end
42
- end
43
-
44
- Capybara::SpecHelper.spec '#assert_no_title' do
45
- before do
46
- @session.visit('/with_js')
47
- end
48
-
49
- it "should raise error if the title contains the given string" do
50
- expect do
51
- @session.assert_no_title('with_j')
52
- end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" not to include "with_j"')
53
- end
54
-
55
- it "should allow regexp matches" do
56
- expect do
57
- @session.assert_no_title(/w[a-z]{3}_js/)
58
- end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" not to match /w[a-z]{3}_js/')
59
- @session.assert_no_title(/monkey/)
60
- end
61
-
62
- it "should wait for title to disappear", :requires => [:js] do
63
- @session.click_link("Change title")
64
- expect(@session.assert_no_title('with_js')).to eq(true)
65
- end
66
-
67
- it "should be true if the title doesn't contain the given string" do
68
- expect(@session.assert_no_title('monkey')).to eq(true)
69
- end
70
- end