capybara 2.18.0 → 3.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/History.md +945 -12
  4. data/License.txt +1 -1
  5. data/README.md +264 -90
  6. data/lib/capybara/config.rb +29 -57
  7. data/lib/capybara/cucumber.rb +2 -3
  8. data/lib/capybara/driver/base.rb +35 -18
  9. data/lib/capybara/driver/node.rb +40 -10
  10. data/lib/capybara/dsl.rb +10 -7
  11. data/lib/capybara/helpers.rb +70 -31
  12. data/lib/capybara/minitest/spec.rb +185 -83
  13. data/lib/capybara/minitest.rb +232 -112
  14. data/lib/capybara/node/actions.rb +274 -171
  15. data/lib/capybara/node/base.rb +42 -34
  16. data/lib/capybara/node/document.rb +15 -3
  17. data/lib/capybara/node/document_matchers.rb +19 -21
  18. data/lib/capybara/node/element.rb +362 -135
  19. data/lib/capybara/node/finders.rb +151 -137
  20. data/lib/capybara/node/matchers.rb +394 -209
  21. data/lib/capybara/node/simple.rb +59 -26
  22. data/lib/capybara/node/whitespace_normalizer.rb +81 -0
  23. data/lib/capybara/queries/active_element_query.rb +18 -0
  24. data/lib/capybara/queries/ancestor_query.rb +12 -9
  25. data/lib/capybara/queries/base_query.rb +39 -28
  26. data/lib/capybara/queries/current_path_query.rb +21 -27
  27. data/lib/capybara/queries/match_query.rb +14 -7
  28. data/lib/capybara/queries/selector_query.rb +659 -149
  29. data/lib/capybara/queries/sibling_query.rb +11 -9
  30. data/lib/capybara/queries/style_query.rb +45 -0
  31. data/lib/capybara/queries/text_query.rb +56 -38
  32. data/lib/capybara/queries/title_query.rb +8 -11
  33. data/lib/capybara/rack_test/browser.rb +114 -42
  34. data/lib/capybara/rack_test/css_handlers.rb +6 -4
  35. data/lib/capybara/rack_test/driver.rb +22 -17
  36. data/lib/capybara/rack_test/errors.rb +6 -0
  37. data/lib/capybara/rack_test/form.rb +93 -58
  38. data/lib/capybara/rack_test/node.rb +184 -81
  39. data/lib/capybara/rails.rb +3 -7
  40. data/lib/capybara/registration_container.rb +41 -0
  41. data/lib/capybara/registrations/drivers.rb +42 -0
  42. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  43. data/lib/capybara/registrations/servers.rb +66 -0
  44. data/lib/capybara/result.rb +97 -63
  45. data/lib/capybara/rspec/features.rb +17 -50
  46. data/lib/capybara/rspec/matcher_proxies.rb +52 -15
  47. data/lib/capybara/rspec/matchers/base.rb +113 -0
  48. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  49. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  50. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  51. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  52. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  53. data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
  54. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  55. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  56. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  57. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  58. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  59. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  60. data/lib/capybara/rspec/matchers.rb +146 -310
  61. data/lib/capybara/rspec.rb +7 -11
  62. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  63. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  64. data/lib/capybara/selector/css.rb +85 -13
  65. data/lib/capybara/selector/definition/button.rb +68 -0
  66. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  67. data/lib/capybara/selector/definition/css.rb +10 -0
  68. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  69. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  70. data/lib/capybara/selector/definition/element.rb +28 -0
  71. data/lib/capybara/selector/definition/field.rb +40 -0
  72. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  73. data/lib/capybara/selector/definition/file_field.rb +13 -0
  74. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  75. data/lib/capybara/selector/definition/frame.rb +17 -0
  76. data/lib/capybara/selector/definition/id.rb +6 -0
  77. data/lib/capybara/selector/definition/label.rb +62 -0
  78. data/lib/capybara/selector/definition/link.rb +55 -0
  79. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  80. data/lib/capybara/selector/definition/option.rb +27 -0
  81. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  82. data/lib/capybara/selector/definition/select.rb +81 -0
  83. data/lib/capybara/selector/definition/table.rb +109 -0
  84. data/lib/capybara/selector/definition/table_row.rb +21 -0
  85. data/lib/capybara/selector/definition/xpath.rb +5 -0
  86. data/lib/capybara/selector/definition.rb +280 -0
  87. data/lib/capybara/selector/filter.rb +2 -17
  88. data/lib/capybara/selector/filter_set.rb +80 -33
  89. data/lib/capybara/selector/filters/base.rb +50 -6
  90. data/lib/capybara/selector/filters/expression_filter.rb +8 -26
  91. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  92. data/lib/capybara/selector/filters/node_filter.rb +16 -12
  93. data/lib/capybara/selector/regexp_disassembler.rb +211 -0
  94. data/lib/capybara/selector/selector.rb +93 -210
  95. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  96. data/lib/capybara/selector.rb +475 -523
  97. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  98. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  99. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  100. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  101. data/lib/capybara/selenium/driver.rb +298 -267
  102. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  103. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
  104. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
  105. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  106. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  107. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  108. data/lib/capybara/selenium/extensions/find.rb +110 -0
  109. data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
  110. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  111. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  112. data/lib/capybara/selenium/node.rb +517 -145
  113. data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
  114. data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
  115. data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  116. data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  117. data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  118. data/lib/capybara/selenium/patches/atoms.rb +18 -0
  119. data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  120. data/lib/capybara/selenium/patches/logs.rb +45 -0
  121. data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  122. data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  123. data/lib/capybara/server/animation_disabler.rb +80 -0
  124. data/lib/capybara/server/checker.rb +44 -0
  125. data/lib/capybara/server/middleware.rb +71 -0
  126. data/lib/capybara/server.rb +59 -67
  127. data/lib/capybara/session/config.rb +81 -67
  128. data/lib/capybara/session/matchers.rb +28 -20
  129. data/lib/capybara/session.rb +337 -365
  130. data/lib/capybara/spec/public/jquery.js +5 -5
  131. data/lib/capybara/spec/public/offset.js +6 -0
  132. data/lib/capybara/spec/public/test.js +151 -12
  133. data/lib/capybara/spec/session/accept_alert_spec.rb +12 -11
  134. data/lib/capybara/spec/session/accept_confirm_spec.rb +6 -5
  135. data/lib/capybara/spec/session/accept_prompt_spec.rb +10 -10
  136. data/lib/capybara/spec/session/active_element_spec.rb +31 -0
  137. data/lib/capybara/spec/session/all_spec.rb +161 -57
  138. data/lib/capybara/spec/session/ancestor_spec.rb +27 -24
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +68 -38
  140. data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
  141. data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  142. data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  143. data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
  144. data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +22 -12
  145. data/lib/capybara/spec/session/attach_file_spec.rb +144 -69
  146. data/lib/capybara/spec/session/body_spec.rb +12 -13
  147. data/lib/capybara/spec/session/check_spec.rb +117 -55
  148. data/lib/capybara/spec/session/choose_spec.rb +64 -31
  149. data/lib/capybara/spec/session/click_button_spec.rb +231 -173
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +55 -35
  151. data/lib/capybara/spec/session/click_link_spec.rb +93 -58
  152. data/lib/capybara/spec/session/current_scope_spec.rb +12 -11
  153. data/lib/capybara/spec/session/current_url_spec.rb +57 -39
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +4 -4
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +3 -2
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +71 -57
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +8 -7
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +29 -8
  162. data/lib/capybara/spec/session/execute_script_spec.rb +10 -8
  163. data/lib/capybara/spec/session/fill_in_spec.rb +134 -43
  164. data/lib/capybara/spec/session/find_button_spec.rb +25 -24
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
  166. data/lib/capybara/spec/session/find_field_spec.rb +37 -41
  167. data/lib/capybara/spec/session/find_link_spec.rb +46 -17
  168. data/lib/capybara/spec/session/find_spec.rb +260 -145
  169. data/lib/capybara/spec/session/first_spec.rb +80 -52
  170. data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
  171. data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
  172. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +33 -20
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +52 -32
  174. data/lib/capybara/spec/session/go_back_spec.rb +2 -1
  175. data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +31 -31
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +100 -13
  180. data/lib/capybara/spec/session/has_css_spec.rb +272 -137
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +60 -61
  182. data/lib/capybara/spec/session/has_element_spec.rb +47 -0
  183. data/lib/capybara/spec/session/has_field_spec.rb +139 -59
  184. data/lib/capybara/spec/session/has_link_spec.rb +47 -6
  185. data/lib/capybara/spec/session/has_none_selectors_spec.rb +42 -40
  186. data/lib/capybara/spec/session/has_select_spec.rb +107 -72
  187. data/lib/capybara/spec/session/has_selector_spec.rb +120 -71
  188. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  189. data/lib/capybara/spec/session/has_table_spec.rb +183 -5
  190. data/lib/capybara/spec/session/has_text_spec.rb +106 -62
  191. data/lib/capybara/spec/session/has_title_spec.rb +20 -14
  192. data/lib/capybara/spec/session/has_xpath_spec.rb +57 -38
  193. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
  194. data/lib/capybara/spec/session/html_spec.rb +14 -6
  195. data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
  196. data/lib/capybara/spec/session/node_spec.rb +1024 -153
  197. data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  198. data/lib/capybara/spec/session/refresh_spec.rb +12 -6
  199. data/lib/capybara/spec/session/reset_session_spec.rb +82 -35
  200. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
  201. data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
  202. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +8 -12
  203. data/lib/capybara/spec/session/save_page_spec.rb +42 -55
  204. data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
  205. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  206. data/lib/capybara/spec/session/scroll_spec.rb +119 -0
  207. data/lib/capybara/spec/session/select_spec.rb +107 -81
  208. data/lib/capybara/spec/session/selectors_spec.rb +52 -19
  209. data/lib/capybara/spec/session/sibling_spec.rb +10 -10
  210. data/lib/capybara/spec/session/text_spec.rb +37 -21
  211. data/lib/capybara/spec/session/title_spec.rb +17 -5
  212. data/lib/capybara/spec/session/uncheck_spec.rb +43 -23
  213. data/lib/capybara/spec/session/unselect_spec.rb +39 -38
  214. data/lib/capybara/spec/session/visit_spec.rb +85 -53
  215. data/lib/capybara/spec/session/window/become_closed_spec.rb +24 -20
  216. data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
  217. data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
  218. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +27 -22
  219. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +12 -6
  220. data/lib/capybara/spec/session/window/window_spec.rb +97 -63
  221. data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
  222. data/lib/capybara/spec/session/window/within_window_spec.rb +31 -86
  223. data/lib/capybara/spec/session/within_spec.rb +83 -44
  224. data/lib/capybara/spec/spec_helper.rb +54 -44
  225. data/lib/capybara/spec/test_app.rb +158 -43
  226. data/lib/capybara/spec/views/animated.erb +49 -0
  227. data/lib/capybara/spec/views/form.erb +163 -42
  228. data/lib/capybara/spec/views/frame_child.erb +4 -3
  229. data/lib/capybara/spec/views/frame_one.erb +2 -1
  230. data/lib/capybara/spec/views/frame_parent.erb +1 -1
  231. data/lib/capybara/spec/views/frame_two.erb +1 -1
  232. data/lib/capybara/spec/views/initial_alert.erb +2 -1
  233. data/lib/capybara/spec/views/layout.erb +10 -0
  234. data/lib/capybara/spec/views/obscured.erb +47 -0
  235. data/lib/capybara/spec/views/offset.erb +33 -0
  236. data/lib/capybara/spec/views/path.erb +2 -2
  237. data/lib/capybara/spec/views/popup_one.erb +1 -1
  238. data/lib/capybara/spec/views/popup_two.erb +1 -1
  239. data/lib/capybara/spec/views/react.erb +45 -0
  240. data/lib/capybara/spec/views/scroll.erb +21 -0
  241. data/lib/capybara/spec/views/spatial.erb +31 -0
  242. data/lib/capybara/spec/views/tables.erb +68 -1
  243. data/lib/capybara/spec/views/with_animation.erb +81 -0
  244. data/lib/capybara/spec/views/with_base_tag.erb +2 -2
  245. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  246. data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
  247. data/lib/capybara/spec/views/with_hover.erb +3 -2
  248. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  249. data/lib/capybara/spec/views/with_html.erb +69 -12
  250. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  251. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  252. data/lib/capybara/spec/views/with_js.erb +30 -5
  253. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  254. data/lib/capybara/spec/views/with_namespace.erb +21 -0
  255. data/lib/capybara/spec/views/with_scope.erb +2 -2
  256. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  257. data/lib/capybara/spec/views/with_shadow.erb +31 -0
  258. data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
  259. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  260. data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
  261. data/lib/capybara/spec/views/with_windows.erb +1 -1
  262. data/lib/capybara/spec/views/within_frames.erb +5 -2
  263. data/lib/capybara/version.rb +2 -1
  264. data/lib/capybara/window.rb +36 -34
  265. data/lib/capybara.rb +134 -107
  266. data/spec/basic_node_spec.rb +60 -34
  267. data/spec/capybara_spec.rb +63 -88
  268. data/spec/counter_spec.rb +35 -0
  269. data/spec/css_builder_spec.rb +101 -0
  270. data/spec/css_splitter_spec.rb +38 -0
  271. data/spec/dsl_spec.rb +85 -64
  272. data/spec/filter_set_spec.rb +27 -9
  273. data/spec/fixtures/certificate.pem +25 -0
  274. data/spec/fixtures/key.pem +27 -0
  275. data/spec/fixtures/selenium_driver_rspec_failure.rb +6 -5
  276. data/spec/fixtures/selenium_driver_rspec_success.rb +6 -5
  277. data/spec/minitest_spec.rb +52 -7
  278. data/spec/minitest_spec_spec.rb +94 -63
  279. data/spec/per_session_config_spec.rb +14 -13
  280. data/spec/rack_test_spec.rb +194 -125
  281. data/spec/regexp_dissassembler_spec.rb +250 -0
  282. data/spec/result_spec.rb +111 -50
  283. data/spec/rspec/features_spec.rb +37 -31
  284. data/spec/rspec/scenarios_spec.rb +10 -8
  285. data/spec/rspec/shared_spec_matchers.rb +473 -422
  286. data/spec/rspec/views_spec.rb +5 -3
  287. data/spec/rspec_matchers_spec.rb +52 -11
  288. data/spec/rspec_spec.rb +109 -89
  289. data/spec/sauce_spec_chrome.rb +43 -0
  290. data/spec/selector_spec.rb +397 -68
  291. data/spec/selenium_spec_chrome.rb +187 -40
  292. data/spec/selenium_spec_chrome_remote.rb +96 -0
  293. data/spec/selenium_spec_edge.rb +60 -0
  294. data/spec/selenium_spec_firefox.rb +201 -41
  295. data/spec/selenium_spec_firefox_remote.rb +94 -0
  296. data/spec/selenium_spec_ie.rb +149 -0
  297. data/spec/selenium_spec_safari.rb +162 -0
  298. data/spec/server_spec.rb +213 -102
  299. data/spec/session_spec.rb +53 -16
  300. data/spec/shared_selenium_node.rb +79 -0
  301. data/spec/shared_selenium_session.rb +473 -122
  302. data/spec/spec_helper.rb +126 -7
  303. data/spec/whitespace_normalizer_spec.rb +54 -0
  304. data/spec/xpath_builder_spec.rb +93 -0
  305. metadata +355 -73
  306. data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
  307. data/.yard/templates_custom/default/class/html/setup.rb +0 -17
  308. data/.yard/yard_extensions.rb +0 -78
  309. data/lib/capybara/query.rb +0 -7
  310. data/lib/capybara/rspec/compound.rb +0 -95
  311. data/lib/capybara/spec/session/assert_current_path.rb +0 -72
  312. data/lib/capybara/spec/session/assert_selector.rb +0 -148
  313. data/lib/capybara/spec/session/assert_text.rb +0 -234
  314. data/lib/capybara/spec/session/source_spec.rb +0 -0
  315. data/lib/capybara/spec/views/with_title.erb +0 -5
  316. data/spec/selenium_spec_marionette.rb +0 -127
@@ -1,234 +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 raise error with a helpful message if the requested text is present but invisible" do
41
- @session.visit('/with_html')
42
- el = @session.find(:css, '#hidden-text')
43
- expect do
44
- el.assert_text(:visible, 'Some of this text is hidden!')
45
- end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time including non-visible text/)
46
- end
47
-
48
- it "should raise error with a helpful message if the requested text is present but with incorrect case" do
49
- @session.visit('/with_html')
50
- expect do
51
- @session.assert_text('Text With Whitespace')
52
- end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time using a case insensitive search/)
53
- end
54
-
55
- it "should raise error with helpful message if requested text is present but invisible and with incorrect case", requires: [:js] do
56
- @session.visit('/with_html')
57
- el = @session.find(:css, '#uppercase')
58
- expect do
59
- el.assert_text('text here')
60
- end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time using a case insensitive search and it was found 1 time including non-visible text/)
61
- end
62
-
63
- it "should raise the correct error if requested text is missing but contains regex special characters" do
64
- @session.visit('/with_html')
65
- expect do
66
- @session.assert_text('[]*.')
67
- end.to raise_error(Capybara::ExpectationNotMet, /expected to find text "\[\]\*\."/)
68
- end
69
-
70
- it "should be true if the text in the page matches given regexp" do
71
- @session.visit('/with_html')
72
- expect(@session.assert_text(/Lorem/)).to eq(true)
73
- end
74
-
75
- it "should be raise error if the text in the page doesn't match given regexp" do
76
- @session.visit('/with_html')
77
- expect do
78
- @session.assert_text(/xxxxyzzz/)
79
- end.to raise_error(Capybara::ExpectationNotMet, /\Aexpected to find text matching \/xxxxyzzz\/ in "This is a test Header Class(.+)"\Z/)
80
- end
81
-
82
- it "should escape any characters that would have special meaning in a regexp" do
83
- @session.visit('/with_html')
84
- expect do
85
- @session.assert_text('.orem')
86
- end.to raise_error(Capybara::ExpectationNotMet)
87
- end
88
-
89
- it "should wait for text to appear", requires: [:js] do
90
- @session.visit('/with_js')
91
- @session.click_link('Click me')
92
- expect(@session.assert_text('Has been clicked')).to eq(true)
93
- end
94
-
95
- context "with between" do
96
- it "should be true if the text occurs within the range given" do
97
- @session.visit('/with_count')
98
- expect(@session.assert_text('count', between: 1..3)).to eq(true)
99
- end
100
-
101
- it "should be false if the text occurs more or fewer times than range" do
102
- @session.visit('/with_html')
103
- expect do
104
- @session.find(:css, '.number').assert_text(/\d/, between: 0..1)
105
- end.to raise_error(Capybara::ExpectationNotMet, "expected to find text matching /\\d/ between 0 and 1 times but found 2 times in \"42\"")
106
- end
107
- end
108
-
109
- context "with wait", requires: [:js] do
110
- it "should find element if it appears before given wait duration" do
111
- Capybara.using_wait_time(0) do
112
- @session.visit('/with_js')
113
- @session.find(:css, '#reload-list').click
114
- @session.find(:css, '#the-list').assert_text('Foo Bar', wait: 0.9)
115
- end
116
- end
117
-
118
- it "should raise error if it appears after given wait duration" do
119
- Capybara.using_wait_time(0) do
120
- @session.visit('/with_js')
121
- @session.find(:css, '#reload-list').click
122
- el = @session.find(:css, '#the-list', visible: false)
123
- expect do
124
- el.assert_text(:all, 'Foo Bar', wait: 0.3)
125
- end.to raise_error(Capybara::ExpectationNotMet)
126
- end
127
- end
128
- end
129
-
130
- context 'with multiple count filters' do
131
- before(:each) do
132
- @session.visit('/with_html')
133
- end
134
-
135
- it 'ignores other filters when :count is specified' do
136
- o = {count: 5,
137
- minimum: 6,
138
- maximum: 0,
139
- between: 0..4}
140
- expect { @session.assert_text('Header', o) }.not_to raise_error
141
- end
142
- context 'with no :count expectation' do
143
- it 'fails if :minimum is not met' do
144
- o = {minimum: 6,
145
- maximum: 5,
146
- between: 2..7}
147
- expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
148
- end
149
- it 'fails if :maximum is not met' do
150
- o = {minimum: 0,
151
- maximum: 0,
152
- between: 2..7}
153
- expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
154
- end
155
- it 'fails if :between is not met' do
156
- o = {minimum: 0,
157
- maximum: 5,
158
- between: 0..4}
159
- expect { @session.assert_text('Header', o) }.to raise_error(Capybara::ExpectationNotMet)
160
- end
161
- it 'succeeds if all combineable expectations are met' do
162
- o = {minimum: 0,
163
- maximum: 5,
164
- between: 2..7}
165
- expect { @session.assert_text('Header', o) }.not_to raise_error
166
- end
167
- end
168
- end
169
- end
170
-
171
- Capybara::SpecHelper.spec '#assert_no_text' do
172
- it "should raise error if the given text is on the page at least once" do
173
- @session.visit('/with_html')
174
- expect do
175
- @session.assert_no_text('Lorem')
176
- end.to raise_error(Capybara::ExpectationNotMet, /\Aexpected not to find text "Lorem" in "This is a test Header Class.+"\Z/)
177
- end
178
-
179
- it "should be true if scoped to an element which does not have the text" do
180
- @session.visit('/with_html')
181
- @session.within("//a[@title='awesome title']") do
182
- expect(@session.assert_no_text('monkey')).to eq(true)
183
- end
184
- end
185
-
186
- it "should be true if the given text is on the page but not visible" do
187
- @session.visit('/with_html')
188
- expect(@session.assert_no_text('Inside element with hidden ancestor')).to eq(true)
189
- end
190
-
191
- it "should raise error if :all given and text is invisible." do
192
- @session.visit('/with_html')
193
- el = @session.find(:css, '#hidden-text', visible: false)
194
- expect do
195
- el.assert_no_text(:all, 'Some of this text is hidden!')
196
- end.to raise_error(Capybara::ExpectationNotMet, 'expected not to find text "Some of this text is hidden!" in "Some of this text is hidden!"')
197
- end
198
-
199
- it "should raise error if :all given and text is invisible." do
200
- @session.visit('/with_html')
201
- el = @session.find(:css, '#some-hidden-text', visible: false)
202
- expect do
203
- el.assert_no_text(:visible, 'hidden')
204
- end.to raise_error(Capybara::ExpectationNotMet, 'expected not to find text "hidden" in "Some of this text is not hidden"')
205
- end
206
-
207
- it "should be true if the text in the page doesn't match given regexp" do
208
- @session.visit('/with_html')
209
- @session.assert_no_text(/xxxxyzzz/)
210
- end
211
-
212
- context "with count" do
213
- it "should be true if the text occurs within the range given" do
214
- @session.visit('/with_count')
215
- expect(@session.assert_text('count', count: 2)).to eq(true)
216
- end
217
-
218
- it "should be false if the text occurs more or fewer times than range" do
219
- @session.visit('/with_html')
220
- expect do
221
- @session.find(:css, '.number').assert_text(/\d/, count: 1)
222
- end.to raise_error(Capybara::ExpectationNotMet, "expected to find text matching /\\d/ 1 time but found 2 times in \"42\"")
223
- end
224
- end
225
-
226
- context "with wait", requires: [:js] do
227
- it "should not find element if it appears after given wait duration" do
228
- @session.visit('/with_js')
229
- @session.click_link('Click me')
230
- @session.find(:css, '#reload-list').click
231
- @session.find(:css, '#the-list').assert_no_text('Foo Bar', wait: 0.3)
232
- end
233
- end
234
- end
File without changes
@@ -1,5 +0,0 @@
1
-
2
- <title>Test Title</title>
3
- <body>
4
- <svg><title>abcdefg</title></svg>
5
- </body>
@@ -1,127 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require "selenium-webdriver"
4
- require 'shared_selenium_session'
5
- require 'rspec/shared_spec_matchers'
6
-
7
- browser_options = ::Selenium::WebDriver::Firefox::Options.new()
8
- browser_options.args << '--headless' if ENV['HEADLESS']
9
- browser_options.add_preference 'dom.file.createInChild', true
10
- # browser_options.add_option("log", {"level": "trace"})
11
-
12
- Capybara.register_driver :selenium_marionette do |app|
13
- # ::Selenium::WebDriver.logger.level = "debug"
14
- Capybara::Selenium::Driver.new(
15
- app,
16
- browser: :firefox,
17
- desired_capabilities: {marionette: true, 'moz:webdriverClick': true},
18
- options: browser_options
19
- # Get a trace level log from geckodriver
20
- # :driver_opts => { args: ['-vv'] }
21
- )
22
- end
23
-
24
- Capybara.register_driver :selenium_marionette_clear_storage do |app|
25
- Capybara::Selenium::Driver.new(
26
- app,
27
- browser: :firefox,
28
- desired_capabilities: {marionette: true},
29
- clear_local_storage: true,
30
- clear_session_storage: true,
31
- options: browser_options
32
- )
33
- end
34
-
35
-
36
-
37
- module TestSessions
38
- SeleniumMarionette = Capybara::Session.new(:selenium_marionette, TestApp)
39
- end
40
-
41
- skipped_tests = [
42
- :response_headers,
43
- :status_code,
44
- :trigger
45
- ]
46
- skipped_tests << :windows if ENV['TRAVIS'] && ENV['SKIP_WINDOW']
47
-
48
- Capybara::SpecHelper.run_specs TestSessions::SeleniumMarionette, "selenium", capybara_skip: skipped_tests
49
-
50
- RSpec.describe "Capybara::Session with firefox" do
51
- include Capybara::SpecHelper
52
- include_examples "Capybara::Session", TestSessions::SeleniumMarionette, :selenium_marionette
53
- include_examples Capybara::RSpecMatchers, TestSessions::SeleniumMarionette, :selenium_marionette
54
- end
55
-
56
- RSpec.describe Capybara::Selenium::Driver do
57
- before do
58
- @driver = Capybara::Selenium::Driver.new(TestApp, browser: :firefox, options: browser_options)
59
- end
60
-
61
- describe '#quit' do
62
- it "should reset browser when quit" do
63
- expect(@driver.browser).to be
64
- @driver.quit
65
- #access instance variable directly so we don't create a new browser instance
66
- expect(@driver.instance_variable_get(:@browser)).to be_nil
67
- end
68
-
69
- context "with errors" do
70
- before do
71
- @original_browser = @driver.browser
72
- end
73
- after do
74
- # Ensure browser is actually quit so we don't leave hanging processe
75
- RSpec::Mocks.space.proxy_for(@original_browser).reset
76
- @original_browser.quit
77
- end
78
-
79
- it "warns UnknownError returned during quit because the browser is probably already gone" do
80
- expect_any_instance_of(Capybara::Selenium::Driver).to receive(:warn).with(/random message/)
81
- allow(@driver.browser).to(
82
- receive(:quit)
83
- .and_raise(Selenium::WebDriver::Error::UnknownError, "random message")
84
- )
85
-
86
- expect { @driver.quit }.not_to raise_error
87
- expect(@driver.instance_variable_get(:@browser)).to be_nil
88
- end
89
-
90
- it "ignores silenced UnknownError returned during quit because the browser is almost definitely already gone" do
91
- expect_any_instance_of(Capybara::Selenium::Driver).not_to receive(:warn)
92
- allow(@driver.browser).to(
93
- receive(:quit)
94
- .and_raise(Selenium::WebDriver::Error::UnknownError, "Error communicating with the remote browser")
95
- )
96
-
97
- expect { @driver.quit }.not_to raise_error
98
- expect(@driver.instance_variable_get(:@browser)).to be_nil
99
- end
100
- end
101
- end
102
-
103
- context "storage" do
104
- describe "#reset!" do
105
- it "does not clear either storage by default" do
106
- @session = TestSessions::SeleniumMarionette
107
- @session.visit('/with_js')
108
- @session.find(:css, '#set-storage').click
109
- @session.reset!
110
- @session.visit('/with_js')
111
- expect(@session.driver.browser.local_storage.keys).not_to be_empty
112
- expect(@session.driver.browser.session_storage.keys).not_to be_empty
113
- end
114
-
115
- it "clears storage when set" do
116
- @session = Capybara::Session.new(:selenium_marionette_clear_storage, TestApp)
117
- @session.visit('/with_js')
118
- @session.find(:css, '#set-storage').click
119
- @session.reset!
120
- @session.visit('/with_js')
121
- expect(@session.driver.browser.local_storage.keys).to be_empty
122
- expect(@session.driver.browser.session_storage.keys).to be_empty
123
- end
124
- end
125
- end
126
- end
127
-