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,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#unselect' do
4
+ before do
5
+ @session.visit('/form')
6
+ end
7
+
8
+ context 'with multiple select' do
9
+ it 'should unselect an option from a select box by id' do
10
+ @session.unselect('Commando', from: 'form_underwear')
11
+ @session.click_button('awesome')
12
+ expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
13
+ expect(extract_results(@session)['underwear']).not_to include('Commando')
14
+ end
15
+
16
+ it 'should unselect an option without a select box' do
17
+ @session.unselect('Commando')
18
+ @session.click_button('awesome')
19
+ expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
20
+ expect(extract_results(@session)['underwear']).not_to include('Commando')
21
+ end
22
+
23
+ it 'should unselect an option from a select box by label' do
24
+ @session.unselect('Commando', from: 'Underwear')
25
+ @session.click_button('awesome')
26
+ expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
27
+ expect(extract_results(@session)['underwear']).not_to include('Commando')
28
+ end
29
+
30
+ it 'should favour exact matches to option labels' do
31
+ @session.unselect('Briefs', from: 'Underwear')
32
+ @session.click_button('awesome')
33
+ expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
34
+ expect(extract_results(@session)['underwear']).not_to include('Briefs')
35
+ end
36
+
37
+ it 'should escape quotes' do
38
+ @session.unselect("Frenchman's Pantalons", from: 'Underwear')
39
+ @session.click_button('awesome')
40
+ expect(extract_results(@session)['underwear']).not_to include("Frenchman's Pantalons")
41
+ end
42
+
43
+ it 'casts to string' do
44
+ @session.unselect(:Briefs, from: :Underwear)
45
+ @session.click_button('awesome')
46
+ expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
47
+ expect(extract_results(@session)['underwear']).not_to include('Briefs')
48
+ end
49
+ end
50
+
51
+ context 'with single select' do
52
+ it 'should raise an error' do
53
+ expect { @session.unselect('English', from: 'form_locale') }.to raise_error(Capybara::UnselectNotAllowed)
54
+ end
55
+ end
56
+
57
+ context "with a locator that doesn't exist" do
58
+ it 'should raise an error' do
59
+ msg = /Unable to find select box "does not exist"/
60
+ expect do
61
+ @session.unselect('foo', from: 'does not exist')
62
+ end.to raise_error(Capybara::ElementNotFound, msg)
63
+ end
64
+ end
65
+
66
+ context "with an option that doesn't exist" do
67
+ it 'should raise an error' do
68
+ msg = /^Unable to find option "Does not Exist" within/
69
+ expect do
70
+ @session.unselect('Does not Exist', from: 'form_underwear')
71
+ end.to raise_error(Capybara::ElementNotFound, msg)
72
+ end
73
+ end
74
+
75
+ context 'with :exact option' do
76
+ context 'when `false`' do
77
+ it 'can match select box approximately' do
78
+ @session.unselect('Boxerbriefs', from: 'Under', exact: false)
79
+ @session.click_button('awesome')
80
+ expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
81
+ end
82
+
83
+ it 'can match option approximately' do
84
+ @session.unselect('Boxerbr', from: 'Underwear', exact: false)
85
+ @session.click_button('awesome')
86
+ expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
87
+ end
88
+
89
+ it 'can match option approximately when :from not given' do
90
+ @session.unselect('Boxerbr', exact: false)
91
+ @session.click_button('awesome')
92
+ expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
93
+ end
94
+ end
95
+
96
+ context 'when `true`' do
97
+ it 'can match select box approximately' do
98
+ expect do
99
+ @session.unselect('Boxerbriefs', from: 'Under', exact: true)
100
+ end.to raise_error(Capybara::ElementNotFound)
101
+ end
102
+
103
+ it 'can match option approximately' do
104
+ expect do
105
+ @session.unselect('Boxerbr', from: 'Underwear', exact: true)
106
+ end.to raise_error(Capybara::ElementNotFound)
107
+ end
108
+
109
+ it 'can match option approximately when :from not given' do
110
+ expect do
111
+ @session.unselect('Boxerbr', exact: true)
112
+ end.to raise_error(Capybara::ElementNotFound)
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,224 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#visit' do
4
+ it 'should fetch a response from the driver with a relative url' do
5
+ @session.visit('/')
6
+ expect(@session).to have_content('Hello world!')
7
+ @session.visit('/foo')
8
+ expect(@session).to have_content('Another World')
9
+ end
10
+
11
+ it 'should fetch a response from the driver with an absolute url with a port' do
12
+ # Preparation
13
+ @session.visit('/')
14
+ root_uri = URI.parse(@session.current_url)
15
+
16
+ @session.visit("http://#{root_uri.host}:#{root_uri.port}/")
17
+ expect(@session).to have_content('Hello world!')
18
+ @session.visit("http://#{root_uri.host}:#{root_uri.port}/foo")
19
+ expect(@session).to have_content('Another World')
20
+ end
21
+
22
+ it "should fetch a response when absolute URI doesn't have a trailing slash" do
23
+ # Preparation
24
+ @session.visit('/foo/bar')
25
+ root_uri = URI.parse(@session.current_url)
26
+
27
+ @session.visit("http://#{root_uri.host}:#{root_uri.port}")
28
+ expect(@session).to have_content('Hello world!')
29
+ end
30
+
31
+ it 'should fetch a response when sequentially visiting same destination with a target' do
32
+ @session.visit('/form')
33
+ expect(@session).to have_css('#form_title')
34
+ @session.visit('/form#form_title')
35
+ expect(@session).to have_css('#form_title')
36
+ end
37
+
38
+ it 'raises any errors caught inside the server', requires: [:server] do
39
+ quietly { @session.visit('/error') }
40
+ expect do
41
+ @session.visit('/')
42
+ end.to raise_error(TestApp::TestAppError)
43
+ end
44
+
45
+ it 'should be able to open non-http url', requires: [:about_scheme] do
46
+ @session.visit('about:blank')
47
+ @session.assert_no_selector :xpath, '/html/body/*'
48
+ end
49
+
50
+ context 'when Capybara.always_include_port is true' do
51
+ let(:root_uri) do
52
+ @session.visit('/')
53
+ URI.parse(@session.current_url)
54
+ end
55
+
56
+ before do
57
+ Capybara.always_include_port = true
58
+ end
59
+
60
+ after do
61
+ Capybara.always_include_port = false
62
+ end
63
+
64
+ it 'should fetch a response from the driver with an absolute url without a port' do
65
+ @session.visit("http://#{root_uri.host}/")
66
+ expect(URI.parse(@session.current_url).port).to eq(root_uri.port)
67
+ expect(@session).to have_content('Hello world!')
68
+
69
+ @session.visit("http://#{root_uri.host}/foo")
70
+ expect(URI.parse(@session.current_url).port).to eq(root_uri.port)
71
+ expect(@session).to have_content('Another World')
72
+ end
73
+
74
+ it 'should add the server port to a visited url if no port specified', requires: [:server] do
75
+ allow(@session.driver).to receive(:visit)
76
+ @session.visit('http://www.example.com')
77
+ expect(@session.driver).to have_received(:visit).with("http://www.example.com:#{@session.server.port}")
78
+ end
79
+
80
+ it 'should not override the visit specified port even if default for scheme', requires: [:server] do
81
+ allow(@session.driver).to receive(:visit)
82
+ @session.visit('http://www.example.com:80')
83
+ expect(@session.driver).to have_received(:visit).with('http://www.example.com:80')
84
+ end
85
+
86
+ it 'should give preference to app_host port if specified', requires: [:server] do
87
+ allow(@session.driver).to receive(:visit)
88
+ Capybara.app_host = 'http://www.example.com:6666'
89
+ @session.visit('/random')
90
+ expect(@session.driver).to have_received(:visit).with('http://www.example.com:6666/random')
91
+ end
92
+
93
+ it "shouldn't override port if no server", requires: [:server] do
94
+ session = Capybara::Session.new(@session.mode, nil)
95
+ allow(session.driver).to receive(:visit)
96
+ session.visit('http://www.google.com')
97
+ expect(session.driver).to have_received(:visit).with('http://www.google.com')
98
+ end
99
+
100
+ it "shouldn't override port if no server but app_host is set", requires: [:server] do
101
+ session = Capybara::Session.new(@session.mode, nil)
102
+ Capybara.app_host = 'http://www.example.com:6666'
103
+ allow(session.driver).to receive(:visit)
104
+ session.visit('http://www.google.com')
105
+ expect(session.driver).to have_received(:visit).with('http://www.google.com')
106
+ end
107
+ end
108
+
109
+ context 'when Capybara.always_include_port is false' do
110
+ before do
111
+ Capybara.always_include_port = false
112
+ end
113
+
114
+ it "shouldn't overwrite port if app_host is set", requires: [:server] do
115
+ session = Capybara::Session.new(@session.mode, nil)
116
+ Capybara.app_host = 'http://www.example.com:6666'
117
+ allow(session.driver).to receive(:visit)
118
+ session.visit('http://www.google.com')
119
+ expect(session.driver).to have_received(:visit).with('http://www.google.com')
120
+ end
121
+
122
+ it "shouldn't overwrite port if port specfified", requires: [:server] do
123
+ session = Capybara::Session.new(@session.mode, nil)
124
+ Capybara.app_host = 'http://www.example.com:6666'
125
+ allow(session.driver).to receive(:visit)
126
+ session.visit('http://www.google.com:99')
127
+ expect(session.driver).to have_received(:visit).with('http://www.google.com:99')
128
+ end
129
+ end
130
+
131
+ context 'without a server', requires: [:server] do
132
+ it 'should respect `app_host`' do
133
+ serverless_session = Capybara::Session.new(@session.mode, nil)
134
+ Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}"
135
+ serverless_session.visit('/foo')
136
+ expect(serverless_session).to have_content('Another World')
137
+ end
138
+
139
+ it 'should visit a fully qualified URL' do
140
+ serverless_session = Capybara::Session.new(@session.mode, nil)
141
+ serverless_session.visit("http://#{@session.server.host}:#{@session.server.port}/foo")
142
+ expect(serverless_session).to have_content('Another World')
143
+ end
144
+ end
145
+
146
+ context 'with Capybara.app_host set' do
147
+ it 'should override server', requires: [:server] do
148
+ another_session = Capybara::Session.new(@session.mode, @session.app.dup)
149
+ Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}"
150
+ another_session.visit('/foo')
151
+ expect(another_session).to have_content('Another World')
152
+ expect(another_session.current_url).to start_with(Capybara.app_host)
153
+ expect(URI.parse(another_session.current_url).port).not_to eq another_session.server.port
154
+ expect(URI.parse(another_session.current_url).port).to eq @session.server.port
155
+ end
156
+
157
+ it 'should append relative path', requires: [:server] do
158
+ Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}/redirect/0"
159
+ @session.visit('/times')
160
+ expect(@session).to have_content('redirection complete')
161
+ end
162
+
163
+ it 'should work if `app_host` has a trailing /', requires: [:server] do
164
+ Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}/"
165
+ @session.visit('/')
166
+ expect(@session).to have_content('Hello world!')
167
+ end
168
+ end
169
+
170
+ it 'should send no referer when visiting a page' do
171
+ @session.visit '/get_referer'
172
+ expect(@session).to have_content 'No referer'
173
+ end
174
+
175
+ it 'should send no referer when visiting a second page' do
176
+ @session.visit '/get_referer'
177
+ @session.visit '/get_referer'
178
+ expect(@session).to have_content 'No referer'
179
+ end
180
+
181
+ it 'should send a referer when following a link' do
182
+ @session.visit '/referer_base'
183
+ @session.find('//a[@href="/get_referer"]').click
184
+ expect(@session).to have_content %r{http://.*/referer_base}
185
+ end
186
+
187
+ it 'should preserve the original referer URL when following a redirect' do
188
+ @session.visit('/referer_base')
189
+ @session.find('//a[@href="/redirect_to_get_referer"]').click
190
+ expect(@session).to have_content %r{http://.*/referer_base}
191
+ end
192
+
193
+ it 'should send a referer when submitting a form' do
194
+ @session.visit '/referer_base'
195
+ @session.find('//input').click
196
+ expect(@session).to have_content %r{http://.*/referer_base}
197
+ end
198
+
199
+ it 'can set cookie if a blank path is specified' do
200
+ @session.visit('')
201
+ @session.visit('/get_cookie')
202
+ expect(@session).to have_content('root cookie')
203
+ end
204
+
205
+ context 'with base element' do
206
+ it 'should use base href with relative links' do
207
+ @session.visit('/base/with_base')
208
+ @session.click_link('Title page')
209
+ expect(@session).to have_current_path('/with_title')
210
+ end
211
+
212
+ it 'should use base href with bare queries' do
213
+ @session.visit('/base/with_base')
214
+ @session.click_link('Bare query')
215
+ expect(@session).to have_current_path('/?a=3')
216
+ end
217
+
218
+ it 'should not use the base href with a new visit call' do
219
+ @session.visit('/base/with_other_base')
220
+ @session.visit('with_html')
221
+ expect(@session).to have_current_path('/with_html')
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#become_closed', requires: %i[windows js] do
4
+ let!(:window) { @session.current_window }
5
+ let(:other_window) do
6
+ @session.window_opened_by do
7
+ @session.find(:css, '#openWindow').click
8
+ end
9
+ end
10
+
11
+ before do
12
+ @session.visit('/with_windows')
13
+ end
14
+
15
+ after do
16
+ @session.document.synchronize(5, errors: [Capybara::CapybaraError]) do
17
+ raise Capybara::CapybaraError if @session.windows.size != 1
18
+ end
19
+ @session.switch_to_window(window)
20
+ end
21
+
22
+ context 'with :wait option' do
23
+ it 'should wait if value of :wait is more than timeout' do
24
+ @session.within_window other_window do
25
+ @session.execute_script('setTimeout(function(){ window.close(); }, 500);')
26
+ end
27
+ Capybara.using_wait_time 0.1 do
28
+ expect(other_window).to become_closed(wait: 5)
29
+ end
30
+ end
31
+
32
+ it 'should raise error if value of :wait is less than timeout' do
33
+ @session.within_window other_window do
34
+ @session.execute_script('setTimeout(function(){ window.close(); }, 1000);')
35
+ end
36
+ Capybara.using_wait_time 2 do
37
+ expect do
38
+ expect(other_window).to become_closed(wait: 0.2)
39
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError, /\Aexpected #<Window @handle=".+"> to become closed after 0.2 seconds\Z/)
40
+ end
41
+ end
42
+ end
43
+
44
+ context 'without :wait option' do
45
+ it 'should wait if value of default_max_wait_time is more than timeout' do
46
+ @session.within_window other_window do
47
+ @session.execute_script('setTimeout(function(){ window.close(); }, 500);')
48
+ end
49
+ Capybara.using_wait_time 5 do
50
+ expect(other_window).to become_closed
51
+ end
52
+ end
53
+
54
+ it 'should raise error if value of default_max_wait_time is less than timeout' do
55
+ @session.within_window other_window do
56
+ @session.execute_script('setTimeout(function(){ window.close(); }, 900);')
57
+ end
58
+ Capybara.using_wait_time 0.4 do
59
+ expect do
60
+ expect(other_window).to become_closed
61
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError, /\Aexpected #<Window @handle=".+"> to become closed after 0.4 seconds\Z/)
62
+ end
63
+ end
64
+ end
65
+
66
+ context 'with not_to' do
67
+ it "should not raise error if window doesn't close before default_max_wait_time" do
68
+ @session.within_window other_window do
69
+ @session.execute_script('setTimeout(function(){ window.close(); }, 1000);')
70
+ end
71
+ Capybara.using_wait_time 0.3 do
72
+ expect do
73
+ expect(other_window).not_to become_closed
74
+ end.not_to raise_error
75
+ end
76
+ end
77
+
78
+ it 'should raise error if window closes before default_max_wait_time' do
79
+ @session.within_window other_window do
80
+ @session.execute_script('setTimeout(function(){ window.close(); }, 700);')
81
+ end
82
+ Capybara.using_wait_time 3.1 do
83
+ expect do
84
+ expect(other_window).not_to become_closed
85
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError, /\Aexpected #<Window @handle=".+"> not to become closed after 3.1 seconds\Z/)
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#current_window', requires: [:windows] do
4
+ before do
5
+ @window = @session.current_window
6
+ @session.visit('/with_windows')
7
+ end
8
+
9
+ after do
10
+ (@session.windows - [@window]).each do |w|
11
+ @session.switch_to_window w
12
+ w.close
13
+ end
14
+ @session.switch_to_window(@window)
15
+ end
16
+
17
+ it 'should return window' do
18
+ expect(@session.current_window).to be_instance_of(Capybara::Window)
19
+ end
20
+
21
+ it 'should be modified by switching to another window' do
22
+ window = @session.window_opened_by { @session.find(:css, '#openWindow').click }
23
+
24
+ expect do
25
+ @session.switch_to_window(window)
26
+ end.to change { @session.current_window }.from(@window).to(window)
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#open_new_window', requires: [:windows] do
4
+ before do
5
+ @window = @session.current_window
6
+ @session.visit('/with_windows')
7
+ end
8
+
9
+ after do
10
+ (@session.windows - [@window]).each do |w|
11
+ @session.switch_to_window w
12
+ w.close
13
+ end
14
+ @session.switch_to_window(@window)
15
+ end
16
+
17
+ it 'should open new window with blank url and title' do
18
+ window = @session.open_new_window
19
+ @session.switch_to_window(window)
20
+ expect(@session.title).to satisfy('be a blank title') { |title| ['', 'about:blank'].include? title }
21
+ expect(@session.current_url).to eq('about:blank')
22
+ end
23
+
24
+ it 'should open window with changeable content' do
25
+ window = @session.open_new_window
26
+ @session.within_window window do
27
+ @session.visit '/with_html'
28
+ expect(@session).to have_css('#first')
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,132 @@
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 '#switch_to_window', requires: [:windows] do
8
+ before do
9
+ @window = @session.current_window
10
+ @session.visit('/with_windows')
11
+ @session.assert_selector(:css, 'body.loaded')
12
+ end
13
+
14
+ after do
15
+ (@session.windows - [@window]).each do |w|
16
+ @session.switch_to_window w
17
+ w.close
18
+ end
19
+ @session.switch_to_window(@window)
20
+ end
21
+
22
+ it 'should raise error when invoked without args' do
23
+ expect do
24
+ @session.switch_to_window
25
+ end.to raise_error(ArgumentError, '`switch_to_window`: either window or block should be provided')
26
+ end
27
+
28
+ it 'should raise error when invoked with window and block' do
29
+ expect do
30
+ @session.switch_to_window(@window) { @session.title == 'Title of the first popup' }
31
+ end.to raise_error(ArgumentError, '`switch_to_window` can take either a block or a window, not both')
32
+ end
33
+
34
+ context 'with an instance of Capybara::Window' do
35
+ it 'should be able to switch to window' do
36
+ window = @session.open_new_window
37
+ expect(@session.title).to eq('With Windows')
38
+ @session.switch_to_window(window)
39
+ expect(@session.title).to satisfy('be a blank title') { |title| ['', 'about:blank'].include? title }
40
+ end
41
+
42
+ it 'should raise error when closed window is passed' do
43
+ original_window = @session.current_window
44
+ new_window = @session.open_new_window
45
+ @session.switch_to_window(new_window)
46
+ new_window.close
47
+ @session.switch_to_window(original_window)
48
+ expect do
49
+ @session.switch_to_window(new_window)
50
+ end.to raise_error(@session.driver.no_such_window_error)
51
+ end
52
+ end
53
+
54
+ context 'with block' do
55
+ before do
56
+ @session.find(:css, '#openTwoWindows').click
57
+ sleep(1) # wait for the windows to open
58
+ end
59
+
60
+ it 'should be able to switch to current window' do
61
+ @session.switch_to_window { @session.title == 'With Windows' }
62
+ expect(@session).to have_css('#openTwoWindows')
63
+ end
64
+
65
+ it 'should find the div in another window' do
66
+ @session.switch_to_window { @session.title == 'Title of popup two' }
67
+ expect(@session).to have_css('#divInPopupTwo')
68
+ end
69
+
70
+ it 'should be able to switch multiple times' do
71
+ @session.switch_to_window { @session.title == 'Title of the first popup' }
72
+ expect(@session).to have_css('#divInPopupOne')
73
+ @session.switch_to_window { @session.title == 'Title of popup two' }
74
+ expect(@session).to have_css('#divInPopupTwo')
75
+ end
76
+
77
+ it 'should return window' do
78
+ window = @session.switch_to_window { @session.title == 'Title of popup two' }
79
+ expect((@session.windows - [@window])).to include(window)
80
+ end
81
+
82
+ it "should raise error when invoked inside `within` as it's nonsense" do
83
+ expect do
84
+ @session.within(:css, '#doesNotOpenWindows') do
85
+ @session.switch_to_window { @session.title == 'With Windows' }
86
+ end
87
+ end.to raise_error(Capybara::ScopeError, /`switch_to_window` is not supposed to be invoked/)
88
+ end
89
+
90
+ it "should raise error when invoked inside `within_frame` as it's nonsense" do
91
+ expect do
92
+ @session.within_frame('frameOne') do
93
+ @session.switch_to_window { @session.title == 'With Windows' }
94
+ end
95
+ end.to raise_error(Capybara::ScopeError, /`switch_to_window` is not supposed to be invoked from/)
96
+ end
97
+
98
+ it 'should allow to be called inside within_window and within_window will still return to original' do
99
+ other_windows = (@session.windows - [@window])
100
+ expect(@session.current_window).to eq(@window)
101
+ @session.within_window other_windows[0] do
102
+ expect(@session.current_window).to eq(other_windows[0])
103
+ @session.switch_to_window other_windows[1]
104
+ expect(@session.current_window).to eq(other_windows[1])
105
+ end
106
+ expect(@session.current_window).to eq(@window)
107
+ end
108
+
109
+ it "should raise error if window matching block wasn't found" do
110
+ original = @session.current_window
111
+ expect do
112
+ @session.switch_to_window { @session.title == 'A title' }
113
+ end.to raise_error(Capybara::WindowError, 'Could not find a window matching block/lambda')
114
+ expect(@session.current_window).to eq(original)
115
+ end
116
+
117
+ it 'should switch to original window if error is raised inside block' do
118
+ original = @session.switch_to_window(@session.windows[1])
119
+ expect do
120
+ @session.switch_to_window { raise 'error' }
121
+ end.to raise_error(StandardError, 'error')
122
+ expect(@session.current_window).to eq(original)
123
+ end
124
+ end
125
+
126
+ it 'should wait for window to appear' do
127
+ @session.find(:css, '#openWindowWithTimeout').click
128
+ expect do
129
+ @session.switch_to_window(wait: 5) { @session.title == 'Title of the first popup' }
130
+ end.not_to raise_error
131
+ end
132
+ end