mega-max-rb 0.0.1

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 (319) hide show
  1. checksums.yaml +7 -0
  2. data/capybara-3.40.0/History.md +2043 -0
  3. data/capybara-3.40.0/License.txt +22 -0
  4. data/capybara-3.40.0/README.md +1264 -0
  5. data/capybara-3.40.0/lib/capybara/config.rb +104 -0
  6. data/capybara-3.40.0/lib/capybara/cucumber.rb +27 -0
  7. data/capybara-3.40.0/lib/capybara/driver/base.rb +178 -0
  8. data/capybara-3.40.0/lib/capybara/driver/node.rb +143 -0
  9. data/capybara-3.40.0/lib/capybara/dsl.rb +59 -0
  10. data/capybara-3.40.0/lib/capybara/helpers.rb +127 -0
  11. data/capybara-3.40.0/lib/capybara/minitest/spec.rb +279 -0
  12. data/capybara-3.40.0/lib/capybara/minitest.rb +398 -0
  13. data/capybara-3.40.0/lib/capybara/node/actions.rb +420 -0
  14. data/capybara-3.40.0/lib/capybara/node/base.rb +144 -0
  15. data/capybara-3.40.0/lib/capybara/node/document.rb +48 -0
  16. data/capybara-3.40.0/lib/capybara/node/document_matchers.rb +67 -0
  17. data/capybara-3.40.0/lib/capybara/node/element.rb +613 -0
  18. data/capybara-3.40.0/lib/capybara/node/finders.rb +335 -0
  19. data/capybara-3.40.0/lib/capybara/node/matchers.rb +908 -0
  20. data/capybara-3.40.0/lib/capybara/node/simple.rb +216 -0
  21. data/capybara-3.40.0/lib/capybara/node/whitespace_normalizer.rb +81 -0
  22. data/capybara-3.40.0/lib/capybara/queries/active_element_query.rb +18 -0
  23. data/capybara-3.40.0/lib/capybara/queries/ancestor_query.rb +28 -0
  24. data/capybara-3.40.0/lib/capybara/queries/base_query.rb +106 -0
  25. data/capybara-3.40.0/lib/capybara/queries/current_path_query.rb +61 -0
  26. data/capybara-3.40.0/lib/capybara/queries/match_query.rb +26 -0
  27. data/capybara-3.40.0/lib/capybara/queries/selector_query.rb +761 -0
  28. data/capybara-3.40.0/lib/capybara/queries/sibling_query.rb +27 -0
  29. data/capybara-3.40.0/lib/capybara/queries/style_query.rb +45 -0
  30. data/capybara-3.40.0/lib/capybara/queries/text_query.rb +116 -0
  31. data/capybara-3.40.0/lib/capybara/queries/title_query.rb +39 -0
  32. data/capybara-3.40.0/lib/capybara/rack_test/browser.rb +200 -0
  33. data/capybara-3.40.0/lib/capybara/rack_test/css_handlers.rb +13 -0
  34. data/capybara-3.40.0/lib/capybara/rack_test/driver.rb +110 -0
  35. data/capybara-3.40.0/lib/capybara/rack_test/errors.rb +6 -0
  36. data/capybara-3.40.0/lib/capybara/rack_test/form.rb +149 -0
  37. data/capybara-3.40.0/lib/capybara/rack_test/node.rb +324 -0
  38. data/capybara-3.40.0/lib/capybara/rails.rb +16 -0
  39. data/capybara-3.40.0/lib/capybara/registration_container.rb +41 -0
  40. data/capybara-3.40.0/lib/capybara/registrations/drivers.rb +42 -0
  41. data/capybara-3.40.0/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  42. data/capybara-3.40.0/lib/capybara/registrations/servers.rb +66 -0
  43. data/capybara-3.40.0/lib/capybara/result.rb +186 -0
  44. data/capybara-3.40.0/lib/capybara/rspec/features.rb +23 -0
  45. data/capybara-3.40.0/lib/capybara/rspec/matcher_proxies.rb +82 -0
  46. data/capybara-3.40.0/lib/capybara/rspec/matchers/base.rb +113 -0
  47. data/capybara-3.40.0/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  48. data/capybara-3.40.0/lib/capybara/rspec/matchers/compound.rb +88 -0
  49. data/capybara-3.40.0/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  50. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  51. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  52. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_selector.rb +69 -0
  53. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  54. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_text.rb +33 -0
  55. data/capybara-3.40.0/lib/capybara/rspec/matchers/have_title.rb +29 -0
  56. data/capybara-3.40.0/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  57. data/capybara-3.40.0/lib/capybara/rspec/matchers/match_style.rb +43 -0
  58. data/capybara-3.40.0/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  59. data/capybara-3.40.0/lib/capybara/rspec/matchers.rb +207 -0
  60. data/capybara-3.40.0/lib/capybara/rspec.rb +31 -0
  61. data/capybara-3.40.0/lib/capybara/selector/builders/css_builder.rb +84 -0
  62. data/capybara-3.40.0/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  63. data/capybara-3.40.0/lib/capybara/selector/css.rb +102 -0
  64. data/capybara-3.40.0/lib/capybara/selector/definition/button.rb +68 -0
  65. data/capybara-3.40.0/lib/capybara/selector/definition/checkbox.rb +26 -0
  66. data/capybara-3.40.0/lib/capybara/selector/definition/css.rb +10 -0
  67. data/capybara-3.40.0/lib/capybara/selector/definition/datalist_input.rb +35 -0
  68. data/capybara-3.40.0/lib/capybara/selector/definition/datalist_option.rb +25 -0
  69. data/capybara-3.40.0/lib/capybara/selector/definition/element.rb +28 -0
  70. data/capybara-3.40.0/lib/capybara/selector/definition/field.rb +40 -0
  71. data/capybara-3.40.0/lib/capybara/selector/definition/fieldset.rb +14 -0
  72. data/capybara-3.40.0/lib/capybara/selector/definition/file_field.rb +13 -0
  73. data/capybara-3.40.0/lib/capybara/selector/definition/fillable_field.rb +33 -0
  74. data/capybara-3.40.0/lib/capybara/selector/definition/frame.rb +17 -0
  75. data/capybara-3.40.0/lib/capybara/selector/definition/id.rb +6 -0
  76. data/capybara-3.40.0/lib/capybara/selector/definition/label.rb +62 -0
  77. data/capybara-3.40.0/lib/capybara/selector/definition/link.rb +55 -0
  78. data/capybara-3.40.0/lib/capybara/selector/definition/link_or_button.rb +16 -0
  79. data/capybara-3.40.0/lib/capybara/selector/definition/option.rb +27 -0
  80. data/capybara-3.40.0/lib/capybara/selector/definition/radio_button.rb +27 -0
  81. data/capybara-3.40.0/lib/capybara/selector/definition/select.rb +81 -0
  82. data/capybara-3.40.0/lib/capybara/selector/definition/table.rb +109 -0
  83. data/capybara-3.40.0/lib/capybara/selector/definition/table_row.rb +21 -0
  84. data/capybara-3.40.0/lib/capybara/selector/definition/xpath.rb +5 -0
  85. data/capybara-3.40.0/lib/capybara/selector/definition.rb +280 -0
  86. data/capybara-3.40.0/lib/capybara/selector/filter.rb +5 -0
  87. data/capybara-3.40.0/lib/capybara/selector/filter_set.rb +121 -0
  88. data/capybara-3.40.0/lib/capybara/selector/filters/base.rb +77 -0
  89. data/capybara-3.40.0/lib/capybara/selector/filters/expression_filter.rb +22 -0
  90. data/capybara-3.40.0/lib/capybara/selector/filters/locator_filter.rb +29 -0
  91. data/capybara-3.40.0/lib/capybara/selector/filters/node_filter.rb +31 -0
  92. data/capybara-3.40.0/lib/capybara/selector/regexp_disassembler.rb +211 -0
  93. data/capybara-3.40.0/lib/capybara/selector/selector.rb +159 -0
  94. data/capybara-3.40.0/lib/capybara/selector/xpath_extensions.rb +17 -0
  95. data/capybara-3.40.0/lib/capybara/selector.rb +494 -0
  96. data/capybara-3.40.0/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  97. data/capybara-3.40.0/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  98. data/capybara-3.40.0/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  99. data/capybara-3.40.0/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  100. data/capybara-3.40.0/lib/capybara/selenium/driver.rb +517 -0
  101. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  102. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
  103. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
  104. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  105. data/capybara-3.40.0/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  106. data/capybara-3.40.0/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  107. data/capybara-3.40.0/lib/capybara/selenium/extensions/find.rb +110 -0
  108. data/capybara-3.40.0/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
  109. data/capybara-3.40.0/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  110. data/capybara-3.40.0/lib/capybara/selenium/extensions/scroll.rb +76 -0
  111. data/capybara-3.40.0/lib/capybara/selenium/node.rb +636 -0
  112. data/capybara-3.40.0/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
  113. data/capybara-3.40.0/lib/capybara/selenium/nodes/edge_node.rb +110 -0
  114. data/capybara-3.40.0/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  115. data/capybara-3.40.0/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  116. data/capybara-3.40.0/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  117. data/capybara-3.40.0/lib/capybara/selenium/patches/atoms.rb +18 -0
  118. data/capybara-3.40.0/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  119. data/capybara-3.40.0/lib/capybara/selenium/patches/logs.rb +45 -0
  120. data/capybara-3.40.0/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  121. data/capybara-3.40.0/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  122. data/capybara-3.40.0/lib/capybara/server/animation_disabler.rb +80 -0
  123. data/capybara-3.40.0/lib/capybara/server/checker.rb +44 -0
  124. data/capybara-3.40.0/lib/capybara/server/middleware.rb +71 -0
  125. data/capybara-3.40.0/lib/capybara/server.rb +126 -0
  126. data/capybara-3.40.0/lib/capybara/session/config.rb +128 -0
  127. data/capybara-3.40.0/lib/capybara/session/matchers.rb +87 -0
  128. data/capybara-3.40.0/lib/capybara/session.rb +951 -0
  129. data/capybara-3.40.0/lib/capybara/spec/fixtures/another_test_file.txt +1 -0
  130. data/capybara-3.40.0/lib/capybara/spec/fixtures/capybara.jpg +3 -0
  131. data/capybara-3.40.0/lib/capybara/spec/fixtures/no_extension +1 -0
  132. data/capybara-3.40.0/lib/capybara/spec/fixtures/test_file.txt +1 -0
  133. data/capybara-3.40.0/lib/capybara/spec/public/jquery-ui.js +13 -0
  134. data/capybara-3.40.0/lib/capybara/spec/public/jquery.js +5 -0
  135. data/capybara-3.40.0/lib/capybara/spec/public/offset.js +6 -0
  136. data/capybara-3.40.0/lib/capybara/spec/public/test.js +284 -0
  137. data/capybara-3.40.0/lib/capybara/spec/session/accept_alert_spec.rb +81 -0
  138. data/capybara-3.40.0/lib/capybara/spec/session/accept_confirm_spec.rb +32 -0
  139. data/capybara-3.40.0/lib/capybara/spec/session/accept_prompt_spec.rb +78 -0
  140. data/capybara-3.40.0/lib/capybara/spec/session/active_element_spec.rb +31 -0
  141. data/capybara-3.40.0/lib/capybara/spec/session/all_spec.rb +274 -0
  142. data/capybara-3.40.0/lib/capybara/spec/session/ancestor_spec.rb +88 -0
  143. data/capybara-3.40.0/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
  144. data/capybara-3.40.0/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
  145. data/capybara-3.40.0/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  146. data/capybara-3.40.0/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  147. data/capybara-3.40.0/lib/capybara/spec/session/assert_text_spec.rb +258 -0
  148. data/capybara-3.40.0/lib/capybara/spec/session/assert_title_spec.rb +93 -0
  149. data/capybara-3.40.0/lib/capybara/spec/session/attach_file_spec.rb +222 -0
  150. data/capybara-3.40.0/lib/capybara/spec/session/body_spec.rb +23 -0
  151. data/capybara-3.40.0/lib/capybara/spec/session/check_spec.rb +251 -0
  152. data/capybara-3.40.0/lib/capybara/spec/session/choose_spec.rb +127 -0
  153. data/capybara-3.40.0/lib/capybara/spec/session/click_button_spec.rb +517 -0
  154. data/capybara-3.40.0/lib/capybara/spec/session/click_link_or_button_spec.rb +138 -0
  155. data/capybara-3.40.0/lib/capybara/spec/session/click_link_spec.rb +240 -0
  156. data/capybara-3.40.0/lib/capybara/spec/session/current_scope_spec.rb +31 -0
  157. data/capybara-3.40.0/lib/capybara/spec/session/current_url_spec.rb +125 -0
  158. data/capybara-3.40.0/lib/capybara/spec/session/dismiss_confirm_spec.rb +36 -0
  159. data/capybara-3.40.0/lib/capybara/spec/session/dismiss_prompt_spec.rb +21 -0
  160. data/capybara-3.40.0/lib/capybara/spec/session/element/assert_match_selector_spec.rb +38 -0
  161. data/capybara-3.40.0/lib/capybara/spec/session/element/match_css_spec.rb +31 -0
  162. data/capybara-3.40.0/lib/capybara/spec/session/element/match_xpath_spec.rb +25 -0
  163. data/capybara-3.40.0/lib/capybara/spec/session/element/matches_selector_spec.rb +120 -0
  164. data/capybara-3.40.0/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
  165. data/capybara-3.40.0/lib/capybara/spec/session/evaluate_script_spec.rb +49 -0
  166. data/capybara-3.40.0/lib/capybara/spec/session/execute_script_spec.rb +28 -0
  167. data/capybara-3.40.0/lib/capybara/spec/session/fill_in_spec.rb +292 -0
  168. data/capybara-3.40.0/lib/capybara/spec/session/find_button_spec.rb +74 -0
  169. data/capybara-3.40.0/lib/capybara/spec/session/find_by_id_spec.rb +33 -0
  170. data/capybara-3.40.0/lib/capybara/spec/session/find_field_spec.rb +113 -0
  171. data/capybara-3.40.0/lib/capybara/spec/session/find_link_spec.rb +80 -0
  172. data/capybara-3.40.0/lib/capybara/spec/session/find_spec.rb +545 -0
  173. data/capybara-3.40.0/lib/capybara/spec/session/first_spec.rb +156 -0
  174. data/capybara-3.40.0/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
  175. data/capybara-3.40.0/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
  176. data/capybara-3.40.0/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
  177. data/capybara-3.40.0/lib/capybara/spec/session/frame/within_frame_spec.rb +114 -0
  178. data/capybara-3.40.0/lib/capybara/spec/session/go_back_spec.rb +12 -0
  179. data/capybara-3.40.0/lib/capybara/spec/session/go_forward_spec.rb +14 -0
  180. data/capybara-3.40.0/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
  181. data/capybara-3.40.0/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  182. data/capybara-3.40.0/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  183. data/capybara-3.40.0/lib/capybara/spec/session/has_button_spec.rb +150 -0
  184. data/capybara-3.40.0/lib/capybara/spec/session/has_css_spec.rb +375 -0
  185. data/capybara-3.40.0/lib/capybara/spec/session/has_current_path_spec.rb +151 -0
  186. data/capybara-3.40.0/lib/capybara/spec/session/has_element_spec.rb +47 -0
  187. data/capybara-3.40.0/lib/capybara/spec/session/has_field_spec.rb +389 -0
  188. data/capybara-3.40.0/lib/capybara/spec/session/has_link_spec.rb +79 -0
  189. data/capybara-3.40.0/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
  190. data/capybara-3.40.0/lib/capybara/spec/session/has_select_spec.rb +316 -0
  191. data/capybara-3.40.0/lib/capybara/spec/session/has_selector_spec.rb +217 -0
  192. data/capybara-3.40.0/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  193. data/capybara-3.40.0/lib/capybara/spec/session/has_table_spec.rb +209 -0
  194. data/capybara-3.40.0/lib/capybara/spec/session/has_text_spec.rb +375 -0
  195. data/capybara-3.40.0/lib/capybara/spec/session/has_title_spec.rb +71 -0
  196. data/capybara-3.40.0/lib/capybara/spec/session/has_xpath_spec.rb +149 -0
  197. data/capybara-3.40.0/lib/capybara/spec/session/headers_spec.rb +8 -0
  198. data/capybara-3.40.0/lib/capybara/spec/session/html_spec.rb +47 -0
  199. data/capybara-3.40.0/lib/capybara/spec/session/matches_style_spec.rb +37 -0
  200. data/capybara-3.40.0/lib/capybara/spec/session/node_spec.rb +1399 -0
  201. data/capybara-3.40.0/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  202. data/capybara-3.40.0/lib/capybara/spec/session/refresh_spec.rb +34 -0
  203. data/capybara-3.40.0/lib/capybara/spec/session/reset_session_spec.rb +161 -0
  204. data/capybara-3.40.0/lib/capybara/spec/session/response_code_spec.rb +8 -0
  205. data/capybara-3.40.0/lib/capybara/spec/session/save_and_open_page_spec.rb +21 -0
  206. data/capybara-3.40.0/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +43 -0
  207. data/capybara-3.40.0/lib/capybara/spec/session/save_page_spec.rb +110 -0
  208. data/capybara-3.40.0/lib/capybara/spec/session/save_screenshot_spec.rb +55 -0
  209. data/capybara-3.40.0/lib/capybara/spec/session/screenshot_spec.rb +18 -0
  210. data/capybara-3.40.0/lib/capybara/spec/session/scroll_spec.rb +119 -0
  211. data/capybara-3.40.0/lib/capybara/spec/session/select_spec.rb +229 -0
  212. data/capybara-3.40.0/lib/capybara/spec/session/selectors_spec.rb +98 -0
  213. data/capybara-3.40.0/lib/capybara/spec/session/sibling_spec.rb +52 -0
  214. data/capybara-3.40.0/lib/capybara/spec/session/text_spec.rb +74 -0
  215. data/capybara-3.40.0/lib/capybara/spec/session/title_spec.rb +29 -0
  216. data/capybara-3.40.0/lib/capybara/spec/session/uncheck_spec.rb +100 -0
  217. data/capybara-3.40.0/lib/capybara/spec/session/unselect_spec.rb +116 -0
  218. data/capybara-3.40.0/lib/capybara/spec/session/visit_spec.rb +224 -0
  219. data/capybara-3.40.0/lib/capybara/spec/session/window/become_closed_spec.rb +89 -0
  220. data/capybara-3.40.0/lib/capybara/spec/session/window/current_window_spec.rb +28 -0
  221. data/capybara-3.40.0/lib/capybara/spec/session/window/open_new_window_spec.rb +31 -0
  222. data/capybara-3.40.0/lib/capybara/spec/session/window/switch_to_window_spec.rb +132 -0
  223. data/capybara-3.40.0/lib/capybara/spec/session/window/window_opened_by_spec.rb +99 -0
  224. data/capybara-3.40.0/lib/capybara/spec/session/window/window_spec.rb +203 -0
  225. data/capybara-3.40.0/lib/capybara/spec/session/window/windows_spec.rb +34 -0
  226. data/capybara-3.40.0/lib/capybara/spec/session/window/within_window_spec.rb +157 -0
  227. data/capybara-3.40.0/lib/capybara/spec/session/within_spec.rb +212 -0
  228. data/capybara-3.40.0/lib/capybara/spec/spec_helper.rb +141 -0
  229. data/capybara-3.40.0/lib/capybara/spec/test_app.rb +305 -0
  230. data/capybara-3.40.0/lib/capybara/spec/views/animated.erb +49 -0
  231. data/capybara-3.40.0/lib/capybara/spec/views/buttons.erb +5 -0
  232. data/capybara-3.40.0/lib/capybara/spec/views/fieldsets.erb +30 -0
  233. data/capybara-3.40.0/lib/capybara/spec/views/form.erb +738 -0
  234. data/capybara-3.40.0/lib/capybara/spec/views/frame_child.erb +18 -0
  235. data/capybara-3.40.0/lib/capybara/spec/views/frame_one.erb +10 -0
  236. data/capybara-3.40.0/lib/capybara/spec/views/frame_parent.erb +9 -0
  237. data/capybara-3.40.0/lib/capybara/spec/views/frame_two.erb +9 -0
  238. data/capybara-3.40.0/lib/capybara/spec/views/header_links.erb +8 -0
  239. data/capybara-3.40.0/lib/capybara/spec/views/host_links.erb +13 -0
  240. data/capybara-3.40.0/lib/capybara/spec/views/initial_alert.erb +11 -0
  241. data/capybara-3.40.0/lib/capybara/spec/views/layout.erb +10 -0
  242. data/capybara-3.40.0/lib/capybara/spec/views/obscured.erb +47 -0
  243. data/capybara-3.40.0/lib/capybara/spec/views/offset.erb +33 -0
  244. data/capybara-3.40.0/lib/capybara/spec/views/path.erb +13 -0
  245. data/capybara-3.40.0/lib/capybara/spec/views/popup_one.erb +9 -0
  246. data/capybara-3.40.0/lib/capybara/spec/views/popup_two.erb +9 -0
  247. data/capybara-3.40.0/lib/capybara/spec/views/postback.erb +14 -0
  248. data/capybara-3.40.0/lib/capybara/spec/views/react.erb +45 -0
  249. data/capybara-3.40.0/lib/capybara/spec/views/scroll.erb +21 -0
  250. data/capybara-3.40.0/lib/capybara/spec/views/spatial.erb +31 -0
  251. data/capybara-3.40.0/lib/capybara/spec/views/tables.erb +130 -0
  252. data/capybara-3.40.0/lib/capybara/spec/views/with_animation.erb +81 -0
  253. data/capybara-3.40.0/lib/capybara/spec/views/with_base_tag.erb +11 -0
  254. data/capybara-3.40.0/lib/capybara/spec/views/with_count.erb +8 -0
  255. data/capybara-3.40.0/lib/capybara/spec/views/with_dragula.erb +24 -0
  256. data/capybara-3.40.0/lib/capybara/spec/views/with_fixed_header_footer.erb +18 -0
  257. data/capybara-3.40.0/lib/capybara/spec/views/with_hover.erb +24 -0
  258. data/capybara-3.40.0/lib/capybara/spec/views/with_hover1.erb +10 -0
  259. data/capybara-3.40.0/lib/capybara/spec/views/with_html.erb +210 -0
  260. data/capybara-3.40.0/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  261. data/capybara-3.40.0/lib/capybara/spec/views/with_html_entities.erb +2 -0
  262. data/capybara-3.40.0/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  263. data/capybara-3.40.0/lib/capybara/spec/views/with_js.erb +162 -0
  264. data/capybara-3.40.0/lib/capybara/spec/views/with_jstree.erb +26 -0
  265. data/capybara-3.40.0/lib/capybara/spec/views/with_namespace.erb +21 -0
  266. data/capybara-3.40.0/lib/capybara/spec/views/with_scope.erb +42 -0
  267. data/capybara-3.40.0/lib/capybara/spec/views/with_scope_other.erb +6 -0
  268. data/capybara-3.40.0/lib/capybara/spec/views/with_shadow.erb +31 -0
  269. data/capybara-3.40.0/lib/capybara/spec/views/with_simple_html.erb +2 -0
  270. data/capybara-3.40.0/lib/capybara/spec/views/with_slow_unload.erb +18 -0
  271. data/capybara-3.40.0/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  272. data/capybara-3.40.0/lib/capybara/spec/views/with_unload_alert.erb +15 -0
  273. data/capybara-3.40.0/lib/capybara/spec/views/with_windows.erb +54 -0
  274. data/capybara-3.40.0/lib/capybara/spec/views/within_frames.erb +15 -0
  275. data/capybara-3.40.0/lib/capybara/version.rb +5 -0
  276. data/capybara-3.40.0/lib/capybara/window.rb +142 -0
  277. data/capybara-3.40.0/lib/capybara.rb +521 -0
  278. data/capybara-3.40.0/spec/basic_node_spec.rb +168 -0
  279. data/capybara-3.40.0/spec/capybara_spec.rb +124 -0
  280. data/capybara-3.40.0/spec/counter_spec.rb +35 -0
  281. data/capybara-3.40.0/spec/css_builder_spec.rb +101 -0
  282. data/capybara-3.40.0/spec/css_splitter_spec.rb +38 -0
  283. data/capybara-3.40.0/spec/dsl_spec.rb +291 -0
  284. data/capybara-3.40.0/spec/filter_set_spec.rb +46 -0
  285. data/capybara-3.40.0/spec/fixtures/capybara.csv +1 -0
  286. data/capybara-3.40.0/spec/fixtures/certificate.pem +25 -0
  287. data/capybara-3.40.0/spec/fixtures/key.pem +27 -0
  288. data/capybara-3.40.0/spec/fixtures/selenium_driver_rspec_failure.rb +13 -0
  289. data/capybara-3.40.0/spec/fixtures/selenium_driver_rspec_success.rb +13 -0
  290. data/capybara-3.40.0/spec/minitest_spec.rb +175 -0
  291. data/capybara-3.40.0/spec/minitest_spec_spec.rb +166 -0
  292. data/capybara-3.40.0/spec/per_session_config_spec.rb +68 -0
  293. data/capybara-3.40.0/spec/rack_test_spec.rb +297 -0
  294. data/capybara-3.40.0/spec/regexp_dissassembler_spec.rb +250 -0
  295. data/capybara-3.40.0/spec/result_spec.rb +202 -0
  296. data/capybara-3.40.0/spec/rspec/features_spec.rb +101 -0
  297. data/capybara-3.40.0/spec/rspec/scenarios_spec.rb +23 -0
  298. data/capybara-3.40.0/spec/rspec/shared_spec_matchers.rb +983 -0
  299. data/capybara-3.40.0/spec/rspec/views_spec.rb +14 -0
  300. data/capybara-3.40.0/spec/rspec_matchers_spec.rb +87 -0
  301. data/capybara-3.40.0/spec/rspec_spec.rb +149 -0
  302. data/capybara-3.40.0/spec/sauce_spec_chrome.rb +43 -0
  303. data/capybara-3.40.0/spec/selector_spec.rb +528 -0
  304. data/capybara-3.40.0/spec/selenium_spec_chrome.rb +209 -0
  305. data/capybara-3.40.0/spec/selenium_spec_chrome_remote.rb +96 -0
  306. data/capybara-3.40.0/spec/selenium_spec_edge.rb +60 -0
  307. data/capybara-3.40.0/spec/selenium_spec_firefox.rb +228 -0
  308. data/capybara-3.40.0/spec/selenium_spec_firefox_remote.rb +94 -0
  309. data/capybara-3.40.0/spec/selenium_spec_ie.rb +149 -0
  310. data/capybara-3.40.0/spec/selenium_spec_safari.rb +162 -0
  311. data/capybara-3.40.0/spec/server_spec.rb +315 -0
  312. data/capybara-3.40.0/spec/session_spec.rb +91 -0
  313. data/capybara-3.40.0/spec/shared_selenium_node.rb +79 -0
  314. data/capybara-3.40.0/spec/shared_selenium_session.rb +566 -0
  315. data/capybara-3.40.0/spec/spec_helper.rb +133 -0
  316. data/capybara-3.40.0/spec/whitespace_normalizer_spec.rb +54 -0
  317. data/capybara-3.40.0/spec/xpath_builder_spec.rb +93 -0
  318. data/mega-max-rb.gemspec +12 -0
  319. metadata +358 -0
@@ -0,0 +1,566 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'selenium-webdriver'
5
+
6
+ RSpec.shared_examples 'Capybara::Session' do |session, mode|
7
+ let(:session) { session }
8
+
9
+ context 'with selenium driver' do
10
+ describe '#driver' do
11
+ it 'should be a selenium driver' do
12
+ expect(session.driver).to be_an_instance_of(Capybara::Selenium::Driver)
13
+ end
14
+ end
15
+
16
+ describe '#mode' do
17
+ it 'should remember the mode' do
18
+ expect(session.mode).to eq(mode)
19
+ end
20
+ end
21
+
22
+ describe '#reset!' do
23
+ it 'freshly reset session should not be touched' do
24
+ session.instance_variable_set(:@touched, true)
25
+ session.reset!
26
+ expect(session.instance_variable_get(:@touched)).to be false
27
+ end
28
+ end
29
+
30
+ describe 'exit codes' do
31
+ let(:env) { { 'SELENIUM_BROWSER' => session.driver.options[:browser].to_s } }
32
+ let!(:orig_dir) { Dir.getwd }
33
+
34
+ before do
35
+ Dir.chdir(File.join(File.dirname(__FILE__), '..'))
36
+ end
37
+
38
+ after do
39
+ Dir.chdir(orig_dir)
40
+ end
41
+
42
+ it 'should have return code 1 when running selenium_driver_rspec_failure.rb' do
43
+ skip 'only setup for local non-headless' if headless_or_remote?
44
+ skip 'Not setup for edge' if edge?(session)
45
+
46
+ system(env, 'rspec spec/fixtures/selenium_driver_rspec_failure.rb', out: File::NULL, err: File::NULL)
47
+ expect($CHILD_STATUS.exitstatus).to eq(1)
48
+ end
49
+
50
+ it 'should have return code 0 when running selenium_driver_rspec_success.rb' do
51
+ skip 'only setup for local non-headless' if headless_or_remote?
52
+ skip 'Not setup for edge' if edge?(session)
53
+
54
+ system(env, 'rspec spec/fixtures/selenium_driver_rspec_success.rb', out: File::NULL, err: File::NULL)
55
+ expect($CHILD_STATUS.exitstatus).to eq(0)
56
+ end
57
+ end
58
+
59
+ describe '#accept_alert', requires: [:modals] do
60
+ it 'supports a blockless mode' do
61
+ session.visit('/with_js')
62
+ session.click_link('Open alert')
63
+ session.accept_alert
64
+ expect { session.driver.browser.switch_to.alert }.to raise_error(session.driver.send(:modal_error))
65
+ end
66
+
67
+ it 'can be called before visiting' do
68
+ session.accept_alert 'Initial alert' do
69
+ session.visit('/initial_alert')
70
+ end
71
+ expect(session).to have_text('Initial alert page')
72
+ end
73
+ end
74
+
75
+ describe '#fill_in_with empty string and no options' do
76
+ it 'should trigger change when clearing a field' do
77
+ session.visit('/with_js')
78
+ session.fill_in('with_change_event', with: '')
79
+ # click outside the field to trigger the change event
80
+ session.find(:css, 'body').click
81
+ expect(session).to have_selector(:css, '.change_event_triggered', match: :one)
82
+ end
83
+ end
84
+
85
+ describe '#fill_in with { :clear => :backspace } fill_option', requires: [:js] do
86
+ before do
87
+ # Firefox has an issue with change events if the main window doesn't think it's focused
88
+ session.execute_script('window.focus()')
89
+ end
90
+
91
+ it 'should fill in a field, replacing an existing value' do
92
+ session.visit('/form')
93
+ session.fill_in('form_first_name',
94
+ with: 'Harry',
95
+ fill_options: { clear: :backspace })
96
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq('Harry')
97
+ end
98
+
99
+ it 'should fill in a field, replacing an existing value, even with caret position' do
100
+ session.visit('/form')
101
+ session.find(:css, '#form_first_name').execute_script <<-JS
102
+ this.focus();
103
+ this.setSelectionRange(0, 0);
104
+ JS
105
+
106
+ session.fill_in('form_first_name',
107
+ with: 'Harry',
108
+ fill_options: { clear: :backspace })
109
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq('Harry')
110
+ end
111
+
112
+ it 'should fill in if the option is set via global option' do
113
+ Capybara.default_set_options = { clear: :backspace }
114
+ session.visit('/form')
115
+ session.fill_in('form_first_name', with: 'Thomas')
116
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq('Thomas')
117
+ end
118
+
119
+ it 'should only trigger onchange once' do
120
+ session.visit('/with_js')
121
+ sleep 2 if safari?(session) # Safari needs a delay (to load event handlers maybe ???)
122
+ session.fill_in('with_change_event',
123
+ with: 'some value',
124
+ fill_options: { clear: :backspace })
125
+ # click outside the field to trigger the change event
126
+ session.find(:css, '#with_focus_event').click
127
+ expect(session.find(:css, '.change_event_triggered', match: :one, wait: 5)).to have_text 'some value'
128
+ end
129
+
130
+ it 'should trigger change when clearing field' do
131
+ session.visit('/with_js')
132
+ session.fill_in('with_change_event',
133
+ with: '',
134
+ fill_options: { clear: :backspace })
135
+ # click outside the field to trigger the change event
136
+ session.find(:css, '#with_focus_event').click
137
+ expect(session).to have_selector(:css, '.change_event_triggered', match: :one, wait: 5)
138
+ end
139
+
140
+ it 'should trigger input event field_value.length times' do
141
+ session.visit('/with_js')
142
+ session.fill_in('with_change_event',
143
+ with: '',
144
+ fill_options: { clear: :backspace })
145
+ # click outside the field to trigger the change event
146
+ # session.find(:css, 'body').click
147
+ session.find(:css, 'h1', text: 'FooBar').click
148
+ expect(session).to have_xpath('//p[@class="input_event_triggered"]', count: 13)
149
+ end
150
+ end
151
+
152
+ describe '#fill_in with { clear: :none } fill_options' do
153
+ it 'should append to content in a field' do
154
+ pending 'Safari overwrites by default - need to figure out a workaround' if safari?(session)
155
+
156
+ session.visit('/form')
157
+ session.fill_in('form_first_name',
158
+ with: 'Harry',
159
+ fill_options: { clear: :none })
160
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq('JohnHarry')
161
+ end
162
+
163
+ it 'works with rapid fill' do
164
+ pending 'Safari overwrites by default - need to figure out a workaround' if safari?(session)
165
+
166
+ long_string = (0...60).map { |i| ((i % 26) + 65).chr }.join
167
+ session.visit('/form')
168
+ session.fill_in('form_first_name', with: long_string, fill_options: { clear: :none })
169
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq("John#{long_string}")
170
+ end
171
+ end
172
+
173
+ describe '#fill_in with Date' do
174
+ before do
175
+ session.visit('/form')
176
+ session.find(:css, '#form_date').execute_script <<-JS
177
+ window.capybara_formDateFiredEvents = [];
178
+ var fd = this;
179
+ ['focus', 'input', 'change'].forEach(function(eventType) {
180
+ fd.addEventListener(eventType, function() { window.capybara_formDateFiredEvents.push(eventType); });
181
+ });
182
+ JS
183
+ # work around weird FF issue where it would create an extra focus issue in some cases
184
+ session.find(:css, 'h1', text: 'Form').click
185
+ # session.find(:css, 'body').click
186
+ end
187
+
188
+ it 'should generate standard events on changing value' do
189
+ pending "IE 11 doesn't support date input type" if ie?(session)
190
+ session.fill_in('form_date', with: Date.today)
191
+ expect(session.evaluate_script('window.capybara_formDateFiredEvents')).to eq %w[focus input change]
192
+ end
193
+
194
+ it 'should not generate input and change events if the value is not changed' do
195
+ pending "IE 11 doesn't support date input type" if ie?(session)
196
+ session.fill_in('form_date', with: Date.today)
197
+ session.fill_in('form_date', with: Date.today)
198
+ # Chrome adds an extra focus for some reason - ok for now
199
+ expect(session.evaluate_script('window.capybara_formDateFiredEvents')).to eq(%w[focus input change])
200
+ end
201
+ end
202
+
203
+ describe '#fill_in with { clear: Array } fill_options' do
204
+ it 'should pass the array through to the element' do
205
+ # this is mainly for use with [[:control, 'a'], :backspace] - however since that is platform dependant I'm testing with something less useful
206
+ session.visit('/form')
207
+ session.fill_in('form_first_name',
208
+ with: 'Harry',
209
+ fill_options: { clear: [[:shift, 'abc'], :backspace] })
210
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq('JohnABHarry')
211
+ end
212
+ end
213
+
214
+ describe '#fill_in with Emoji' do
215
+ it 'sends emojis' do
216
+ session.visit('/form')
217
+ session.fill_in('form_first_name', with: 'a😀cd😴 🛌🏽🇵🇹 e🤾🏽‍♀️f')
218
+ expect(session.find(:fillable_field, 'form_first_name').value).to eq('a😀cd😴 🛌🏽🇵🇹 e🤾🏽‍♀️f')
219
+ end
220
+ end
221
+
222
+ describe '#send_keys' do
223
+ it 'defaults to sending keys to the active_element' do
224
+ session.visit('/form')
225
+
226
+ expect(session.active_element).to match_selector(:css, 'body')
227
+
228
+ session.send_keys(:tab)
229
+
230
+ expect(session.active_element).to match_selector(:css, '[tabindex="1"]')
231
+ end
232
+ end
233
+
234
+ describe '#path' do
235
+ it 'returns xpath' do
236
+ # this is here because it is testing for an XPath that is specific to the algorithm used in the selenium driver
237
+ session.visit('/path')
238
+ element = session.find(:link, 'Second Link')
239
+ expect(element.path).to eq('/HTML/BODY[1]/DIV[2]/A[1]')
240
+ end
241
+
242
+ it 'handles namespaces in xhtml' do
243
+ pending "IE 11 doesn't handle all XPath querys (namespace-uri, etc)" if ie?(session)
244
+ session.visit '/with_namespace'
245
+ rect = session.find(:css, 'div svg rect:first-of-type')
246
+ expect(rect.path).to eq("/HTML/BODY[1]/DIV[1]/*[local-name()='svg' and namespace-uri()='http://www.w3.org/2000/svg'][1]/*[local-name()='rect' and namespace-uri()='http://www.w3.org/2000/svg'][1]")
247
+ expect(session.find(:xpath, rect.path)).to eq rect
248
+ end
249
+
250
+ it 'handles default namespaces in html5' do
251
+ pending "IE 11 doesn't handle all XPath querys (namespace-uri, etc)" if ie?(session)
252
+ session.visit '/with_html5_svg'
253
+ rect = session.find(:css, 'div svg rect:first-of-type')
254
+ expect(rect.path).to eq("/HTML/BODY[1]/DIV[1]/*[local-name()='svg' and namespace-uri()='http://www.w3.org/2000/svg'][1]/*[local-name()='rect' and namespace-uri()='http://www.w3.org/2000/svg'][1]")
255
+ expect(session.find(:xpath, rect.path)).to eq rect
256
+ end
257
+
258
+ it 'handles case sensitive element names' do
259
+ pending "IE 11 doesn't handle all XPath querys (namespace-uri, etc)" if ie?(session)
260
+ session.visit '/with_namespace'
261
+ els = session.all(:css, 'div *', visible: :all)
262
+ expect { els.map(&:path) }.not_to raise_error
263
+ lg = session.find(:css, 'div linearGradient', visible: :all)
264
+ expect(session.find(:xpath, lg.path, visible: :all)).to eq lg
265
+ end
266
+ end
267
+
268
+ describe 'all with disappearing elements' do
269
+ it 'ignores stale elements in results' do
270
+ session.visit('/path')
271
+ elements = session.all(:link) { |_node| raise Selenium::WebDriver::Error::StaleElementReferenceError }
272
+ expect(elements.size).to eq 0
273
+ end
274
+ end
275
+
276
+ describe '#evaluate_script' do
277
+ it 'can return an element' do
278
+ session.visit('/form')
279
+ element = session.evaluate_script("document.getElementById('form_title')")
280
+ expect(element).to eq session.find(:id, 'form_title')
281
+ end
282
+
283
+ it 'returns a shadow root' do
284
+ session.visit('/with_shadow')
285
+ shadow = session.find(:css, '#shadow_host')
286
+ element = session.evaluate_script('arguments[0].shadowRoot', shadow)
287
+ expect(element).to be_instance_of(Capybara::Node::Element)
288
+ end
289
+
290
+ it 'can return arrays of nested elements' do
291
+ session.visit('/form')
292
+ elements = session.evaluate_script('document.querySelectorAll("#form_city option")')
293
+ expect(elements).to all(be_instance_of Capybara::Node::Element)
294
+ expect(elements).to eq session.find(:css, '#form_city').all(:css, 'option').to_a
295
+ end
296
+
297
+ it 'can return hashes with elements' do
298
+ session.visit('/form')
299
+ result = session.evaluate_script("{ a: document.getElementById('form_title'), b: {c: document.querySelectorAll('#form_city option')}}")
300
+ expect(result).to eq(
301
+ 'a' => session.find(:id, 'form_title'),
302
+ 'b' => {
303
+ 'c' => session.find(:css, '#form_city').all(:css, 'option').to_a
304
+ }
305
+ )
306
+ end
307
+
308
+ describe '#evaluate_async_script' do
309
+ it 'will timeout if the script takes too long' do
310
+ skip 'safaridriver returns the wrong error type' if safari?(session)
311
+ session.visit('/with_js')
312
+ expect do
313
+ session.using_wait_time(1) do
314
+ session.evaluate_async_script('var cb = arguments[0]; setTimeout(function(){ cb(null) }, 3000)')
315
+ end
316
+ end.to raise_error Selenium::WebDriver::Error::ScriptTimeoutError
317
+ end
318
+ end
319
+ end
320
+
321
+ describe 'Element#inspect' do
322
+ it 'outputs obsolete elements' do
323
+ session.visit('/form')
324
+ el = session.find(:button, 'Click me!').click
325
+ expect(session).to have_no_button('Click me!')
326
+ allow(el).to receive(:synchronize)
327
+ expect(el.inspect).to eq 'Obsolete #<Capybara::Node::Element>'
328
+ expect(el).not_to have_received(:synchronize)
329
+ end
330
+ end
331
+
332
+ describe 'Element#click' do
333
+ it 'should handle fixed headers/footers' do
334
+ session.visit('/with_fixed_header_footer')
335
+ session.using_wait_time(2) do
336
+ session.find(:link, 'Go to root').click
337
+ end
338
+ expect(session).to have_current_path('/')
339
+ end
340
+ end
341
+
342
+ describe 'Capybara#Node#attach_file' do
343
+ it 'can attach a directory' do
344
+ pending "Geckodriver doesn't support uploading a directory" if firefox?(session)
345
+ pending "Selenium remote doesn't support transferring a directory" if remote?(session)
346
+ pending "Headless Chrome doesn't support directory upload - https://bugs.chromium.org/p/chromedriver/issues/detail?id=2521&q=directory%20upload&colspec=ID%20Status%20Pri%20Owner%20Summary" if chrome?(session) && chrome_lt?(110, session) && ENV.fetch('HEADLESS', nil)
347
+ pending "IE doesn't support uploading a directory" if ie?(session)
348
+ pending 'Chrome/chromedriver 73 breaks this' if chrome?(session) && chrome_gte?(73, session) && chrome_lt?(75, session)
349
+
350
+ session.visit('/form')
351
+ test_file_dir = File.expand_path('./fixtures', File.dirname(__FILE__))
352
+ session.attach_file('Directory Upload', test_file_dir)
353
+ session.click_button('Upload Multiple')
354
+ expect(session).to have_text('5 | ') # number of files
355
+ end
356
+
357
+ it 'can attach a relative file' do
358
+ pending 'Geckdoriver on windows requires alternate file separator which path expansion replaces' if Gem.win_platform? && firefox?(session)
359
+
360
+ session.visit('/form')
361
+ session.attach_file('Single Document', 'spec/fixtures/capybara.csv')
362
+ session.click_button('Upload Single')
363
+ expect(session).to have_text('Content-type: text/csv')
364
+ end
365
+ end
366
+
367
+ context 'Windows' do
368
+ it "can't close the primary window" do
369
+ expect do
370
+ session.current_window.close
371
+ end.to raise_error(ArgumentError, 'Not allowed to close the primary window')
372
+ end
373
+ end
374
+
375
+ # rubocop:disable RSpec/InstanceVariable
376
+ describe 'Capybara#disable_animation' do
377
+ context 'when set to `true`' do
378
+ before(:context) do # rubocop:disable RSpec/BeforeAfterAll
379
+ skip "Safari doesn't support multiple sessions" if safari?(session)
380
+ # NOTE: Although Capybara.SpecHelper.reset! sets Capybara.disable_animation to false,
381
+ # it doesn't affect any of these tests because the settings are applied per-session
382
+ Capybara.disable_animation = true
383
+ @animation_session = Capybara::Session.new(session.mode, TestApp.new)
384
+ end
385
+
386
+ it 'should add CSS to the <head> element' do
387
+ @animation_session.visit('with_animation')
388
+
389
+ expect(@animation_session).to have_selector(:css, 'head > style', text: 'transition: none', visible: :hidden)
390
+ end
391
+
392
+ it 'should disable CSS transitions' do
393
+ @animation_session.visit('with_animation')
394
+ @animation_session.click_link('transition me away')
395
+ expect(@animation_session).to have_no_link('transition me away', wait: 0.5)
396
+ end
397
+
398
+ it 'should disable CSS animations (set to 0s)' do
399
+ @animation_session.visit('with_animation')
400
+ sleep 1
401
+ @animation_session.click_link('animate me away')
402
+ expect(@animation_session).to have_no_link('animate me away', wait: 0.5)
403
+ end
404
+
405
+ it 'should disable CSS animations on pseudo elements (set to 0s)' do
406
+ @animation_session.visit('with_animation')
407
+ sleep 1
408
+ @animation_session.find_link('animate me away').right_click
409
+ expect(@animation_session).to have_content('Animation Ended', wait: 0.1)
410
+ end
411
+
412
+ it 'should scroll the page instantly', requires: [:js] do
413
+ @animation_session.visit('with_animation')
414
+ scroll_y = @animation_session.evaluate_script(<<~JS)
415
+ (function(){
416
+ window.scrollTo(0,500);
417
+ return window.scrollY;
418
+ })()
419
+ JS
420
+ expect(scroll_y).to eq 500
421
+ end
422
+
423
+ it 'should scroll the page instantly without jquery animation', requires: [:js] do
424
+ @animation_session.visit('with_jquery_animation')
425
+ @animation_session.click_link('scroll top 500')
426
+ scroll_y = @animation_session.evaluate_script('window.scrollY')
427
+ expect(scroll_y).to eq 500
428
+ end
429
+ end
430
+
431
+ context 'when set to `false`' do
432
+ before(:context) do # rubocop:disable RSpec/BeforeAfterAll
433
+ skip "Safari doesn't support multiple sessions" if safari?(session)
434
+ # NOTE: Although Capybara.SpecHelper.reset! sets Capybara.disable_animation to false,
435
+ # it doesn't affect any of these tests because the settings are applied per-session
436
+ Capybara.disable_animation = false
437
+ @animation_session = Capybara::Session.new(session.mode, TestApp.new)
438
+ end
439
+
440
+ it 'should scroll the page with a smooth animation', requires: [:js] do
441
+ @animation_session.visit('with_animation')
442
+ scroll_y = @animation_session.evaluate_script(<<~JS)
443
+ (function(){
444
+ window.scrollTo(0,500);
445
+ return window.scrollY;
446
+ })()
447
+ JS
448
+ # measured over 0.5 seconds: 0, 75, 282, 478, 500
449
+ expect(scroll_y).to be < 500
450
+ end
451
+
452
+ it 'should scroll the page with jquery animation', requires: [:js] do
453
+ @animation_session.visit('with_jquery_animation')
454
+ @animation_session.click_link('scroll top 500')
455
+ scroll_y = @animation_session.evaluate_script('window.scrollY')
456
+ expect(scroll_y).to be < 500
457
+ end
458
+ end
459
+
460
+ context 'if we pass in css that matches elements' do
461
+ before(:context) do # rubocop:disable RSpec/BeforeAfterAll
462
+ skip "safaridriver doesn't support multiple sessions" if safari?(session)
463
+ # NOTE: Although Capybara.SpecHelper.reset! sets Capybara.disable_animation to false,
464
+ # it doesn't affect any of these tests because the settings are applied per-session
465
+ Capybara.disable_animation = '#with_animation a'
466
+ @animation_session_with_matching_css = Capybara::Session.new(session.mode, TestApp.new)
467
+ end
468
+
469
+ it 'should disable CSS transitions' do
470
+ @animation_session_with_matching_css.visit('with_animation')
471
+ sleep 1
472
+ @animation_session_with_matching_css.click_link('transition me away')
473
+ expect(@animation_session_with_matching_css).to have_no_link('transition me away', wait: 0.5)
474
+ end
475
+
476
+ it 'should disable CSS animations' do
477
+ @animation_session_with_matching_css.visit('with_animation')
478
+ sleep 1
479
+ @animation_session_with_matching_css.click_link('animate me away')
480
+ expect(@animation_session_with_matching_css).to have_no_link('animate me away', wait: 0.5)
481
+ end
482
+ end
483
+
484
+ context 'if we pass in css that does not match elements' do
485
+ before(:context) do # rubocop:disable RSpec/BeforeAfterAll
486
+ skip "Safari doesn't support multiple sessions" if safari?(session)
487
+ # NOTE: Although Capybara.SpecHelper.reset! sets Capybara.disable_animation to false,
488
+ # it doesn't affect any of these tests because the settings are applied per-session
489
+ Capybara.disable_animation = '.this-class-matches-nothing'
490
+ @animation_session_without_matching_css = Capybara::Session.new(session.mode, TestApp.new)
491
+ end
492
+
493
+ it 'should not disable CSS transitions' do
494
+ @animation_session_without_matching_css.visit('with_animation')
495
+ sleep 1
496
+ @animation_session_without_matching_css.click_link('transition me away')
497
+ sleep 0.5 # Wait long enough for click to have been processed
498
+ expect(@animation_session_without_matching_css).to have_link('transition me away', wait: false)
499
+ expect(@animation_session_without_matching_css).to have_no_link('transition me away', wait: 5)
500
+ end
501
+
502
+ it 'should not disable CSS animations' do
503
+ @animation_session_without_matching_css.visit('with_animation')
504
+ sleep 1
505
+ @animation_session_without_matching_css.click_link('animate me away')
506
+ sleep 0.5 # Wait long enough for click to have been processed
507
+ expect(@animation_session_without_matching_css).to have_link('animate me away', wait: false)
508
+ expect(@animation_session_without_matching_css).to have_no_link('animate me away', wait: 5)
509
+ end
510
+ end
511
+ end
512
+ # rubocop:enable RSpec/InstanceVariable
513
+
514
+ describe ':element selector' do
515
+ it 'can find html5 svg elements' do
516
+ session.visit('with_html5_svg')
517
+ expect(session).to have_selector(:element, :svg)
518
+ expect(session).to have_selector(:element, :rect, visible: :visible)
519
+ expect(session).to have_selector(:element, :circle)
520
+ expect(session).to have_selector(:element, :linearGradient, visible: :all)
521
+ end
522
+
523
+ it 'can query attributes with strange characters' do
524
+ session.visit('/form')
525
+ expect(session).to have_selector(:element, '{custom}': true)
526
+ expect(session).to have_selector(:element, '{custom}': 'abcdef')
527
+ end
528
+ end
529
+
530
+ describe 'with react' do
531
+ context 'controlled components' do
532
+ it 'can set and clear a text field' do
533
+ skip "This test doesn't support older browsers" if ie?(session)
534
+
535
+ session.visit 'react'
536
+
537
+ session.fill_in('Name:', with: 'abc')
538
+ session.accept_prompt 'A name was submitted: abc' do
539
+ session.click_button('Submit')
540
+ end
541
+
542
+ session.fill_in('Name:', with: '')
543
+ session.accept_prompt(/A name was submitted: $/) do
544
+ session.click_button('Submit')
545
+ end
546
+ end
547
+
548
+ it 'works with rapid fill' do
549
+ skip "This test doesn't support older browsers" if ie?(session)
550
+
551
+ session.visit 'react'
552
+ long_string = (0...60).map { |i| ((i % 26) + 65).chr }.join
553
+
554
+ session.fill_in('Name:', with: long_string)
555
+ session.accept_prompt "A name was submitted: #{long_string}" do
556
+ session.click_button('Submit')
557
+ end
558
+ end
559
+ end
560
+ end
561
+ end
562
+
563
+ def headless_or_remote?
564
+ !ENV['HEADLESS'].nil? || session.driver.options[:browser] == :remote
565
+ end
566
+ end