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,222 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#attach_file' do
4
+ let(:test_file_path) { File.expand_path('../fixtures/test_file.txt', File.dirname(__FILE__)) }
5
+ let(:another_test_file_path) { File.expand_path('../fixtures/another_test_file.txt', File.dirname(__FILE__)) }
6
+ let(:test_jpg_file_path) { File.expand_path('../fixtures/capybara.jpg', File.dirname(__FILE__)) }
7
+ let(:no_extension_file_path) { File.expand_path('../fixtures/no_extension', File.dirname(__FILE__)) }
8
+
9
+ before do
10
+ @session.visit('/form')
11
+ end
12
+
13
+ context 'with normal form' do
14
+ it 'should set a file path by id' do
15
+ @session.attach_file 'form_image', with_os_path_separators(__FILE__)
16
+ @session.click_button('awesome')
17
+ expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
18
+ end
19
+
20
+ it 'should set a file path by label' do
21
+ @session.attach_file 'Image', with_os_path_separators(__FILE__)
22
+ @session.click_button('awesome')
23
+ expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
24
+ end
25
+
26
+ it 'should be able to set on element if no locator passed' do
27
+ ff = @session.find(:file_field, 'Image')
28
+ ff.attach_file(with_os_path_separators(__FILE__))
29
+ @session.click_button('awesome')
30
+ expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
31
+ end
32
+
33
+ it 'casts to string' do
34
+ @session.attach_file :form_image, with_os_path_separators(__FILE__)
35
+ @session.click_button('awesome')
36
+ expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
37
+ end
38
+ end
39
+
40
+ context 'with multipart form' do
41
+ it 'should set a file path by id' do
42
+ @session.attach_file 'form_document', with_os_path_separators(test_file_path)
43
+ @session.click_button('Upload Single')
44
+ expect(@session).to have_content(File.read(test_file_path))
45
+ end
46
+
47
+ it 'should set a file path by label' do
48
+ @session.attach_file 'Single Document', with_os_path_separators(test_file_path)
49
+ @session.click_button('Upload Single')
50
+ expect(@session).to have_content(File.read(test_file_path))
51
+ end
52
+
53
+ it 'should not break if no file is submitted' do
54
+ @session.click_button('Upload Single')
55
+ expect(@session).to have_content('No file uploaded')
56
+ end
57
+
58
+ it 'should send prior hidden field if no file submitted' do
59
+ @session.click_button('Upload Empty With Hidden')
60
+ expect(extract_results(@session)['document2']).to eq('hidden_field')
61
+ expect(extract_content_type(@session)).to start_with('multipart/form-data;')
62
+ end
63
+
64
+ it 'should send content type text/plain when uploading a text file' do
65
+ @session.attach_file 'Single Document', with_os_path_separators(test_file_path)
66
+ @session.click_button 'Upload Single'
67
+ expect(@session).to have_content('text/plain')
68
+ end
69
+
70
+ it 'should send content type image/jpeg when uploading an image' do
71
+ @session.attach_file 'Single Document', with_os_path_separators(test_jpg_file_path)
72
+ @session.click_button 'Upload Single'
73
+ expect(@session).to have_content('image/jpeg')
74
+ end
75
+
76
+ it 'should not break when uploading a file without extension' do
77
+ @session.attach_file 'Single Document', with_os_path_separators(no_extension_file_path)
78
+ @session.click_button 'Upload Single'
79
+ expect(@session).to have_content(File.read(no_extension_file_path))
80
+ end
81
+
82
+ it 'should not break when using HTML5 multiple file input' do
83
+ @session.attach_file 'Multiple Documents', with_os_path_separators(test_file_path)
84
+ @session.click_button('Upload Multiple')
85
+ expect(@session).to have_content(File.read(test_file_path))
86
+ expect(@session.body).to include('1 | ') # number of files
87
+ end
88
+
89
+ it 'should not break when using HTML5 multiple file input uploading multiple files' do
90
+ @session.attach_file('Multiple Documents',
91
+ [test_file_path, another_test_file_path].map { |f| with_os_path_separators(f) })
92
+ @session.click_button('Upload Multiple')
93
+ expect(@session).to have_content('2 | ') # number of files
94
+ expect(@session.body).to include(File.read(test_file_path))
95
+ expect(@session.body).to include(File.read(another_test_file_path))
96
+ end
97
+
98
+ it 'should not send anything when attaching no files to a multiple upload field' do
99
+ @session.click_button('Upload Empty Multiple')
100
+ expect(@session).to have_content('Successfully ignored empty file field')
101
+ end
102
+
103
+ it 'should not append files to already attached' do
104
+ @session.attach_file 'Multiple Documents', with_os_path_separators(test_file_path)
105
+ @session.attach_file 'Multiple Documents', with_os_path_separators(another_test_file_path)
106
+ @session.click_button('Upload Multiple')
107
+ expect(@session).to have_content('1 | ') # number of files
108
+ expect(@session.body).to include(File.read(another_test_file_path))
109
+ expect(@session.body).not_to include(File.read(test_file_path))
110
+ end
111
+
112
+ it 'should fire change once when uploading multiple files from empty', requires: [:js] do
113
+ @session.visit('with_js')
114
+ @session.attach_file('multiple-file',
115
+ [test_file_path, another_test_file_path].map { |f| with_os_path_separators(f) })
116
+ expect(@session).to have_css('.file_change', count: 1)
117
+ end
118
+
119
+ it 'should fire change once for each set of files uploaded', requires: [:js] do
120
+ @session.visit('with_js')
121
+ @session.attach_file('multiple-file', [test_jpg_file_path].map { |f| with_os_path_separators(f) })
122
+ @session.attach_file('multiple-file',
123
+ [test_file_path, another_test_file_path].map { |f| with_os_path_separators(f) })
124
+ expect(@session).to have_css('.file_change', count: 2)
125
+ end
126
+ end
127
+
128
+ context "with a locator that doesn't exist" do
129
+ it 'should raise an error' do
130
+ msg = /Unable to find file field "does not exist"/
131
+ expect do
132
+ @session.attach_file('does not exist', with_os_path_separators(test_file_path))
133
+ end.to raise_error(Capybara::ElementNotFound, msg)
134
+ end
135
+ end
136
+
137
+ context "with a path that doesn't exist" do
138
+ it 'should raise an error' do
139
+ expect { @session.attach_file('Image', '/no_such_file.png') }.to raise_error(Capybara::FileNotFound)
140
+ end
141
+ end
142
+
143
+ context 'with :exact option' do
144
+ it 'should set a file path by partial label when false' do
145
+ @session.attach_file 'Imag', with_os_path_separators(__FILE__), exact: false
146
+ @session.click_button('awesome')
147
+ expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
148
+ end
149
+
150
+ it 'should not allow partial matches when true' do
151
+ expect do
152
+ @session.attach_file 'Imag', with_os_path_separators(__FILE__), exact: true
153
+ end.to raise_error(Capybara::ElementNotFound)
154
+ end
155
+ end
156
+
157
+ context 'with :make_visible option', requires: %i[js es_args] do
158
+ it 'applies a default style change when true' do
159
+ @session.visit('/with_js')
160
+ expect do
161
+ @session.attach_file('hidden_file', with_os_path_separators(__FILE__))
162
+ end.to raise_error Capybara::ElementNotFound
163
+ expect do
164
+ @session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: true)
165
+ end.not_to raise_error
166
+ end
167
+
168
+ it 'accepts a hash of styles to be applied' do
169
+ @session.visit('/with_js')
170
+ expect do
171
+ @session.attach_file('hidden_file',
172
+ with_os_path_separators(__FILE__),
173
+ make_visible: { opacity: 1, display: 'block' })
174
+ end.not_to raise_error
175
+ end
176
+
177
+ it 'raises an error when the file input is not made visible' do
178
+ @session.visit('/with_js')
179
+ expect do
180
+ @session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: { color: 'red' })
181
+ end.to raise_error(Capybara::ExpectationNotMet)
182
+ end
183
+
184
+ it 'resets the style when done' do
185
+ @session.visit('/with_js')
186
+ @session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: true)
187
+ expect(@session.evaluate_script('arguments[0].style.display', @session.find(:css, '#hidden_file', visible: :all))).to eq 'none'
188
+ end
189
+
190
+ it 'should fire change' do
191
+ @session.visit('/with_js')
192
+ @session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: true)
193
+ expect(@session).to have_css('.file_change')
194
+ end
195
+ end
196
+
197
+ context 'with a block', requires: %i[js] do
198
+ it 'can upload by clicking the file input' do
199
+ @session.attach_file(with_os_path_separators(__FILE__)) do
200
+ @session.find(:file_field, 'form[image]').click
201
+ end
202
+ @session.click_button('awesome')
203
+ expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
204
+ end
205
+
206
+ it 'can upload by clicking the label' do
207
+ @session.attach_file(with_os_path_separators(__FILE__)) do
208
+ @session.find(:label, 'Hidden Image').click
209
+ end
210
+ @session.click_button('awesome')
211
+ expect(extract_results(@session)['hidden_image']).to end_with(File.basename(__FILE__))
212
+ end
213
+
214
+ it 'should fire change' do
215
+ @session.visit('/with_js')
216
+ @session.attach_file(with_os_path_separators(__FILE__)) do
217
+ @session.find(:label, 'Label for hidden file input').click
218
+ end
219
+ expect(@session).to have_css('.file_change')
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#body' do
4
+ it 'should return the unmodified page body' do
5
+ @session.visit('/')
6
+ expect(@session).to have_content('Hello world!') # wait for content to appear if visit is async
7
+ expect(@session.body).to include('Hello world!')
8
+ end
9
+
10
+ context 'encoding of response between ascii and utf8' do
11
+ it 'should be valid with html entities' do
12
+ @session.visit('/with_html_entities')
13
+ expect(@session).to have_content('Encoding') # wait for content to appear if visit is async
14
+ expect { @session.body.encode!('UTF-8') }.not_to raise_error
15
+ end
16
+
17
+ it 'should be valid without html entities' do
18
+ @session.visit('/with_html')
19
+ expect(@session).to have_content('This is a test') # wait for content to appear if visit is async
20
+ expect { @session.body.encode!('UTF-8') }.not_to raise_error
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,251 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#check' do
4
+ before do
5
+ @session.visit('/form')
6
+ end
7
+
8
+ describe "'checked' attribute" do
9
+ it 'should be true if checked' do
10
+ @session.check('Terms of Use')
11
+ expect(@session.find(:xpath, "//input[@id='form_terms_of_use']")['checked']).to be_truthy
12
+ end
13
+
14
+ it 'should be false if unchecked' do
15
+ expect(@session.find(:xpath, "//input[@id='form_terms_of_use']")['checked']).to be_falsey
16
+ end
17
+ end
18
+
19
+ it 'should trigger associated events', requires: [:js] do
20
+ @session.visit('/with_js')
21
+ @session.check('checkbox_with_event')
22
+ expect(@session).to have_css('#checkbox_event_triggered')
23
+ end
24
+
25
+ describe 'checking' do
26
+ it 'should not change an already checked checkbox' do
27
+ expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
28
+ @session.check('form_pets_dog')
29
+ expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
30
+ end
31
+
32
+ it 'should check an unchecked checkbox' do
33
+ expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
34
+ @session.check('form_pets_cat')
35
+ expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).to be_checked
36
+ end
37
+ end
38
+
39
+ describe 'unchecking' do
40
+ it 'should not change an already unchecked checkbox' do
41
+ expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
42
+ @session.uncheck('form_pets_cat')
43
+ expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
44
+ end
45
+
46
+ it 'should uncheck a checked checkbox' do
47
+ expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
48
+ @session.uncheck('form_pets_dog')
49
+ expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).not_to be_checked
50
+ end
51
+ end
52
+
53
+ it 'should check a checkbox by id' do
54
+ @session.check('form_pets_cat')
55
+ @session.click_button('awesome')
56
+ expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
57
+ end
58
+
59
+ it 'should check a checkbox by label' do
60
+ @session.check('Cat')
61
+ @session.click_button('awesome')
62
+ expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
63
+ end
64
+
65
+ it 'should work without a locator string' do
66
+ @session.check(id: 'form_pets_cat')
67
+ @session.click_button('awesome')
68
+ expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
69
+ end
70
+
71
+ it 'should be able to check itself if no locator specified' do
72
+ cb = @session.find(:id, 'form_pets_cat')
73
+ cb.check
74
+ @session.click_button('awesome')
75
+ expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
76
+ end
77
+
78
+ it 'casts to string' do
79
+ @session.check(:form_pets_cat)
80
+ @session.click_button('awesome')
81
+ expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
82
+ end
83
+
84
+ context "with a locator that doesn't exist" do
85
+ it 'should raise an error' do
86
+ msg = /Unable to find checkbox "does not exist"/
87
+ expect do
88
+ @session.check('does not exist')
89
+ end.to raise_error(Capybara::ElementNotFound, msg)
90
+ end
91
+ end
92
+
93
+ context 'with a disabled checkbox' do
94
+ it 'should raise an error' do
95
+ msg = 'Unable to find visible checkbox "Disabled Checkbox" that is not disabled'
96
+ expect do
97
+ @session.check('Disabled Checkbox')
98
+ end.to raise_error(Capybara::ElementNotFound, msg)
99
+ end
100
+ end
101
+
102
+ context 'with :exact option' do
103
+ it 'should accept partial matches when false' do
104
+ @session.check('Ham', exact: false)
105
+ @session.click_button('awesome')
106
+ expect(extract_results(@session)['pets']).to include('hamster')
107
+ end
108
+
109
+ it 'should not accept partial matches when true' do
110
+ expect do
111
+ @session.check('Ham', exact: true)
112
+ end.to raise_error(Capybara::ElementNotFound)
113
+ end
114
+ end
115
+
116
+ context 'with `option` option' do
117
+ it 'can check boxes by their value' do
118
+ @session.check('form[pets][]', option: 'cat')
119
+ @session.click_button('awesome')
120
+ expect(extract_results(@session)['pets']).to include('cat')
121
+ end
122
+
123
+ it 'should alias `with`' do
124
+ @session.check('form[pets][]', with: 'cat')
125
+ @session.click_button('awesome')
126
+ expect(extract_results(@session)['pets']).to include('cat')
127
+ end
128
+
129
+ it 'should raise an error if option not found' do
130
+ expect do
131
+ @session.check('form[pets][]', option: 'elephant')
132
+ end.to raise_error(Capybara::ElementNotFound)
133
+ end
134
+ end
135
+
136
+ context 'when checkbox hidden' do
137
+ context 'with Capybara.automatic_label_click == true' do
138
+ around do |spec|
139
+ old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
140
+ spec.run
141
+ Capybara.automatic_label_click = old_click_label
142
+ end
143
+
144
+ it 'should check via clicking the label with :for attribute if possible' do
145
+ expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be_truthy
146
+ @session.check('form_cars_tesla')
147
+ @session.click_button('awesome')
148
+ expect(extract_results(@session)['cars']).to include('tesla')
149
+ end
150
+
151
+ it 'should check via clicking the wrapping label if possible' do
152
+ expect(@session.find(:checkbox, 'form_cars_mclaren', unchecked: true, visible: :hidden)).to be_truthy
153
+ @session.check('form_cars_mclaren')
154
+ @session.click_button('awesome')
155
+ expect(extract_results(@session)['cars']).to include('mclaren')
156
+ end
157
+
158
+ it 'should check via clicking the label with :for attribute if locator nil' do
159
+ cb = @session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)
160
+ cb.check
161
+ @session.click_button('awesome')
162
+ expect(extract_results(@session)['cars']).to include('tesla')
163
+ end
164
+
165
+ it 'should check self via clicking the wrapping label if locator nil' do
166
+ cb = @session.find(:checkbox, 'form_cars_mclaren', unchecked: true, visible: :hidden)
167
+ cb.check
168
+ @session.click_button('awesome')
169
+ expect(extract_results(@session)['cars']).to include('mclaren')
170
+ end
171
+
172
+ it 'should not click the label if unneeded' do
173
+ expect(@session.find(:checkbox, 'form_cars_jaguar', checked: true, visible: :hidden)).to be_truthy
174
+ @session.check('form_cars_jaguar')
175
+ @session.click_button('awesome')
176
+ expect(extract_results(@session)['cars']).to include('jaguar')
177
+ end
178
+
179
+ it 'should raise original error when no label available' do
180
+ expect { @session.check('form_cars_ariel') }.to raise_error(Capybara::ElementNotFound, /Unable to find visible checkbox "form_cars_ariel"/)
181
+ end
182
+
183
+ it 'should raise error if not allowed to click label' do
184
+ expect { @session.check('form_cars_mclaren', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, /Unable to find visible checkbox "form_cars_mclaren"/)
185
+ end
186
+ end
187
+
188
+ context 'with Capybara.automatic_label_click == false' do
189
+ around do |spec|
190
+ old_label_click, Capybara.automatic_label_click = Capybara.automatic_label_click, false
191
+ spec.run
192
+ Capybara.automatic_label_click = old_label_click
193
+ end
194
+
195
+ it 'should raise error if checkbox not visible' do
196
+ expect { @session.check('form_cars_mclaren') }.to raise_error(Capybara::ElementNotFound, /Unable to find visible checkbox "form_cars_mclaren"/)
197
+ end
198
+
199
+ it 'should include node filter in error if verified' do
200
+ expect { @session.check('form_cars_maserati') }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_maserati" that is not disabled')
201
+ end
202
+
203
+ context 'with allow_label_click == true' do
204
+ it 'should check via the label if input is hidden' do
205
+ expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be_truthy
206
+ @session.check('form_cars_tesla', allow_label_click: true)
207
+ @session.click_button('awesome')
208
+ expect(extract_results(@session)['cars']).to include('tesla')
209
+ end
210
+
211
+ it 'should not wait the full time if label can be clicked' do
212
+ expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be_truthy
213
+ start_time = Time.now
214
+ @session.check('form_cars_tesla', allow_label_click: true, wait: 10)
215
+ end_time = Time.now
216
+ expect(end_time - start_time).to be < 10
217
+ end
218
+
219
+ it 'should check via the label if input is moved off the left edge of the page' do
220
+ expect(@session.find(:checkbox, 'form_cars_pagani', unchecked: true, visible: :all)).to be_truthy
221
+ @session.check('form_cars_pagani', allow_label_click: true)
222
+ @session.click_button('awesome')
223
+ expect(extract_results(@session)['cars']).to include('pagani')
224
+ end
225
+
226
+ it 'should check via the label if input is visible but blocked by another element' do
227
+ expect(@session.find(:checkbox, 'form_cars_bugatti', unchecked: true, visible: :all)).to be_truthy
228
+ @session.check('form_cars_bugatti', allow_label_click: true)
229
+ @session.click_button('awesome')
230
+ expect(extract_results(@session)['cars']).to include('bugatti')
231
+ end
232
+
233
+ it 'should check via label if multiple labels' do
234
+ expect(@session).to have_field('multi_label_checkbox', checked: false, visible: :hidden)
235
+ @session.check('Label to click', allow_label_click: true)
236
+ expect(@session).to have_field('multi_label_checkbox', checked: true, visible: :hidden)
237
+ end
238
+ end
239
+
240
+ context 'with allow_label_click options', requires: [:js] do
241
+ it 'should allow offsets to click location on label' do
242
+ Capybara.w3c_click_offset = false
243
+ expect(@session.find(:checkbox, 'form_cars_lotus', unchecked: true, visible: :hidden)).to be_truthy
244
+ @session.check('form_cars_lotus', allow_label_click: { x: 90, y: 10 })
245
+ @session.click_button('awesome')
246
+ expect(extract_results(@session)['cars']).to include('lotus')
247
+ end
248
+ end
249
+ end
250
+ end
251
+ end
@@ -0,0 +1,127 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara::SpecHelper.spec '#choose' do
4
+ before do
5
+ @session.visit('/form')
6
+ end
7
+
8
+ it 'should choose a radio button by id' do
9
+ @session.choose('gender_male')
10
+ @session.click_button('awesome')
11
+ expect(extract_results(@session)['gender']).to eq('male')
12
+ end
13
+
14
+ it 'ignores readonly attribute on radio buttons' do
15
+ @session.choose('gender_both')
16
+ @session.click_button('awesome')
17
+ expect(extract_results(@session)['gender']).to eq('both')
18
+ end
19
+
20
+ it 'should choose a radio button by label' do
21
+ @session.choose('Both')
22
+ @session.click_button('awesome')
23
+ expect(extract_results(@session)['gender']).to eq('both')
24
+ end
25
+
26
+ it 'should work without a locator string' do
27
+ @session.choose(id: 'gender_male')
28
+ @session.click_button('awesome')
29
+ expect(extract_results(@session)['gender']).to eq('male')
30
+ end
31
+
32
+ it 'should be able to choose self when no locator string specified' do
33
+ rb = @session.find(:id, 'gender_male')
34
+ rb.choose
35
+ @session.click_button('awesome')
36
+ expect(extract_results(@session)['gender']).to eq('male')
37
+ end
38
+
39
+ it 'casts to string' do
40
+ @session.choose('Both')
41
+ @session.click_button(:awesome)
42
+ expect(extract_results(@session)['gender']).to eq('both')
43
+ end
44
+
45
+ context "with a locator that doesn't exist" do
46
+ it 'should raise an error' do
47
+ msg = /Unable to find radio button "does not exist"/
48
+ expect do
49
+ @session.choose('does not exist')
50
+ end.to raise_error(Capybara::ElementNotFound, msg)
51
+ end
52
+ end
53
+
54
+ context 'with a disabled radio button' do
55
+ it 'should raise an error' do
56
+ expect do
57
+ @session.choose('Disabled Radio')
58
+ end.to raise_error(Capybara::ElementNotFound)
59
+ end
60
+ end
61
+
62
+ context 'with :exact option' do
63
+ it 'should accept partial matches when false' do
64
+ @session.choose('Mal', exact: false)
65
+ @session.click_button('awesome')
66
+ expect(extract_results(@session)['gender']).to eq('male')
67
+ end
68
+
69
+ it 'should not accept partial matches when true' do
70
+ expect do
71
+ @session.choose('Mal', exact: true)
72
+ end.to raise_error(Capybara::ElementNotFound)
73
+ end
74
+ end
75
+
76
+ context 'with `option` option' do
77
+ it 'can check radio buttons by their value' do
78
+ @session.choose('form[gender]', option: 'male')
79
+ @session.click_button('awesome')
80
+ expect(extract_results(@session)['gender']).to eq('male')
81
+ end
82
+
83
+ it 'should alias `:with` option' do
84
+ @session.choose('form[gender]', with: 'male')
85
+ @session.click_button('awesome')
86
+ expect(extract_results(@session)['gender']).to eq('male')
87
+ end
88
+
89
+ it 'should raise an error if option not found' do
90
+ expect do
91
+ @session.choose('form[gender]', option: 'hermaphrodite')
92
+ end.to raise_error(Capybara::ElementNotFound)
93
+ end
94
+ end
95
+
96
+ context 'with hidden radio buttons' do
97
+ context 'with Capybara.automatic_label_click == true' do
98
+ around do |spec|
99
+ old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
100
+ spec.run
101
+ Capybara.automatic_label_click = old_click_label
102
+ end
103
+
104
+ it 'should select by clicking the label if available' do
105
+ @session.choose('party_democrat')
106
+ @session.click_button('awesome')
107
+ expect(extract_results(@session)['party']).to eq('democrat')
108
+ end
109
+
110
+ it 'should select self by clicking the label if no locator specified' do
111
+ cb = @session.find(:id, 'party_democrat', visible: :hidden)
112
+ cb.choose
113
+ @session.click_button('awesome')
114
+ expect(extract_results(@session)['party']).to eq('democrat')
115
+ end
116
+
117
+ it 'should raise error if not allowed to click label' do
118
+ expect { @session.choose('party_democrat', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, /Unable to find visible radio button "party_democrat"/)
119
+ end
120
+ end
121
+ end
122
+
123
+ it 'should return the chosen radio button' do
124
+ el = @session.find(:radio_button, 'gender_male')
125
+ expect(@session.choose('gender_male')).to eq el
126
+ end
127
+ end