capybara 2.7.0 → 3.35.3

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 (318) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +1 -0
  3. data/History.md +1147 -11
  4. data/License.txt +1 -1
  5. data/README.md +252 -131
  6. data/lib/capybara/config.rb +92 -0
  7. data/lib/capybara/cucumber.rb +3 -3
  8. data/lib/capybara/driver/base.rb +52 -21
  9. data/lib/capybara/driver/node.rb +48 -14
  10. data/lib/capybara/dsl.rb +16 -9
  11. data/lib/capybara/helpers.rb +72 -81
  12. data/lib/capybara/minitest/spec.rb +267 -0
  13. data/lib/capybara/minitest.rb +385 -0
  14. data/lib/capybara/node/actions.rb +337 -89
  15. data/lib/capybara/node/base.rb +50 -32
  16. data/lib/capybara/node/document.rb +19 -3
  17. data/lib/capybara/node/document_matchers.rb +22 -24
  18. data/lib/capybara/node/element.rb +388 -125
  19. data/lib/capybara/node/finders.rb +231 -121
  20. data/lib/capybara/node/matchers.rb +503 -217
  21. data/lib/capybara/node/simple.rb +64 -27
  22. data/lib/capybara/queries/ancestor_query.rb +27 -0
  23. data/lib/capybara/queries/base_query.rb +87 -11
  24. data/lib/capybara/queries/current_path_query.rb +24 -24
  25. data/lib/capybara/queries/match_query.rb +15 -10
  26. data/lib/capybara/queries/selector_query.rb +675 -81
  27. data/lib/capybara/queries/sibling_query.rb +26 -0
  28. data/lib/capybara/queries/style_query.rb +45 -0
  29. data/lib/capybara/queries/text_query.rb +88 -20
  30. data/lib/capybara/queries/title_query.rb +9 -11
  31. data/lib/capybara/rack_test/browser.rb +63 -39
  32. data/lib/capybara/rack_test/css_handlers.rb +6 -4
  33. data/lib/capybara/rack_test/driver.rb +26 -16
  34. data/lib/capybara/rack_test/errors.rb +6 -0
  35. data/lib/capybara/rack_test/form.rb +73 -58
  36. data/lib/capybara/rack_test/node.rb +187 -67
  37. data/lib/capybara/rails.rb +4 -8
  38. data/lib/capybara/registration_container.rb +44 -0
  39. data/lib/capybara/registrations/drivers.rb +42 -0
  40. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  41. data/lib/capybara/registrations/servers.rb +45 -0
  42. data/lib/capybara/result.rb +142 -14
  43. data/lib/capybara/rspec/features.rb +17 -42
  44. data/lib/capybara/rspec/matcher_proxies.rb +82 -0
  45. data/lib/capybara/rspec/matchers/base.rb +111 -0
  46. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  47. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  48. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  49. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  50. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  51. data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
  52. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  53. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  54. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  55. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  56. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  57. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  58. data/lib/capybara/rspec/matchers.rb +143 -244
  59. data/lib/capybara/rspec.rb +10 -12
  60. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  61. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  62. data/lib/capybara/selector/css.rb +102 -0
  63. data/lib/capybara/selector/definition/button.rb +63 -0
  64. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  65. data/lib/capybara/selector/definition/css.rb +10 -0
  66. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  67. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  68. data/lib/capybara/selector/definition/element.rb +28 -0
  69. data/lib/capybara/selector/definition/field.rb +40 -0
  70. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  71. data/lib/capybara/selector/definition/file_field.rb +13 -0
  72. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  73. data/lib/capybara/selector/definition/frame.rb +17 -0
  74. data/lib/capybara/selector/definition/id.rb +6 -0
  75. data/lib/capybara/selector/definition/label.rb +62 -0
  76. data/lib/capybara/selector/definition/link.rb +54 -0
  77. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  78. data/lib/capybara/selector/definition/option.rb +27 -0
  79. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  80. data/lib/capybara/selector/definition/select.rb +81 -0
  81. data/lib/capybara/selector/definition/table.rb +109 -0
  82. data/lib/capybara/selector/definition/table_row.rb +21 -0
  83. data/lib/capybara/selector/definition/xpath.rb +5 -0
  84. data/lib/capybara/selector/definition.rb +278 -0
  85. data/lib/capybara/selector/filter.rb +3 -46
  86. data/lib/capybara/selector/filter_set.rb +124 -0
  87. data/lib/capybara/selector/filters/base.rb +77 -0
  88. data/lib/capybara/selector/filters/expression_filter.rb +22 -0
  89. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  90. data/lib/capybara/selector/filters/node_filter.rb +31 -0
  91. data/lib/capybara/selector/regexp_disassembler.rb +214 -0
  92. data/lib/capybara/selector/selector.rb +155 -0
  93. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  94. data/lib/capybara/selector.rb +232 -369
  95. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  96. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  97. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  98. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  99. data/lib/capybara/selenium/driver.rb +380 -142
  100. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  101. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
  102. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
  103. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  104. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  105. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  106. data/lib/capybara/selenium/extensions/find.rb +110 -0
  107. data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
  108. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  109. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  110. data/lib/capybara/selenium/logger_suppressor.rb +40 -0
  111. data/lib/capybara/selenium/node.rb +528 -97
  112. data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
  113. data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
  114. data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  115. data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  116. data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  117. data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
  118. data/lib/capybara/selenium/patches/atoms.rb +18 -0
  119. data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  120. data/lib/capybara/selenium/patches/logs.rb +45 -0
  121. data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  122. data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  123. data/lib/capybara/server/animation_disabler.rb +63 -0
  124. data/lib/capybara/server/checker.rb +44 -0
  125. data/lib/capybara/server/middleware.rb +71 -0
  126. data/lib/capybara/server.rb +74 -71
  127. data/lib/capybara/session/config.rb +126 -0
  128. data/lib/capybara/session/matchers.rb +44 -27
  129. data/lib/capybara/session.rb +500 -297
  130. data/lib/capybara/spec/fixtures/no_extension +1 -0
  131. data/lib/capybara/spec/public/jquery.js +5 -5
  132. data/lib/capybara/spec/public/offset.js +6 -0
  133. data/lib/capybara/spec/public/test.js +168 -14
  134. data/lib/capybara/spec/session/accept_alert_spec.rb +37 -14
  135. data/lib/capybara/spec/session/accept_confirm_spec.rb +7 -6
  136. data/lib/capybara/spec/session/accept_prompt_spec.rb +38 -10
  137. data/lib/capybara/spec/session/all_spec.rb +179 -59
  138. data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
  140. data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
  141. data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  142. data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  143. data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
  144. data/lib/capybara/spec/session/assert_title_spec.rb +93 -0
  145. data/lib/capybara/spec/session/attach_file_spec.rb +154 -48
  146. data/lib/capybara/spec/session/body_spec.rb +12 -13
  147. data/lib/capybara/spec/session/check_spec.rb +168 -41
  148. data/lib/capybara/spec/session/choose_spec.rb +75 -23
  149. data/lib/capybara/spec/session/click_button_spec.rb +243 -175
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +57 -32
  151. data/lib/capybara/spec/session/click_link_spec.rb +100 -53
  152. data/lib/capybara/spec/session/current_scope_spec.rb +11 -10
  153. data/lib/capybara/spec/session/current_url_spec.rb +61 -35
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +7 -7
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +5 -4
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +13 -6
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +21 -7
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +91 -34
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +45 -3
  162. data/lib/capybara/spec/session/execute_script_spec.rb +24 -4
  163. data/lib/capybara/spec/session/fill_in_spec.rb +166 -64
  164. data/lib/capybara/spec/session/find_button_spec.rb +37 -18
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
  166. data/lib/capybara/spec/session/find_field_spec.rb +57 -34
  167. data/lib/capybara/spec/session/find_link_spec.rb +47 -10
  168. data/lib/capybara/spec/session/find_spec.rb +290 -144
  169. data/lib/capybara/spec/session/first_spec.rb +91 -48
  170. data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
  171. data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
  172. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
  174. data/lib/capybara/spec/session/go_back_spec.rb +3 -2
  175. data/lib/capybara/spec/session/go_forward_spec.rb +3 -2
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +76 -19
  180. data/lib/capybara/spec/session/has_css_spec.rb +277 -131
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +98 -26
  182. data/lib/capybara/spec/session/has_field_spec.rb +177 -107
  183. data/lib/capybara/spec/session/has_link_spec.rb +13 -12
  184. data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
  185. data/lib/capybara/spec/session/has_select_spec.rb +191 -95
  186. data/lib/capybara/spec/session/has_selector_spec.rb +128 -64
  187. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  188. data/lib/capybara/spec/session/has_table_spec.rb +172 -5
  189. data/lib/capybara/spec/session/has_text_spec.rb +126 -60
  190. data/lib/capybara/spec/session/has_title_spec.rb +35 -12
  191. data/lib/capybara/spec/session/has_xpath_spec.rb +74 -53
  192. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
  193. data/lib/capybara/spec/session/html_spec.rb +14 -6
  194. data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
  195. data/lib/capybara/spec/session/node_spec.rb +1028 -131
  196. data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
  197. data/lib/capybara/spec/session/refresh_spec.rb +34 -0
  198. data/lib/capybara/spec/session/reset_session_spec.rb +75 -34
  199. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
  200. data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
  201. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +11 -15
  202. data/lib/capybara/spec/session/save_page_spec.rb +42 -55
  203. data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
  204. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  205. data/lib/capybara/spec/session/scroll_spec.rb +117 -0
  206. data/lib/capybara/spec/session/select_spec.rb +112 -85
  207. data/lib/capybara/spec/session/selectors_spec.rb +71 -8
  208. data/lib/capybara/spec/session/sibling_spec.rb +52 -0
  209. data/lib/capybara/spec/session/text_spec.rb +38 -23
  210. data/lib/capybara/spec/session/title_spec.rb +17 -5
  211. data/lib/capybara/spec/session/uncheck_spec.rb +71 -12
  212. data/lib/capybara/spec/session/unselect_spec.rb +44 -43
  213. data/lib/capybara/spec/session/visit_spec.rb +99 -32
  214. data/lib/capybara/spec/session/window/become_closed_spec.rb +33 -29
  215. data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
  216. data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
  217. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +39 -30
  218. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +17 -10
  219. data/lib/capybara/spec/session/window/window_spec.rb +121 -73
  220. data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
  221. data/lib/capybara/spec/session/window/within_window_spec.rb +52 -82
  222. data/lib/capybara/spec/session/within_spec.rb +76 -43
  223. data/lib/capybara/spec/spec_helper.rb +67 -33
  224. data/lib/capybara/spec/test_app.rb +85 -36
  225. data/lib/capybara/spec/views/animated.erb +49 -0
  226. data/lib/capybara/spec/views/buttons.erb +1 -1
  227. data/lib/capybara/spec/views/fieldsets.erb +1 -1
  228. data/lib/capybara/spec/views/form.erb +227 -20
  229. data/lib/capybara/spec/views/frame_child.erb +10 -2
  230. data/lib/capybara/spec/views/frame_one.erb +2 -1
  231. data/lib/capybara/spec/views/frame_parent.erb +2 -2
  232. data/lib/capybara/spec/views/frame_two.erb +1 -1
  233. data/lib/capybara/spec/views/header_links.erb +1 -1
  234. data/lib/capybara/spec/views/host_links.erb +1 -1
  235. data/lib/capybara/spec/views/initial_alert.erb +10 -0
  236. data/lib/capybara/spec/views/obscured.erb +47 -0
  237. data/lib/capybara/spec/views/offset.erb +32 -0
  238. data/lib/capybara/spec/views/path.erb +1 -1
  239. data/lib/capybara/spec/views/popup_one.erb +1 -1
  240. data/lib/capybara/spec/views/popup_two.erb +1 -1
  241. data/lib/capybara/spec/views/postback.erb +1 -1
  242. data/lib/capybara/spec/views/react.erb +45 -0
  243. data/lib/capybara/spec/views/scroll.erb +20 -0
  244. data/lib/capybara/spec/views/spatial.erb +31 -0
  245. data/lib/capybara/spec/views/tables.erb +69 -2
  246. data/lib/capybara/spec/views/with_animation.erb +82 -0
  247. data/lib/capybara/spec/views/with_base_tag.erb +1 -1
  248. data/lib/capybara/spec/views/with_count.erb +1 -1
  249. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  250. data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
  251. data/lib/capybara/spec/views/with_hover.erb +7 -1
  252. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  253. data/lib/capybara/spec/views/with_html.erb +100 -10
  254. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  255. data/lib/capybara/spec/views/with_html_entities.erb +1 -1
  256. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  257. data/lib/capybara/spec/views/with_js.erb +49 -3
  258. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  259. data/lib/capybara/spec/views/with_namespace.erb +20 -0
  260. data/lib/capybara/spec/views/with_scope.erb +1 -1
  261. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  262. data/lib/capybara/spec/views/with_simple_html.erb +1 -1
  263. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  264. data/lib/capybara/spec/views/with_title.erb +1 -1
  265. data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
  266. data/lib/capybara/spec/views/with_windows.erb +7 -1
  267. data/lib/capybara/spec/views/within_frames.erb +6 -3
  268. data/lib/capybara/version.rb +2 -1
  269. data/lib/capybara/window.rb +39 -21
  270. data/lib/capybara.rb +208 -186
  271. data/spec/basic_node_spec.rb +52 -39
  272. data/spec/capybara_spec.rb +72 -50
  273. data/spec/css_builder_spec.rb +101 -0
  274. data/spec/css_splitter_spec.rb +38 -0
  275. data/spec/dsl_spec.rb +81 -61
  276. data/spec/filter_set_spec.rb +46 -0
  277. data/spec/fixtures/capybara.csv +1 -0
  278. data/spec/fixtures/certificate.pem +25 -0
  279. data/spec/fixtures/key.pem +27 -0
  280. data/spec/fixtures/selenium_driver_rspec_failure.rb +7 -3
  281. data/spec/fixtures/selenium_driver_rspec_success.rb +7 -3
  282. data/spec/minitest_spec.rb +164 -0
  283. data/spec/minitest_spec_spec.rb +162 -0
  284. data/spec/per_session_config_spec.rb +68 -0
  285. data/spec/rack_test_spec.rb +189 -96
  286. data/spec/regexp_dissassembler_spec.rb +250 -0
  287. data/spec/result_spec.rb +143 -13
  288. data/spec/rspec/features_spec.rb +38 -32
  289. data/spec/rspec/scenarios_spec.rb +9 -7
  290. data/spec/rspec/shared_spec_matchers.rb +959 -0
  291. data/spec/rspec/views_spec.rb +9 -3
  292. data/spec/rspec_matchers_spec.rb +62 -0
  293. data/spec/rspec_spec.rb +127 -30
  294. data/spec/sauce_spec_chrome.rb +43 -0
  295. data/spec/selector_spec.rb +458 -37
  296. data/spec/selenium_spec_chrome.rb +196 -9
  297. data/spec/selenium_spec_chrome_remote.rb +100 -0
  298. data/spec/selenium_spec_edge.rb +47 -0
  299. data/spec/selenium_spec_firefox.rb +210 -0
  300. data/spec/selenium_spec_firefox_remote.rb +80 -0
  301. data/spec/selenium_spec_ie.rb +150 -0
  302. data/spec/selenium_spec_safari.rb +148 -0
  303. data/spec/server_spec.rb +200 -101
  304. data/spec/session_spec.rb +91 -0
  305. data/spec/shared_selenium_node.rb +83 -0
  306. data/spec/shared_selenium_session.rb +558 -0
  307. data/spec/spec_helper.rb +94 -2
  308. data/spec/xpath_builder_spec.rb +93 -0
  309. metadata +420 -60
  310. data/lib/capybara/query.rb +0 -7
  311. data/lib/capybara/spec/session/assert_current_path.rb +0 -60
  312. data/lib/capybara/spec/session/assert_selector.rb +0 -148
  313. data/lib/capybara/spec/session/assert_text.rb +0 -196
  314. data/lib/capybara/spec/session/assert_title.rb +0 -70
  315. data/lib/capybara/spec/session/source_spec.rb +0 -0
  316. data/lib/capybara/spec/session/within_frame_spec.rb +0 -53
  317. data/spec/rspec/matchers_spec.rb +0 -827
  318. data/spec/selenium_spec.rb +0 -151
@@ -0,0 +1,49 @@
1
+ <html>
2
+ <head>
3
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
4
+ <title>with_animation</title>
5
+ <script src="/jquery.js" type="text/javascript" charset="utf-8"></script>
6
+ <script>
7
+ $(document).on('contextmenu', function(e){ e.preventDefault(); });
8
+ </script>
9
+ <style>
10
+ div {
11
+ width: 400px;
12
+ height: 400px;
13
+ position: absolute;
14
+ }
15
+ #obscured {
16
+ z-index: 1;
17
+ background-color: red;
18
+ }
19
+ #cover {
20
+ z-index: 2;
21
+ background-color: blue;
22
+ }
23
+ #offscreen {
24
+ top: 2000px;
25
+ left: 2000px;
26
+ background-color: green;
27
+ }
28
+ #offscreen_wrapper {
29
+ top: 2000px;
30
+ left: 2000px;
31
+ overflow-x: scroll;
32
+ background-color: yellow;
33
+ }
34
+ </style>
35
+ </head>
36
+
37
+ <body id="with_animation">
38
+ <div id="obscured">
39
+ <input id="obscured_input"/>
40
+ </div>
41
+ <div id="cover"></div>
42
+ <div id="offscreen_wrapper">
43
+ <div id="offscreen"></div>
44
+ </div>
45
+ </body>
46
+
47
+ <iframe id="frameOne" src="/frame_one"></iframe>
48
+ </html>
49
+
@@ -1,4 +1,4 @@
1
- <%# frozen_string_literal: true %>
1
+
2
2
  <h1>Buttons</h1>
3
3
  <button>Click me!</button>
4
4
  <button id="click_me_123">Click me by id!</button>
@@ -1,4 +1,4 @@
1
- <%# frozen_string_literal: true %>
1
+
2
2
  <form action="/form" method="post">
3
3
  <fieldset id="agent_fieldset">
4
4
  <legend>Agent</legend>
@@ -1,17 +1,17 @@
1
- <%# frozen_string_literal: true %>
1
+
2
2
  <h1>Form</h1>
3
3
 
4
- <form action="/form" method="post">
4
+ <form action="/form" method="post" novalidate>
5
5
 
6
6
  <p>
7
7
  <label for="form_title">Title</label>
8
- <select name="form[title]" id="form_title">
9
- <option>Mrs</option>
10
- <option>Mr</option>
8
+ <select name="form[title]" id="form_title" class="title">
9
+ <option class="title">Mrs</option>
10
+ <option class="title">Mr</option>
11
11
  <option>Miss</option>
12
12
  <option disabled="disabled">Other</option>
13
13
  </select>
14
- </p>
14
+ </p>
15
15
 
16
16
  <p>
17
17
  <label for="customer_name">Customer Name
@@ -25,6 +25,12 @@
25
25
  </label>
26
26
  </p>
27
27
 
28
+ <p>
29
+ <label for="customer_other_email">Customer Other Email
30
+ <input type="text" name="form[customer_other_email]" value="notben@notben.com" id="customer_other_email"/>
31
+ </label>
32
+ </p>
33
+
28
34
  <p>
29
35
  <label for="form_other_title">Other title</label>
30
36
  <select name="form[other_title]" id="form_other_title">
@@ -37,7 +43,7 @@
37
43
  <p>
38
44
  <label for="form_first_name">
39
45
  First Name
40
- <input type="text" name="form[first_name]" value="John" id="form_first_name"/>
46
+ <input type="text" name="form[first_name]" value="John" id="form_first_name" placeholder="FirstName"/>
41
47
  </label>
42
48
  </p>
43
49
 
@@ -56,6 +62,11 @@
56
62
  <input type="text" name="form[name]" value="John Smith" id="form_name"/>
57
63
  </p>
58
64
 
65
+ <p>
66
+ <label for="form_age">Age</label>
67
+ <input type="range" name="form[age]" value="18" min="13" max="100" step="0.5" id="form_age"/>
68
+ </p>
69
+
59
70
  <p>
60
71
  <label for="form_schmooo">Schmooo</label>
61
72
  <input type="schmooo" name="form[schmooo]" value="This is Schmooo!" id="form_schmooo"/>
@@ -88,6 +99,11 @@
88
99
  <input type="file" name="form[image]" id="form_image"/>
89
100
  </p>
90
101
 
102
+ <p>
103
+ <label for="form_hidden_image">Hidden Image</label>
104
+ <input type="file" name="form[hidden_image]" id="form_hidden_image" style="display: none"/>
105
+ </p>
106
+
91
107
  <p>
92
108
  <input type="hidden" name="form[token]" value="12345" id="form_token"/>
93
109
  </p>
@@ -97,7 +113,7 @@
97
113
  <select name="form[locale]" id="form_locale">
98
114
  <option value="sv">Swedish</option>
99
115
  <option selected="selected" value="en">English</option>
100
- <option value="fi">Finish</option>
116
+ <option value="fi">Finnish</option>
101
117
  <option value="no">Norwegian</option>
102
118
  <option value="jo">John's made-up language</option>
103
119
  <option value="jbo"> Lojban </option>
@@ -124,7 +140,11 @@
124
140
 
125
141
  <p>
126
142
  <label for="form_zipcode">Zipcode</label>
127
- <input type="text" maxlength="5" name="form[zipcode]" id="form_zipcode" />
143
+ <input type="text" maxlength="5" name="form[zipcode]" id="form_zipcode" pattern="[0-9]{5,9}" />
144
+ </p>
145
+
146
+ <p>
147
+ <input maxlength="35" id="long_length" />
128
148
  </p>
129
149
 
130
150
  <p>
@@ -154,6 +174,15 @@ New line after and before textarea tag
154
174
  <label for="gender_both">Both</label>
155
175
  </p>
156
176
 
177
+ <p>
178
+ <input type="radio" name="form[party]" value="democrat" id="party_democrat" style="display:none"/>
179
+ <label for="party_democrat">Democrat</label>
180
+ <input type="radio" name="form[party]" value="republican" id="party_republican" style="display:none"/>
181
+ <label for="party_republican">Republican</label>
182
+ <input type="radio" name="form[party]" value="independent" id="party_independent" checked="checked" style="display:none"/>
183
+ <label for="party_independent">Independent</label>
184
+ </p>
185
+
157
186
  <p>
158
187
  <input type="checkbox" id="no_attr_value_checked" value="1" checked/>
159
188
  </p>
@@ -167,6 +196,44 @@ New line after and before textarea tag
167
196
  <label for="form_pets_hamster">Hamster</label>
168
197
  </p>
169
198
 
199
+ <p>
200
+ <input type="checkbox" value="jaguar" name="form[cars][]" id="form_cars_jaguar" checked="checked" style="display: none"/>
201
+ <label for="form_cars_jaguar">Jaguar</label>
202
+ <input type="checkbox" value="tesla" name="form[cars][]" id="form_cars_tesla" style="display: none"/>
203
+ <label for="form_cars_tesla">Tesla</label>
204
+ <input type="checkbox" value="ferrari" name="form[cars][]" id="form_cars_ferrari" checked="checked" style="display: none"/>
205
+ <label for="form_cars_ferrari">Ferrari</label>
206
+ <input type="checkbox" value="pagani" name="form[cars][]" id="form_cars_pagani" style="position: absolute; left: -9999px"/>
207
+ <label for="form_cars_pagani">Pagani</label>
208
+ <div style="position: relative;">
209
+ <input type="checkbox" value="bugatti" name="form[cars][]" id="form_cars_bugatti"/>
210
+ <div style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-color: #fff;">
211
+ <label for="form_cars_bugatti">Bugatti</label>
212
+ </div>
213
+ </div>
214
+ <input type="checkbox" value="ariel" name="form[cars][]" id="form_cars_ariel" style="display: none"/>
215
+ <input type="checkbox" value="porsche" name="form[cars][]" id="form_cars_porsche" checked="checked" style="display: none"/>
216
+ <label>
217
+ McLaren
218
+ <input type="checkbox" value="mclaren" name="form[cars][]" id="form_cars_mclaren" style="display: none"/>
219
+ </label>
220
+ <label>
221
+ Koenigsegg
222
+ <input type="checkbox" value="koenigsegg" name="form[cars][]" id="form_cars_koenigsegg" checked="checked" style="display: none"/>
223
+ </label>
224
+ <input type="checkbox" value="maserati" name="form[cars][]" id="form_cars_maserati" disabled="disabled"/>
225
+ <label for="form_cars_maserati">Maserati</label>
226
+ </p>
227
+
228
+ <p>
229
+ <input type="text" name="form[manufacturer]" list="manufacturers" id="manufacturer"/>
230
+ <datalist id="manufacturers">
231
+ <option value="Jaguar">J</option>
232
+ <option value="Audi">
233
+ <option value="Mercedes" disabled>
234
+ </datalist>
235
+ </p>
236
+
170
237
  <p>
171
238
  <input type="checkbox" name="form[valueless_checkbox]" id="valueless_checkbox" checked="checked"/>
172
239
  <label for="valueless_checkbox">Valueless Checkbox</label>
@@ -206,6 +273,17 @@ New line after and before textarea tag
206
273
  </select>
207
274
  </p>
208
275
 
276
+ <!-- invisible multiselect and options -->
277
+ <p style="display: none">
278
+ <label for="form_dessert">Dessert</label>
279
+ <select name="form[dessert]" id="form_dessert" multiple="multiple">
280
+ <option selected="selected">Pudding</option>
281
+ <option>Lava cake</option>
282
+ <option selected="selected">Tiramisu</option>
283
+ <option>Panna cotta</option>
284
+ </select>
285
+ </p>
286
+
209
287
  <!-- visible select with invisible selected option (which some browsers may treat as visible) -->
210
288
  <p>
211
289
  <label for="form_sorbet">Sorbet</label>
@@ -216,6 +294,17 @@ New line after and before textarea tag
216
294
  </select>
217
295
  </p>
218
296
 
297
+ <!-- visible multiselect with invisible selected options (which some browsers may treat as visible) -->
298
+ <p>
299
+ <label for="form_cake">Cake</label>
300
+ <select name="form[cake]" id="form_cake" multiple="multiple">
301
+ <option>Butter Cake</option>
302
+ <option selected="selected" style="display: none">Chocolate Cake</option>
303
+ <option>Strawberry Cake</option>
304
+ <option selected="selected" style="display: none">Sponge Cake</option>
305
+ </select>
306
+ </p>
307
+
219
308
  <p>
220
309
  <span>First address<span>
221
310
  <label for='address1_street'>Street</label>
@@ -226,7 +315,7 @@ New line after and before textarea tag
226
315
 
227
316
  <label for='address1_country'>Country</label>
228
317
  <select name="form[addresses][][country]" id="address1_country">
229
- <option>France</option>
318
+ <option selected>France</option>
230
319
  <option>Ukraine</option>
231
320
  </select>
232
321
  </p>
@@ -242,7 +331,7 @@ New line after and before textarea tag
242
331
  <label for='address2_country'>Country</label>
243
332
  <select name="form[addresses][][country]" id="address2_country">
244
333
  <option>France</option>
245
- <option>Ukraine</option>
334
+ <option selected>Ukraine</option>
246
335
  </select>
247
336
  </p>
248
337
 
@@ -293,6 +382,9 @@ New line after and before textarea tag
293
382
  Disabled Select
294
383
  <select name="form[disabled_select]" id="form_disabled_select" disabled="disabled">
295
384
  <option value="Should not see me" selected="selected">Should not see me</option>
385
+ <optgroup>
386
+ <option value="Disabled too">Disabled too</option>
387
+ </optgroup>
296
388
  </select>
297
389
  </label>
298
390
  </p>
@@ -306,7 +398,6 @@ New line after and before textarea tag
306
398
  </label>
307
399
  </p>
308
400
 
309
-
310
401
  <p>
311
402
  <label for="form_disabled_file">
312
403
  Disabled File
@@ -314,21 +405,86 @@ New line after and before textarea tag
314
405
  </label>
315
406
  </p>
316
407
 
408
+ <fieldset>
409
+ <input name="form[enabled_fieldset_child]" id="form_enabled_fieldset_child"/>
410
+ </fieldset>
411
+
412
+ <fieldset disabled="disabled" id="form_disabled_fieldset">
413
+ <legend>Disabled Child</legend>
414
+ <input name="form[disabled_fieldset_child]" id="form_disabled_fieldset_child"/>
415
+ <select>
416
+ <option>Disabled Child Option</option>
417
+ </select>
418
+ </fieldset>
419
+
420
+ <fieldset disabled="disabled">
421
+ <legend>
422
+ Nested Disabled
423
+ <input type="checkbox" name="form[disabled_fieldeset_legend_child]" id="form_disabled_fieldset_legend_child"/>
424
+ </legend>
425
+ <legend>
426
+ Another WLegend
427
+ <input type="checkbox" name="form[disabled_fieldeset_second_legend_child]" id="form_disabled_fieldset_second_legend_child"/>
428
+ </legend>
429
+ <fieldset>
430
+ <legend>
431
+ Disabled?
432
+ <input id="form_disabled_fieldset_descendant_legend_child">
433
+ </legend>
434
+ <input name="form[disabled_fieldset_descendant]" id="form_disabled_fieldset_descendant"/>
435
+ </fieldset>
436
+ </fieldset>
437
+
438
+ <p>
439
+ <select data-test-id="my_test_id">
440
+ <optgroup label="Level One">
441
+ <option> A.1 </option>
442
+ </optgroup>
443
+ <optgroup label="Level Two" disabled="disabled">
444
+ <option> A.B.1 </option>
445
+ </optgroup>
446
+ <option> A.2 </option>
447
+ </select>
448
+ </p>
449
+
317
450
  <p>
318
- <input type="button" name="form[fresh]" id="fresh_btn" value="i am fresh"/>
319
- <input type="submit" name="form[awesome]" id="awe123" title="What an Awesome Button" value="awesome"/>
451
+ <input type="button" aria-label="Aria button" name="form[fresh]" id="fresh_btn" value="i am fresh"/>
452
+ <input type="submit" name="form[awesome]" id="awe123" data-test-id="test_id_button" title="What an Awesome Button" value="awesome"/>
320
453
  <input type="submit" name="form[crappy]" id="crap321" value="crappy"/>
321
454
  <input type="image" name="form[okay]" id="okay556" title="Okay 556 Image" value="okay" alt="oh hai thar"/>
322
455
  <button type="submit" id="click_me_123" title="Click Title button" value="click_me">Click me!</button>
323
456
  <button type="submit" name="form[no_value]">No Value!</button>
324
457
  <button id="no_type">No Type!</button>
458
+ <button><img alt="A horse eating hay"/></button>
459
+ <button id="button_with_label"></button>
460
+ <label for="button_with_label">button with label element</label>
461
+ <label>
462
+ button within label element
463
+ <button></button>
464
+ </label>
465
+ <label>
466
+ role=button within label element
467
+ <span role="button">with other text</span>
468
+ </label>
325
469
  <input type="button" disabled="disabled" value="Disabled button"/>
470
+ <span role="button">ARIA button</span>
471
+ </p>
472
+
473
+ <p>
474
+ <input type="date" name="form[date]" id="form_date"/>
475
+ <input type="time" name="form[time]" id="form_time"/>
476
+ <input type="datetime-local" name="form[datetime]" id="form_datetime">
326
477
  </p>
327
478
 
328
479
  <p>
329
480
  <input id="readonly" name="form[readonly_test]" readonly/>
330
481
  <input id="not_readonly" name="form[readonly_test]" />
331
482
  </p>
483
+
484
+ <p>
485
+ <input id="required" name="form[required]" required />
486
+ <input id="length" name="form[length]" minlength="4" maxlength="4" />
487
+ </p>
332
488
  </form>
333
489
 
334
490
  <input type="text" name="form[outside_input]" value="outside_input" form="form1"/>
@@ -338,14 +494,21 @@ New line after and before textarea tag
338
494
  <input type="text" name="nested_label" id="nested_label"/>
339
495
  </label>
340
496
 
497
+ <label id="wrapper_label">
498
+ Wrapper Label
499
+ <input type="checkbox"/>
500
+ </label>
501
+
341
502
  <form id="form1" action="/form" method="post">
342
503
  <input type="text" name="form[which_form]" value="form1" id="form_which_form"/>
343
504
  <input type="text" name="form[for_form2]" value="for_form2" form="form2"/>
344
505
  <input type="submit" name="form[submit_form1]" value="submit_form1" id="submit_form1"/>
345
506
  </form>
346
507
 
508
+ <button type="submit" name="form[outside_button]" value="outside_button" form="form2">Outside!</button>
509
+
347
510
  <form id="form2" action="/form" method="post">
348
- <input type="text" name="form[which_form]" value="form2" id="form_which_form"/>
511
+ <input type="text" name="form[which_form]" value="form2" id="form_which_form2"/>
349
512
  <input type="submit" name="form[unused]" value="unused"/>
350
513
  <button type="submit" name="form[other_form_button]" value="other_form_button" form="form1">Form1</button>
351
514
  </form>
@@ -360,8 +523,6 @@ New line after and before textarea tag
360
523
  </select>
361
524
 
362
525
  <input type="submit" name="form[outside_submit]" value="outside_submit" form="form1"/>
363
- <button type="submit" name="form[outside_button]" value="outside_button" form="form2">Outside!</button>
364
-
365
526
 
366
527
  <form id="get-form" action="/form/get?foo=bar" method="get">
367
528
  <p>
@@ -370,7 +531,8 @@ New line after and before textarea tag
370
531
  </p>
371
532
 
372
533
  <p>
373
- <input type="submit" name="form[mediocre]" id="mediocre" value="med"/>
534
+ <input type="submit" name="form[mediocre]" id="mediocre" value="med" aria-label="Mediocre Button"/>
535
+ <input type="submit" formaction="/form/get?bar=foo" id="mediocre2" value="med2"/>
374
536
  <p>
375
537
  </form>
376
538
 
@@ -427,6 +589,11 @@ New line after and before textarea tag
427
589
  <input type="file" name="form[multiple_documents][]" id="form_multiple_documents" multiple="multiple" />
428
590
  </p>
429
591
 
592
+ <p>
593
+ <label for="form_directory_upload">Directory Upload</label>
594
+ <input type="file" name="form[multiple_documents][]" id="form_directory_upload" multiple="multiple" webkitdirectory="webkitdirectory" mozdirectory="mozdirectory" />
595
+ </p>
596
+
430
597
  <p>
431
598
  <input type="submit" value="Upload Multiple"/>
432
599
  <p>
@@ -436,6 +603,14 @@ New line after and before textarea tag
436
603
  <p>
437
604
  <input type="submit" value="Go FAR"/>
438
605
  </p>
606
+
607
+ <input type="hidden" name="form[data]" value="TWTW"/>
608
+ <p>
609
+ <button formaction='/redirect_307'>Go 307</button>
610
+ </p>
611
+ <p>
612
+ <button formaction='/redirect_308'>Go 308</button>
613
+ </p>
439
614
  </form>
440
615
 
441
616
  <form action="/form" method="post">
@@ -455,9 +630,10 @@ New line after and before textarea tag
455
630
  <label for="html5_search">Html5 Search</label>
456
631
  <input type="search" name="form[html5_search]" value="what are you looking for" id="html5_search"/>
457
632
  </p>
633
+ <p id="emergency">Emergency Number</p>
458
634
  <p>
459
635
  <label for="html5_tel">Html5 Tel</label>
460
- <input type="tel" name="form[html5_tel]" value="911" id="html5_tel"/>
636
+ <input type="tel" aria-labelledby="emergency" name="form[html5_tel]" value="911" id="html5_tel"/>
461
637
  </p>
462
638
  <p>
463
639
  <label for="html5_color">Html5 Color</label>
@@ -480,7 +656,7 @@ New line after and before textarea tag
480
656
 
481
657
  <form action="/other_form" method="post">
482
658
  <p>
483
- <input type="text" name="form[which_form]" value="formaction form"/>
659
+ <input type="text" name="form[which_form]" value="formaction form" aria-label="Unlabelled Input"/>
484
660
  </p>
485
661
  <input type="submit" name="form[button]" formaction="/form" value="Formaction button"/>
486
662
  <input type="submit" name="form[button]" formaction="/form/get" formmethod="get" value="Formmethod button"/>
@@ -498,4 +674,35 @@ New line after and before textarea tag
498
674
  </p>
499
675
  </form>
500
676
 
677
+ <label>Confusion
678
+ <input type="checkbox" id="confusion_checkbox" class="confusion-checkbox confusion"/>
679
+ </label>
680
+
681
+ <label>Confusion
682
+ <input type="text" id="confusion_text" class="confusion-text confusion"/>
683
+ </label>
684
+
685
+ <label>Confusion
686
+ <textarea id="confusion_textarea" class="confusion confusion-textarea"></textarea>
687
+ </label>
688
+
689
+ <p>
690
+ <label for="asterisk_input">With Asterisk<abbr title="required">*</abbr></label>
691
+ <input id="asterisk_input" type="number"value="2016"/>
692
+ </p>
693
+
694
+ <p>
695
+ <input id="special" {custom}="abcdef" value="custom attribute"/>
696
+ </p>
501
697
 
698
+
699
+ <label for="multi_label_checkbox">
700
+ Label to click
701
+ </label>
702
+ <div>Something random that justifies the usage of a separate label</div>
703
+ <label>
704
+ <div>
705
+ <input type="checkbox" id="multi_label_checkbox" style="display: none"/>
706
+ <div>Visual representation of the checkbox</div>
707
+ </div>
708
+ </label>