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,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ class NodeWrapper
4
+ def initialize(element); @element = element end
5
+ def to_capybara_node(); @element end
6
+ end
7
+
8
+ Capybara::SpecHelper.spec '#to_capybara_node' do
9
+ before do
10
+ @session.visit('/with_html')
11
+ end
12
+
13
+ it 'should support have_xxx expectations' do
14
+ para = NodeWrapper.new(@session.find(:css, '#first'))
15
+ expect(para).to have_link('ullamco')
16
+ end
17
+
18
+ it 'should support within' do
19
+ para = NodeWrapper.new(@session.find(:css, '#first'))
20
+ expect(@session).to have_css('#second')
21
+ @session.within(para) do
22
+ expect(@session).to have_link('ullamco')
23
+ expect(@session).not_to have_css('#second')
24
+ end
25
+ end
26
+
27
+ it 'should generate correct errors' do
28
+ para = NodeWrapper.new(@session.find(:css, '#first'))
29
+ expect do
30
+ expect(para).to have_text('Header Class Test One')
31
+ end.to raise_error(/^expected to find text "Header Class Test One" in "Lore/)
32
+ expect do
33
+ expect(para).to have_css('#second')
34
+ end.to raise_error(/^expected to find css "#second" within #<Capybara::Node::Element/)
35
+ expect do
36
+ expect(para).to have_link(href: %r{/without_simple_html})
37
+ end.to raise_error(%r{^expected to find link with href matching /\\/without_simple_html/ within #<Capybara::Node::Element})
38
+ end
39
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # NOTE: This file uses `sleep` to sync up parts of the tests. This is only implemented like this
4
+ # because of the methods being tested. In tests using Capybara this type of behavior should be implemented
5
+ # using Capybara provided assertions with builtin waiting behavior.
6
+
7
+ Capybara::SpecHelper.spec '#refresh' do
8
+ it 'reload the page' do
9
+ @session.visit('/form')
10
+ expect(@session).to have_select('form_locale', selected: 'English')
11
+ @session.select('Swedish', from: 'form_locale')
12
+ expect(@session).to have_select('form_locale', selected: 'Swedish')
13
+ @session.refresh
14
+ expect(@session).to have_select('form_locale', selected: 'English')
15
+ end
16
+
17
+ it 'raises any errors caught inside the server', requires: [:server] do
18
+ quietly { @session.visit('/error') }
19
+ expect do
20
+ @session.refresh
21
+ end.to raise_error(TestApp::TestAppError)
22
+ end
23
+
24
+ it 'it reposts' do
25
+ @session.visit('/form')
26
+ @session.select('Sweden', from: 'form_region')
27
+ @session.click_button('awesome')
28
+ sleep 2
29
+ expect do
30
+ @session.refresh
31
+ sleep 2
32
+ end.to change { extract_results(@session)['post_count'] }.by(1)
33
+ end
34
+ end
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#reset_session!' do
4
+ it 'removes cookies from current domain' do
5
+ @session.visit('/set_cookie')
6
+ @session.visit('/get_cookie')
7
+ expect(@session).to have_content('test_cookie')
8
+
9
+ @session.reset_session!
10
+ @session.visit('/get_cookie')
11
+ expect(@session.body).not_to include('test_cookie')
12
+ end
13
+
14
+ it 'removes ALL cookies', requires: [:server] do
15
+ domains = ['localhost', '127.0.0.1']
16
+ domains.each do |domain|
17
+ @session.visit("http://#{domain}:#{@session.server.port}/set_cookie")
18
+ @session.visit("http://#{domain}:#{@session.server.port}/get_cookie")
19
+ expect(@session).to have_content('test_cookie')
20
+ end
21
+ @session.reset_session!
22
+ domains.each do |domain|
23
+ @session.visit("http://#{domain}:#{@session.server.port}/get_cookie")
24
+ expect(@session.body).not_to include('test_cookie')
25
+ end
26
+ end
27
+
28
+ it 'resets current url, host, path' do
29
+ @session.visit '/foo'
30
+ expect(@session.current_url).not_to be_empty
31
+ expect(@session.current_host).not_to be_empty
32
+ expect(@session.current_path).to eq('/foo')
33
+
34
+ @session.reset_session!
35
+ expect(@session.current_url).to satisfy('be a blank url') { |url| [nil, '', 'about:blank'].include? url }
36
+ expect(@session.current_path).to satisfy('be a blank path') { |path| ['', nil].include? path }
37
+ expect(@session.current_host).to be_nil
38
+ end
39
+
40
+ it 'resets page body' do
41
+ @session.visit('/with_html')
42
+ expect(@session).to have_content('This is a test')
43
+ expect(@session.find('.//h1').text).to include('This is a test')
44
+
45
+ @session.reset_session!
46
+ expect(@session.body).not_to include('This is a test')
47
+ expect(@session).to have_no_selector('.//h1')
48
+ end
49
+
50
+ it 'is synchronous' do
51
+ @session.visit('/with_slow_unload')
52
+ expect(@session).to have_selector(:css, 'div')
53
+ @session.reset_session!
54
+ expect(@session).to have_no_selector :xpath, '/html/body/*', wait: false
55
+ end
56
+
57
+ it 'handles modals during unload', requires: [:modals] do
58
+ @session.visit('/with_unload_alert')
59
+ expect(@session).to have_selector(:css, 'div')
60
+ expect { @session.reset_session! }.not_to raise_error
61
+ expect(@session).to have_no_selector :xpath, '/html/body/*', wait: false
62
+ end
63
+
64
+ it 'handles already open modals', requires: [:modals] do
65
+ @session.visit('/with_unload_alert')
66
+ @session.click_link('Go away')
67
+ expect { @session.reset_session! }.not_to raise_error
68
+ expect(@session).to have_no_selector :xpath, '/html/body/*', wait: false
69
+ end
70
+
71
+ it 'raises any standard errors caught inside the server', requires: [:server] do
72
+ quietly { @session.visit('/error') }
73
+ expect do
74
+ @session.reset_session!
75
+ end.to raise_error(TestApp::TestAppError)
76
+ @session.visit('/')
77
+ expect(@session.current_path).to eq('/')
78
+ end
79
+
80
+ it 'closes extra windows', requires: [:windows] do
81
+ @session.visit('/with_html')
82
+ @session.open_new_window
83
+ @session.open_new_window
84
+ expect(@session.windows.size).to eq 3
85
+ @session.reset_session!
86
+ expect(@session.windows.size).to eq 1
87
+ end
88
+
89
+ it 'closes extra windows when not on the first window', requires: [:windows] do
90
+ @session.visit('/with_html')
91
+ @session.switch_to_window(@session.open_new_window)
92
+ @session.open_new_window
93
+ expect(@session.windows.size).to eq 3
94
+ @session.reset_session!
95
+ expect(@session.windows.size).to eq 1
96
+ end
97
+
98
+ it 'does not block opening a new window after a frame was switched to and not switched back', requires: [:windows] do
99
+ @session.visit('/with_iframe?id=test_iframe&url=/')
100
+ @session.switch_to_frame(@session.find(:frame, 'test_iframe'))
101
+ within_window_test = lambda do
102
+ @session.within_window(@session.open_new_window) do
103
+ @session.visit('/')
104
+ end
105
+ end
106
+ expect(&within_window_test).to raise_error(Capybara::ScopeError)
107
+ @session.reset_session!
108
+ expect(&within_window_test).not_to raise_error
109
+ end
110
+
111
+ context 'When reuse_server == false' do
112
+ let!(:orig_reuse_server) { Capybara.reuse_server }
113
+
114
+ before do
115
+ Capybara.reuse_server = false
116
+ end
117
+
118
+ after do
119
+ Capybara.reuse_server = orig_reuse_server
120
+ end
121
+
122
+ it 'raises any standard errors caught inside the server during a second session', requires: [:server] do
123
+ Capybara.using_driver(@session.mode) do
124
+ Capybara.using_session(:another_session) do
125
+ another_session = Capybara.current_session
126
+ quietly { another_session.visit('/error') }
127
+ expect do
128
+ another_session.reset_session!
129
+ end.to raise_error(TestApp::TestAppError)
130
+ another_session.visit('/')
131
+ expect(another_session.current_path).to eq('/')
132
+ end
133
+ end
134
+ end
135
+ end
136
+
137
+ it 'raises configured errors caught inside the server', requires: [:server] do
138
+ prev_errors = Capybara.server_errors.dup
139
+
140
+ Capybara.server_errors = [LoadError]
141
+ quietly { @session.visit('/error') }
142
+ expect do
143
+ @session.reset_session!
144
+ end.not_to raise_error
145
+
146
+ quietly { @session.visit('/load_error') }
147
+ expect do
148
+ @session.reset_session!
149
+ end.to raise_error(LoadError)
150
+
151
+ Capybara.server_errors = prev_errors
152
+ end
153
+
154
+ it 'ignores server errors when `Capybara.raise_server_errors = false`', requires: [:server] do
155
+ Capybara.raise_server_errors = false
156
+ quietly { @session.visit('/error') }
157
+ @session.reset_session!
158
+ @session.visit('/')
159
+ expect(@session.current_path).to eq('/')
160
+ end
161
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#status_code' do
4
+ it 'should return response codes', requires: [:status_code] do
5
+ @session.visit('/with_simple_html')
6
+ expect(@session.status_code).to eq(200)
7
+ end
8
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'launchy'
4
+
5
+ Capybara::SpecHelper.spec '#save_and_open_page' do
6
+ before do
7
+ @session.visit '/foo'
8
+ end
9
+
10
+ after do
11
+ Dir.glob('capybara-*.html').each do |file|
12
+ FileUtils.rm(file)
13
+ end
14
+ end
15
+
16
+ it 'sends open method to launchy' do
17
+ allow(Launchy).to receive(:open)
18
+ @session.save_and_open_page
19
+ expect(Launchy).to have_received(:open).with(/capybara-\d+\.html/)
20
+ end
21
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'launchy'
4
+
5
+ Capybara::SpecHelper.spec '#save_and_open_screenshot' do
6
+ before do
7
+ @session.visit '/'
8
+ end
9
+
10
+ it 'opens file from the default directory', requires: [:screenshot] do
11
+ expected_file_regex = /capybara-\d+\.png/
12
+ allow(@session.driver).to receive(:save_screenshot)
13
+ allow(Launchy).to receive(:open)
14
+
15
+ @session.save_and_open_screenshot
16
+
17
+ expect(@session.driver).to have_received(:save_screenshot)
18
+ .with(expected_file_regex, any_args)
19
+ expect(Launchy).to have_received(:open).with(expected_file_regex)
20
+ end
21
+
22
+ it 'opens file from the provided directory', requires: [:screenshot] do
23
+ custom_path = 'screenshots/1.png'
24
+ allow(@session.driver).to receive(:save_screenshot)
25
+ allow(Launchy).to receive(:open)
26
+
27
+ @session.save_and_open_screenshot(custom_path)
28
+
29
+ expect(@session.driver).to have_received(:save_screenshot)
30
+ .with(/#{custom_path}$/, any_args)
31
+ expect(Launchy).to have_received(:open).with(/#{custom_path}$/)
32
+ end
33
+
34
+ context 'when launchy cannot be required' do
35
+ it 'prints out a correct warning message', requires: [:screenshot] do
36
+ file_path = File.join(Dir.tmpdir, 'test.png')
37
+ allow(@session).to receive(:warn)
38
+ allow(@session).to receive(:require).with('launchy').and_raise(LoadError)
39
+ @session.save_and_open_screenshot(file_path)
40
+ expect(@session).to have_received(:warn).with("File saved to #{file_path}.\nPlease install the launchy gem to open the file automatically.")
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#save_page' do
4
+ let(:alternative_path) { File.join(Dir.pwd, 'save_and_open_page_tmp') }
5
+ before do
6
+ @old_save_path = Capybara.save_path
7
+ Capybara.save_path = nil
8
+ @session.visit('/foo')
9
+ end
10
+
11
+ after do
12
+ Capybara.save_path = @old_save_path
13
+ Dir.glob('capybara-*.html').each do |file|
14
+ FileUtils.rm(file)
15
+ end
16
+ FileUtils.rm_rf alternative_path
17
+ end
18
+
19
+ it 'saves the page in the root directory' do
20
+ @session.save_page
21
+ path = Dir.glob('capybara-*.html').first
22
+ expect(File.read(path)).to include('Another World')
23
+ end
24
+
25
+ it 'generates a sensible filename' do
26
+ @session.save_page
27
+ filename = Dir.glob('capybara-*.html').first
28
+ expect(filename).to match(/^capybara-\d+\.html$/)
29
+ end
30
+
31
+ it 'can store files in a specified directory' do
32
+ Capybara.save_path = alternative_path
33
+ @session.save_page
34
+ path = Dir.glob("#{alternative_path}/capybara-*.html").first
35
+ expect(File.read(path)).to include('Another World')
36
+ end
37
+
38
+ it 'uses the given filename' do
39
+ @session.save_page('capybara-001122.html')
40
+ expect(File.read('capybara-001122.html')).to include('Another World')
41
+ end
42
+
43
+ it 'can store files in a specified directory with a given filename' do
44
+ Capybara.save_path = alternative_path
45
+ @session.save_page('capybara-001133.html')
46
+ path = "#{alternative_path}/capybara-001133.html"
47
+ expect(File.read(path)).to include('Another World')
48
+ end
49
+
50
+ it 'can store files in a specified directory with a given relative filename' do
51
+ Capybara.save_path = alternative_path
52
+ @session.save_page('tmp/capybara-001144.html')
53
+ path = "#{alternative_path}/tmp/capybara-001144.html"
54
+ expect(File.read(path)).to include('Another World')
55
+ end
56
+
57
+ it 'returns an absolute path in pwd' do
58
+ result = @session.save_page
59
+ path = File.expand_path(Dir.glob('capybara-*.html').first, Dir.pwd)
60
+ expect(result).to eq(path)
61
+ end
62
+
63
+ it 'returns an absolute path in given directory' do
64
+ Capybara.save_path = alternative_path
65
+ result = @session.save_page
66
+ path = File.expand_path(Dir.glob("#{alternative_path}/capybara-*.html").first, alternative_path)
67
+ expect(result).to eq(path)
68
+ end
69
+
70
+ context 'asset_host contains a string' do
71
+ before { Capybara.asset_host = 'http://example.com' }
72
+
73
+ after { Capybara.asset_host = nil }
74
+
75
+ it 'prepends base tag with value from asset_host to the head' do
76
+ @session.visit('/with_js')
77
+ path = @session.save_page
78
+
79
+ result = File.read(path)
80
+ expect(result).to include("<head><base href='http://example.com' />")
81
+ end
82
+
83
+ it "doesn't prepend base tag to pages when asset_host is nil" do
84
+ Capybara.asset_host = nil
85
+ @session.visit('/with_js')
86
+ path = @session.save_page
87
+
88
+ result = File.read(path)
89
+ expect(result).to include('<html')
90
+ expect(result).not_to include('http://example.com')
91
+ end
92
+
93
+ it "doesn't prepend base tag to pages which already have it" do
94
+ @session.visit('/with_base_tag')
95
+ path = @session.save_page
96
+
97
+ result = File.read(path)
98
+ expect(result).to include('<html')
99
+ expect(result).not_to include('http://example.com')
100
+ end
101
+
102
+ it 'executes successfully even if the page is missing a <head>' do
103
+ @session.visit('/with_simple_html')
104
+ path = @session.save_page
105
+
106
+ result = File.read(path)
107
+ expect(result).to include('Bar')
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#save_screenshot', requires: [:screenshot] do
4
+ let(:alternative_path) { File.join(Dir.pwd, 'save_screenshot_tmp') }
5
+ before do
6
+ @old_save_path = Capybara.save_path
7
+ Capybara.save_path = nil
8
+ @session.visit '/foo'
9
+ end
10
+
11
+ after do
12
+ Capybara.save_path = @old_save_path
13
+ FileUtils.rm_rf alternative_path
14
+ end
15
+
16
+ it 'generates sensible filename' do
17
+ allow(@session.driver).to receive(:save_screenshot)
18
+
19
+ @session.save_screenshot
20
+
21
+ regexp = Regexp.new(File.join(Dir.pwd, 'capybara-\d+\.png'))
22
+ expect(@session.driver).to have_received(:save_screenshot).with(regexp, any_args)
23
+ end
24
+
25
+ it 'allows to specify another path' do
26
+ allow(@session.driver).to receive(:save_screenshot)
27
+
28
+ custom_path = 'screenshots/1.png'
29
+ @session.save_screenshot(custom_path)
30
+
31
+ expect(@session.driver).to have_received(:save_screenshot).with(/#{custom_path}$/, any_args)
32
+ end
33
+
34
+ context 'with Capybara.save_path' do
35
+ it 'file is generated in the correct location' do
36
+ Capybara.save_path = alternative_path
37
+ allow(@session.driver).to receive(:save_screenshot)
38
+
39
+ @session.save_screenshot
40
+
41
+ regexp = Regexp.new(File.join(alternative_path, 'capybara-\d+\.png'))
42
+ expect(@session.driver).to have_received(:save_screenshot).with(regexp, any_args)
43
+ end
44
+
45
+ it 'relative paths are relative to save_path' do
46
+ Capybara.save_path = alternative_path
47
+ allow(@session.driver).to receive(:save_screenshot)
48
+
49
+ custom_path = 'screenshots/2.png'
50
+ @session.save_screenshot(custom_path)
51
+
52
+ expect(@session.driver).to have_received(:save_screenshot).with(File.expand_path(custom_path, alternative_path), any_args)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,18 @@
1
+ # coding: US-ASCII
2
+ # frozen_string_literal: true
3
+
4
+ Capybara::SpecHelper.spec '#save_screenshot' do
5
+ let(:image_path) { File.join(Dir.tmpdir, 'capybara-screenshot.png') }
6
+
7
+ before do
8
+ @session.visit '/'
9
+ end
10
+
11
+ it 'should generate PNG file', requires: [:screenshot] do
12
+ path = @session.save_screenshot image_path
13
+
14
+ magic = File.read(image_path, 4)
15
+ expect(magic).to eq "\x89PNG"
16
+ expect(path).to eq image_path
17
+ end
18
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#scroll_to', requires: [:scroll] do
4
+ before do
5
+ @session.visit('/scroll')
6
+ end
7
+
8
+ it 'can scroll an element to the top of the viewport' do
9
+ el = @session.find(:css, '#scroll')
10
+ @session.scroll_to(el, align: :top)
11
+ expect(el.evaluate_script('this.getBoundingClientRect().top')).to be_within(1).of(0)
12
+ end
13
+
14
+ it 'can scroll an element to the bottom of the viewport' do
15
+ el = @session.find(:css, '#scroll')
16
+ @session.scroll_to(el, align: :bottom)
17
+ el_bottom = el.evaluate_script('this.getBoundingClientRect().bottom')
18
+ viewport_bottom = el.evaluate_script('document.documentElement.clientHeight')
19
+ expect(el_bottom).to be_within(1).of(viewport_bottom)
20
+ end
21
+
22
+ it 'can scroll an element to the center of the viewport' do
23
+ el = @session.find(:css, '#scroll')
24
+ @session.scroll_to(el, align: :center)
25
+ el_center = el.evaluate_script('(function(rect){return (rect.top + rect.bottom)/2})(this.getBoundingClientRect())')
26
+ viewport_bottom = el.evaluate_script('document.documentElement.clientHeight')
27
+ expect(el_center).to be_within(2).of(viewport_bottom / 2)
28
+ end
29
+
30
+ it 'can scroll the window to the vertical top' do
31
+ @session.scroll_to :bottom
32
+ @session.scroll_to :top
33
+ expect(@session.evaluate_script('[window.scrollX || window.pageXOffset, window.scrollY || window.pageYOffset]')).to eq [0, 0]
34
+ end
35
+
36
+ it 'can scroll the window to the vertical bottom' do
37
+ @session.scroll_to :bottom
38
+ max_scroll = @session.evaluate_script('document.documentElement.scrollHeight - document.documentElement.clientHeight')
39
+ scrolled_location_x, scrolled_location_y = @session.evaluate_script('[window.scrollX || window.pageXOffset, window.scrollY || window.pageYOffset]')
40
+ expect(scrolled_location_x).to be_within(0.5).of(0)
41
+ expect(scrolled_location_y).to be_within(0.5).of(max_scroll)
42
+ end
43
+
44
+ it 'can scroll the window to the vertical center' do
45
+ @session.scroll_to :center
46
+ max_scroll = @session.evaluate_script('document.documentElement.scrollHeight - document.documentElement.clientHeight')
47
+ expect(@session.evaluate_script('[window.scrollX || window.pageXOffset, window.scrollY || window.pageYOffset]')).to eq [0, max_scroll / 2]
48
+ end
49
+
50
+ it 'can scroll the window to specific location' do
51
+ @session.scroll_to 100, 100
52
+ expect(@session.evaluate_script('[window.scrollX || window.pageXOffset, window.scrollY || window.pageYOffset]')).to eq [100, 100]
53
+ end
54
+
55
+ it 'can scroll an element to the top of the scrolling element' do
56
+ scrolling_element = @session.find(:css, '#scrollable')
57
+ el = scrolling_element.find(:css, '#inner')
58
+ scrolling_element.scroll_to(el, align: :top)
59
+ scrolling_element_top = scrolling_element.evaluate_script('this.getBoundingClientRect().top')
60
+ expect(el.evaluate_script('this.getBoundingClientRect().top')).to be_within(3).of(scrolling_element_top)
61
+ end
62
+
63
+ it 'can scroll an element to the bottom of the scrolling element' do
64
+ scrolling_element = @session.find(:css, '#scrollable')
65
+ el = scrolling_element.find(:css, '#inner')
66
+ scrolling_element.scroll_to(el, align: :bottom)
67
+ el_bottom = el.evaluate_script('this.getBoundingClientRect().bottom')
68
+ scroller_bottom = scrolling_element.evaluate_script('this.getBoundingClientRect().top + this.clientHeight')
69
+ expect(el_bottom).to be_within(1).of(scroller_bottom)
70
+ end
71
+
72
+ it 'can scroll an element to the center of the scrolling element' do
73
+ scrolling_element = @session.find(:css, '#scrollable')
74
+ el = scrolling_element.find(:css, '#inner')
75
+ scrolling_element.scroll_to(el, align: :center)
76
+ el_center = el.evaluate_script('(function(rect){return (rect.top + rect.bottom)/2})(this.getBoundingClientRect())')
77
+ scrollable_center = scrolling_element.evaluate_script('(this.clientHeight / 2) + this.getBoundingClientRect().top')
78
+ expect(el_center).to be_within(1).of(scrollable_center)
79
+ end
80
+
81
+ it 'can scroll the scrolling element to the top' do
82
+ scrolling_element = @session.find(:css, '#scrollable')
83
+ scrolling_element.scroll_to :bottom
84
+ scrolling_element.scroll_to :top
85
+ expect(scrolling_element.evaluate_script('[this.scrollLeft, this.scrollTop]')).to eq [0, 0]
86
+ end
87
+
88
+ it 'can scroll the scrolling element to the bottom' do
89
+ scrolling_element = @session.find(:css, '#scrollable')
90
+ scrolling_element.scroll_to :bottom
91
+ max_scroll = scrolling_element.evaluate_script('this.scrollHeight - this.clientHeight')
92
+ expect(scrolling_element.evaluate_script('[this.scrollLeft, this.scrollTop]')).to eq [0, max_scroll]
93
+ end
94
+
95
+ it 'can scroll the scrolling element to the vertical center' do
96
+ scrolling_element = @session.find(:css, '#scrollable')
97
+ scrolling_element.scroll_to :center
98
+ max_scroll = scrolling_element.evaluate_script('this.scrollHeight - this.clientHeight')
99
+ expect(scrolling_element.evaluate_script('[this.scrollLeft, this.scrollTop]')).to eq [0, max_scroll / 2]
100
+ end
101
+
102
+ it 'can scroll the scrolling element to specific location' do
103
+ scrolling_element = @session.find(:css, '#scrollable')
104
+ scrolling_element.scroll_to 100, 100
105
+ expect(scrolling_element.evaluate_script('[this.scrollLeft, this.scrollTop]')).to eq [100, 100]
106
+ end
107
+
108
+ it 'can scroll the window by a specific amount' do
109
+ @session.scroll_to(:current, offset: [50, 75])
110
+ expect(@session.evaluate_script('[window.scrollX || window.pageXOffset, window.scrollY || window.pageYOffset]')).to eq [50, 75]
111
+ end
112
+
113
+ it 'can scroll the scroll the scrolling element by a specific amount' do
114
+ scrolling_element = @session.find(:css, '#scrollable')
115
+ scrolling_element.scroll_to 100, 100
116
+ scrolling_element.scroll_to(:current, offset: [-50, 50])
117
+ expect(scrolling_element.evaluate_script('[this.scrollLeft, this.scrollTop]')).to eq [50, 150]
118
+ end
119
+ end