capybara 3.0.0 → 3.40.0
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.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/History.md +891 -12
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +29 -10
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +22 -4
- data/lib/capybara/driver/node.rb +38 -9
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +57 -8
- data/lib/capybara/minitest/spec.rb +185 -84
- data/lib/capybara/minitest.rb +264 -145
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +35 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +350 -113
- data/lib/capybara/node/finders.rb +104 -82
- data/lib/capybara/node/matchers.rb +363 -157
- data/lib/capybara/node/simple.rb +54 -15
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +9 -10
- data/lib/capybara/queries/base_query.rb +25 -18
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +11 -0
- data/lib/capybara/queries/selector_query.rb +617 -104
- data/lib/capybara/queries/sibling_query.rb +9 -7
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +40 -22
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +106 -31
- data/lib/capybara/rack_test/driver.rb +16 -7
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +74 -49
- data/lib/capybara/rack_test/node.rb +120 -47
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/registration_container.rb +41 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +66 -0
- data/lib/capybara/result.rb +87 -53
- data/lib/capybara/rspec/features.rb +8 -10
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- data/lib/capybara/rspec/matchers/base.rb +113 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +142 -315
- data/lib/capybara/rspec.rb +3 -2
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +85 -8
- data/lib/capybara/selector/definition/button.rb +68 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +55 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +280 -0
- data/lib/capybara/selector/filter.rb +1 -0
- data/lib/capybara/selector/filter_set.rb +72 -28
- data/lib/capybara/selector/filters/base.rb +45 -2
- data/lib/capybara/selector/filters/expression_filter.rb +5 -6
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +18 -4
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +89 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -534
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +270 -245
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/node.rb +460 -170
- data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +80 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +58 -67
- data/lib/capybara/session/config.rb +40 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +252 -194
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +126 -8
- data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +135 -44
- data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
- data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/{assert_text.rb → assert_text_spec.rb} +76 -52
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +126 -72
- data/lib/capybara/spec/session/body_spec.rb +11 -13
- data/lib/capybara/spec/session/check_spec.rb +112 -51
- data/lib/capybara/spec/session/choose_spec.rb +62 -30
- data/lib/capybara/spec/session/click_button_spec.rb +227 -161
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
- data/lib/capybara/spec/session/click_link_spec.rb +89 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +44 -37
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
- data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +8 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +110 -44
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
- data/lib/capybara/spec/session/find_field_spec.rb +33 -31
- data/lib/capybara/spec/session/find_link_spec.rb +42 -14
- data/lib/capybara/spec/session/find_spec.rb +251 -142
- data/lib/capybara/spec/session/first_spec.rb +45 -44
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +46 -19
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +23 -23
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/lib/capybara/spec/session/has_button_spec.rb +98 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +50 -35
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +46 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +33 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +117 -69
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +181 -4
- data/lib/capybara/spec/session/has_text_spec.rb +101 -53
- data/lib/capybara/spec/session/has_title_spec.rb +19 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
- data/lib/capybara/spec/session/html_spec.rb +13 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +958 -122
- data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +65 -37
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
- data/lib/capybara/spec/session/save_page_spec.rb +41 -38
- data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +119 -0
- data/lib/capybara/spec/session/select_spec.rb +102 -76
- data/lib/capybara/spec/session/selectors_spec.rb +51 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +26 -24
- data/lib/capybara/spec/session/title_spec.rb +8 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +41 -22
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +79 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
- data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
- data/lib/capybara/spec/session/window/window_spec.rb +88 -54
- data/lib/capybara/spec/session/window/windows_spec.rb +11 -8
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +82 -44
- data/lib/capybara/spec/spec_helper.rb +46 -52
- data/lib/capybara/spec/test_app.rb +148 -41
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +156 -42
- data/lib/capybara/spec/views/frame_child.erb +4 -3
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +21 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +68 -1
- data/lib/capybara/spec/views/with_animation.erb +81 -0
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +46 -11
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +30 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +32 -26
- data/lib/capybara.rb +128 -104
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +65 -51
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +84 -55
- data/spec/filter_set_spec.rb +24 -7
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -5
- data/spec/minitest_spec.rb +49 -5
- data/spec/minitest_spec_spec.rb +92 -62
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +183 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +99 -39
- data/spec/rspec/features_spec.rb +28 -25
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +418 -364
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +392 -62
- data/spec/selenium_spec_chrome.rb +183 -41
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +41 -8
- data/spec/selenium_spec_firefox.rb +228 -0
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +129 -11
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +192 -81
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +460 -123
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +344 -45
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/lib/capybara/rspec/compound.rb +0 -90
- data/lib/capybara/spec/session/assert_selector.rb +0 -149
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
- data/spec/selenium_spec_marionette.rb +0 -143
@@ -1,17 +1,23 @@
|
|
1
|
-
|
2
1
|
<h1>Form</h1>
|
3
2
|
|
4
|
-
<
|
3
|
+
<button type="button" tabindex="1">A Button</button>
|
4
|
+
|
5
|
+
<label>
|
6
|
+
An Input
|
7
|
+
<input type="text" tabindex="2">
|
8
|
+
</label>
|
9
|
+
|
10
|
+
<form action="/form" method="post" novalidate>
|
5
11
|
|
6
12
|
<p>
|
7
13
|
<label for="form_title">Title</label>
|
8
|
-
<select name="form[title]" id="form_title" class="title">
|
14
|
+
<select name="form[title]" id="form_title" class="title" tabindex="3">
|
9
15
|
<option class="title">Mrs</option>
|
10
16
|
<option class="title">Mr</option>
|
11
17
|
<option>Miss</option>
|
12
18
|
<option disabled="disabled">Other</option>
|
13
19
|
</select>
|
14
|
-
|
20
|
+
</p>
|
15
21
|
|
16
22
|
<p>
|
17
23
|
<label for="customer_name">Customer Name
|
@@ -25,6 +31,12 @@
|
|
25
31
|
</label>
|
26
32
|
</p>
|
27
33
|
|
34
|
+
<p>
|
35
|
+
<label for="customer_other_email">Customer Other Email
|
36
|
+
<input type="text" name="form[customer_other_email]" value="notben@notben.com" id="customer_other_email"/>
|
37
|
+
</label>
|
38
|
+
</p>
|
39
|
+
|
28
40
|
<p>
|
29
41
|
<label for="form_other_title">Other title</label>
|
30
42
|
<select name="form[other_title]" id="form_other_title">
|
@@ -56,6 +68,11 @@
|
|
56
68
|
<input type="text" name="form[name]" value="John Smith" id="form_name"/>
|
57
69
|
</p>
|
58
70
|
|
71
|
+
<p>
|
72
|
+
<label for="form_age">Age</label>
|
73
|
+
<input type="range" name="form[age]" value="18" min="13" max="100" step="0.5" id="form_age"/>
|
74
|
+
</p>
|
75
|
+
|
59
76
|
<p>
|
60
77
|
<label for="form_schmooo">Schmooo</label>
|
61
78
|
<input type="schmooo" name="form[schmooo]" value="This is Schmooo!" id="form_schmooo"/>
|
@@ -88,6 +105,11 @@
|
|
88
105
|
<input type="file" name="form[image]" id="form_image"/>
|
89
106
|
</p>
|
90
107
|
|
108
|
+
<p>
|
109
|
+
<label for="form_hidden_image">Hidden Image</label>
|
110
|
+
<input type="file" name="form[hidden_image]" id="form_hidden_image" style="display: none"/>
|
111
|
+
</p>
|
112
|
+
|
91
113
|
<p>
|
92
114
|
<input type="hidden" name="form[token]" value="12345" id="form_token"/>
|
93
115
|
</p>
|
@@ -97,7 +119,7 @@
|
|
97
119
|
<select name="form[locale]" id="form_locale">
|
98
120
|
<option value="sv">Swedish</option>
|
99
121
|
<option selected="selected" value="en">English</option>
|
100
|
-
<option value="fi">
|
122
|
+
<option value="fi">Finnish</option>
|
101
123
|
<option value="no">Norwegian</option>
|
102
124
|
<option value="jo">John's made-up language</option>
|
103
125
|
<option value="jbo"> Lojban </option>
|
@@ -124,7 +146,11 @@
|
|
124
146
|
|
125
147
|
<p>
|
126
148
|
<label for="form_zipcode">Zipcode</label>
|
127
|
-
<input type="text" maxlength="5" name="form[zipcode]" id="form_zipcode" />
|
149
|
+
<input type="text" maxlength="5" name="form[zipcode]" id="form_zipcode" pattern="[0-9]{5,9}" />
|
150
|
+
</p>
|
151
|
+
|
152
|
+
<p>
|
153
|
+
<input maxlength="35" id="long_length" />
|
128
154
|
</p>
|
129
155
|
|
130
156
|
<p>
|
@@ -150,7 +176,7 @@ New line after and before textarea tag
|
|
150
176
|
<label for="gender_male">Male</label>
|
151
177
|
<input type="radio" name="form[gender]" value="female" id="gender_female" checked="checked"/>
|
152
178
|
<label for="gender_female">Female</label>
|
153
|
-
<input type="radio" name="form[gender]" value="both" id="gender_both"/>
|
179
|
+
<input type="radio" name="form[gender]" value="both" id="gender_both" readonly="readonly"/>
|
154
180
|
<label for="gender_both">Both</label>
|
155
181
|
</p>
|
156
182
|
|
@@ -185,6 +211,12 @@ New line after and before textarea tag
|
|
185
211
|
<label for="form_cars_ferrari">Ferrari</label>
|
186
212
|
<input type="checkbox" value="pagani" name="form[cars][]" id="form_cars_pagani" style="position: absolute; left: -9999px"/>
|
187
213
|
<label for="form_cars_pagani">Pagani</label>
|
214
|
+
<div style="position: relative;">
|
215
|
+
<input type="checkbox" value="bugatti" name="form[cars][]" id="form_cars_bugatti"/>
|
216
|
+
<div style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-color: #fff;">
|
217
|
+
<label for="form_cars_bugatti">Bugatti</label>
|
218
|
+
</div>
|
219
|
+
</div>
|
188
220
|
<input type="checkbox" value="ariel" name="form[cars][]" id="form_cars_ariel" style="display: none"/>
|
189
221
|
<input type="checkbox" value="porsche" name="form[cars][]" id="form_cars_porsche" checked="checked" style="display: none"/>
|
190
222
|
<label>
|
@@ -195,6 +227,19 @@ New line after and before textarea tag
|
|
195
227
|
Koenigsegg
|
196
228
|
<input type="checkbox" value="koenigsegg" name="form[cars][]" id="form_cars_koenigsegg" checked="checked" style="display: none"/>
|
197
229
|
</label>
|
230
|
+
<input type="checkbox" value="maserati" name="form[cars][]" id="form_cars_maserati" disabled="disabled"/>
|
231
|
+
<label for="form_cars_maserati">Maserati</label>
|
232
|
+
<input type="checkbox" value="lotus" name="form[cars][]" id="form_cars_lotus" style="display: none"/>
|
233
|
+
<label for="form_cars_lotus"><a href="#" onclick="return false;">Link here</a>Lotus</label>
|
234
|
+
</p>
|
235
|
+
|
236
|
+
<p>
|
237
|
+
<input type="text" name="form[manufacturer]" list="manufacturers" id="manufacturer"/>
|
238
|
+
<datalist id="manufacturers">
|
239
|
+
<option value="Jaguar">J</option>
|
240
|
+
<option value="Audi">
|
241
|
+
<option value="Mercedes" disabled>
|
242
|
+
</datalist>
|
198
243
|
</p>
|
199
244
|
|
200
245
|
<p>
|
@@ -361,7 +406,6 @@ New line after and before textarea tag
|
|
361
406
|
</label>
|
362
407
|
</p>
|
363
408
|
|
364
|
-
|
365
409
|
<p>
|
366
410
|
<label for="form_disabled_file">
|
367
411
|
Disabled File
|
@@ -369,41 +413,38 @@ New line after and before textarea tag
|
|
369
413
|
</label>
|
370
414
|
</p>
|
371
415
|
|
372
|
-
<
|
373
|
-
<
|
374
|
-
|
375
|
-
</fieldset>
|
376
|
-
</p>
|
377
|
-
|
378
|
-
|
379
|
-
<p>
|
380
|
-
<fieldset disabled="disabled">
|
381
|
-
<legend>Disabled Child</legend>
|
382
|
-
<input name="form[disabled_fieldset_child]" id="form_disabled_fieldset_child"/>
|
383
|
-
<select>
|
384
|
-
<option>Disabled Child Option</option>
|
385
|
-
</select>
|
386
|
-
</fieldset>
|
416
|
+
<fieldset>
|
417
|
+
<input name="form[enabled_fieldset_child]" id="form_enabled_fieldset_child"/>
|
418
|
+
</fieldset>
|
387
419
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
</
|
420
|
+
<fieldset disabled="disabled" id="form_disabled_fieldset">
|
421
|
+
<legend>Disabled Child</legend>
|
422
|
+
<input name="form[disabled_fieldset_child]" id="form_disabled_fieldset_child"/>
|
423
|
+
<select>
|
424
|
+
<option>Disabled Child Option</option>
|
425
|
+
</select>
|
426
|
+
</fieldset>
|
427
|
+
|
428
|
+
<fieldset disabled="disabled">
|
429
|
+
<legend>
|
430
|
+
Nested Disabled
|
431
|
+
<input type="checkbox" name="form[disabled_fieldeset_legend_child]" id="form_disabled_fieldset_legend_child"/>
|
432
|
+
</legend>
|
433
|
+
<legend>
|
434
|
+
Another WLegend
|
435
|
+
<input type="checkbox" name="form[disabled_fieldeset_second_legend_child]" id="form_disabled_fieldset_second_legend_child"/>
|
436
|
+
</legend>
|
437
|
+
<fieldset>
|
393
438
|
<legend>
|
394
|
-
|
395
|
-
<input
|
439
|
+
Disabled?
|
440
|
+
<input id="form_disabled_fieldset_descendant_legend_child">
|
396
441
|
</legend>
|
397
|
-
<
|
398
|
-
<fieldset>
|
399
|
-
<input name="form[disabled_fieldset_descendant]" id="form_disabled_fieldset_descendant"/>
|
400
|
-
</fieldset>
|
401
|
-
</p>
|
442
|
+
<input name="form[disabled_fieldset_descendant]" id="form_disabled_fieldset_descendant"/>
|
402
443
|
</fieldset>
|
403
|
-
</
|
444
|
+
</fieldset>
|
404
445
|
|
405
446
|
<p>
|
406
|
-
<select>
|
447
|
+
<select data-test-id="my_test_id">
|
407
448
|
<optgroup label="Level One">
|
408
449
|
<option> A.1 </option>
|
409
450
|
</optgroup>
|
@@ -415,15 +456,26 @@ New line after and before textarea tag
|
|
415
456
|
</p>
|
416
457
|
|
417
458
|
<p>
|
418
|
-
<input type="button" name="form[fresh]" id="fresh_btn" value="i am fresh"/>
|
419
|
-
<input type="submit" name="form[awesome]" id="awe123" title="What an Awesome Button" value="awesome"/>
|
459
|
+
<input type="button" aria-label="Aria button" name="form[fresh]" id="fresh_btn" value="i am fresh"/>
|
460
|
+
<input type="submit" name="form[awesome]" id="awe123" data-test-id="test_id_button" title="What an Awesome Button" value="awesome"/>
|
420
461
|
<input type="submit" name="form[crappy]" id="crap321" value="crappy"/>
|
421
462
|
<input type="image" name="form[okay]" id="okay556" title="Okay 556 Image" value="okay" alt="oh hai thar"/>
|
422
463
|
<button type="submit" id="click_me_123" title="Click Title button" value="click_me">Click me!</button>
|
423
464
|
<button type="submit" name="form[no_value]">No Value!</button>
|
424
465
|
<button id="no_type">No Type!</button>
|
425
466
|
<button><img alt="A horse eating hay"/></button>
|
467
|
+
<button id="button_with_label"></button>
|
468
|
+
<label for="button_with_label">button with label element</label>
|
469
|
+
<label>
|
470
|
+
button within label element
|
471
|
+
<button></button>
|
472
|
+
</label>
|
473
|
+
<label>
|
474
|
+
role=button within label element
|
475
|
+
<span role="button">with other text</span>
|
476
|
+
</label>
|
426
477
|
<input type="button" disabled="disabled" value="Disabled button"/>
|
478
|
+
<span role="button">ARIA button</span>
|
427
479
|
</p>
|
428
480
|
|
429
481
|
<p>
|
@@ -436,6 +488,11 @@ New line after and before textarea tag
|
|
436
488
|
<input id="readonly" name="form[readonly_test]" readonly/>
|
437
489
|
<input id="not_readonly" name="form[readonly_test]" />
|
438
490
|
</p>
|
491
|
+
|
492
|
+
<p>
|
493
|
+
<input id="required" name="form[required]" required />
|
494
|
+
<input id="length" name="form[length]" minlength="4" maxlength="4" />
|
495
|
+
</p>
|
439
496
|
</form>
|
440
497
|
|
441
498
|
<input type="text" name="form[outside_input]" value="outside_input" form="form1"/>
|
@@ -445,14 +502,21 @@ New line after and before textarea tag
|
|
445
502
|
<input type="text" name="nested_label" id="nested_label"/>
|
446
503
|
</label>
|
447
504
|
|
505
|
+
<label id="wrapper_label">
|
506
|
+
Wrapper Label
|
507
|
+
<input type="checkbox"/>
|
508
|
+
</label>
|
509
|
+
|
448
510
|
<form id="form1" action="/form" method="post">
|
449
511
|
<input type="text" name="form[which_form]" value="form1" id="form_which_form"/>
|
450
512
|
<input type="text" name="form[for_form2]" value="for_form2" form="form2"/>
|
451
513
|
<input type="submit" name="form[submit_form1]" value="submit_form1" id="submit_form1"/>
|
452
514
|
</form>
|
453
515
|
|
516
|
+
<button type="submit" name="form[outside_button]" value="outside_button" form="form2">Outside!</button>
|
517
|
+
|
454
518
|
<form id="form2" action="/form" method="post">
|
455
|
-
<input type="text" name="form[which_form]" value="form2" id="
|
519
|
+
<input type="text" name="form[which_form]" value="form2" id="form_which_form2"/>
|
456
520
|
<input type="submit" name="form[unused]" value="unused"/>
|
457
521
|
<button type="submit" name="form[other_form_button]" value="other_form_button" form="form1">Form1</button>
|
458
522
|
</form>
|
@@ -467,8 +531,6 @@ New line after and before textarea tag
|
|
467
531
|
</select>
|
468
532
|
|
469
533
|
<input type="submit" name="form[outside_submit]" value="outside_submit" form="form1"/>
|
470
|
-
<button type="submit" name="form[outside_button]" value="outside_button" form="form2">Outside!</button>
|
471
|
-
|
472
534
|
|
473
535
|
<form id="get-form" action="/form/get?foo=bar" method="get">
|
474
536
|
<p>
|
@@ -478,6 +540,7 @@ New line after and before textarea tag
|
|
478
540
|
|
479
541
|
<p>
|
480
542
|
<input type="submit" name="form[mediocre]" id="mediocre" value="med" aria-label="Mediocre Button"/>
|
543
|
+
<input type="submit" formaction="/form/get?bar=foo" id="mediocre2" value="med2"/>
|
481
544
|
<p>
|
482
545
|
</form>
|
483
546
|
|
@@ -523,6 +586,19 @@ New line after and before textarea tag
|
|
523
586
|
<p>
|
524
587
|
</form>
|
525
588
|
|
589
|
+
<form action="/form" method="post" enctype="multipart/form-data">
|
590
|
+
<input type="hidden" name="form[document2]" value="hidden_field"/>
|
591
|
+
|
592
|
+
<p>
|
593
|
+
<label for="form_document">Document with hidden</label>
|
594
|
+
<input type="file" name="form[document2]" id="form_document2"/>
|
595
|
+
</p>
|
596
|
+
|
597
|
+
<p>
|
598
|
+
<input type="submit" value="Upload Empty With Hidden"/>
|
599
|
+
<p>
|
600
|
+
</form>
|
601
|
+
|
526
602
|
<form action="/upload_multiple" method="post" enctype="multipart/form-data">
|
527
603
|
<p>
|
528
604
|
<label for="form_multiple_file_name">File Name</label>
|
@@ -534,6 +610,11 @@ New line after and before textarea tag
|
|
534
610
|
<input type="file" name="form[multiple_documents][]" id="form_multiple_documents" multiple="multiple" />
|
535
611
|
</p>
|
536
612
|
|
613
|
+
<p>
|
614
|
+
<label for="form_directory_upload">Directory Upload</label>
|
615
|
+
<input type="file" name="form[multiple_documents][]" id="form_directory_upload" multiple="multiple" webkitdirectory="webkitdirectory" mozdirectory="mozdirectory" />
|
616
|
+
</p>
|
617
|
+
|
537
618
|
<p>
|
538
619
|
<input type="submit" value="Upload Multiple"/>
|
539
620
|
<p>
|
@@ -543,6 +624,14 @@ New line after and before textarea tag
|
|
543
624
|
<p>
|
544
625
|
<input type="submit" value="Go FAR"/>
|
545
626
|
</p>
|
627
|
+
|
628
|
+
<input type="hidden" name="form[data]" value="TWTW"/>
|
629
|
+
<p>
|
630
|
+
<button formaction='/redirect_307'>Go 307</button>
|
631
|
+
</p>
|
632
|
+
<p>
|
633
|
+
<button formaction='/redirect_308'>Go 308</button>
|
634
|
+
</p>
|
546
635
|
</form>
|
547
636
|
|
548
637
|
<form action="/form" method="post">
|
@@ -606,6 +695,15 @@ New line after and before textarea tag
|
|
606
695
|
</p>
|
607
696
|
</form>
|
608
697
|
|
698
|
+
<form id="single_input_form" action="/form" method="post">
|
699
|
+
<input type="text" name="form[single_input]" id="single_input"/>
|
700
|
+
</form>
|
701
|
+
|
702
|
+
<form id="two_input_form" action="/form" method="post">
|
703
|
+
<input type="text" name="form[two_input_1]" id="two_input_1"/>
|
704
|
+
<input type="text" name="form[two_input_2]" id="two_input_2"/>
|
705
|
+
</form>
|
706
|
+
|
609
707
|
<label>Confusion
|
610
708
|
<input type="checkbox" id="confusion_checkbox" class="confusion-checkbox confusion"/>
|
611
709
|
</label>
|
@@ -622,3 +720,19 @@ New line after and before textarea tag
|
|
622
720
|
<label for="asterisk_input">With Asterisk<abbr title="required">*</abbr></label>
|
623
721
|
<input id="asterisk_input" type="number"value="2016"/>
|
624
722
|
</p>
|
723
|
+
|
724
|
+
<p>
|
725
|
+
<input id="special" {custom}="abcdef" value="custom attribute"/>
|
726
|
+
</p>
|
727
|
+
|
728
|
+
|
729
|
+
<label for="multi_label_checkbox">
|
730
|
+
Label to click
|
731
|
+
</label>
|
732
|
+
<div>Something random that justifies the usage of a separate label</div>
|
733
|
+
<label>
|
734
|
+
<div>
|
735
|
+
<input type="checkbox" id="multi_label_checkbox" style="display: none"/>
|
736
|
+
<div>Visual representation of the checkbox</div>
|
737
|
+
</div>
|
738
|
+
</label>
|
@@ -1,16 +1,17 @@
|
|
1
|
-
|
1
|
+
<!DOCTYPE html>
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<title>This is the child frame title</title>
|
5
5
|
<script>
|
6
6
|
function closeWin() {
|
7
|
-
var iframe = window.parent.document.getElementById('childFrame')
|
7
|
+
var iframe = window.parent.document.getElementById('childFrame');
|
8
8
|
iframe.parentNode.removeChild(iframe)
|
9
9
|
}
|
10
10
|
</script>
|
11
11
|
</head>
|
12
12
|
<body id="childBody">
|
13
|
-
<a href="javascript:void(0)" onClick="closeWin()">Close Window</a>
|
13
|
+
<a href="javascript:void(0)" onClick="closeWin()">Close Window Now</a>
|
14
|
+
<a href="javascript:void(0)" onClick="setTimeout(function(){closeWin()}, 10)">Close Window Soon</a>
|
14
15
|
<iframe src="/frame_one" id="grandchildFrame1"></iframe>
|
15
16
|
<iframe src="/frame_two" id="grandchildFrame2"></iframe>
|
16
17
|
</body>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
|
5
|
+
<title>Obscured</title>
|
6
|
+
<style>
|
7
|
+
div {
|
8
|
+
width: 200px;
|
9
|
+
height: 200px;
|
10
|
+
}
|
11
|
+
#cover, #offscreen, #offscreen_wrapper {
|
12
|
+
position: absolute;
|
13
|
+
}
|
14
|
+
#obscured {
|
15
|
+
z-index: 1;
|
16
|
+
background-color: red;
|
17
|
+
}
|
18
|
+
#cover {
|
19
|
+
top: 0px;
|
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
|
+
<body>
|
37
|
+
<div id="obscured">
|
38
|
+
<input id="obscured_input"/>
|
39
|
+
</div>
|
40
|
+
<div id="cover"></div>
|
41
|
+
<iframe id="frameOne" height="10px" src="/frame_one"></iframe>
|
42
|
+
<iframe id="nestedFrames" src="/frame_parent"></iframe>
|
43
|
+
<div id="offscreen_wrapper">
|
44
|
+
<div id="offscreen"></div>
|
45
|
+
</div>
|
46
|
+
</body>
|
47
|
+
</html>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
|
5
|
+
<title>Offset</title>
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
margin: 0px;
|
9
|
+
}
|
10
|
+
#wrapper {
|
11
|
+
width: 300px;
|
12
|
+
height: 300px;
|
13
|
+
margin: 0px;
|
14
|
+
}
|
15
|
+
#clicker {
|
16
|
+
position: relative;
|
17
|
+
width: 100px;
|
18
|
+
height: 100px;
|
19
|
+
top: 100px;
|
20
|
+
left: 100px;
|
21
|
+
background-color: red;
|
22
|
+
margin: 0px;
|
23
|
+
}
|
24
|
+
</style>
|
25
|
+
<script src="/jquery.js" type="text/javascript" charset="utf-8"></script>
|
26
|
+
<script src="/offset.js" type="text/javascript" charset="utf-8"></script>
|
27
|
+
</head>
|
28
|
+
<body>
|
29
|
+
<div id="wrapper">
|
30
|
+
<div id="clicker"></div>
|
31
|
+
</div>
|
32
|
+
</body>
|
33
|
+
</html>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<script src="https://unpkg.com/react/umd/react.development.js"></script>
|
5
|
+
<script src="https://unpkg.com/react-dom/umd/react-dom.development.js"></script>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<div id="root"></div>
|
9
|
+
<script>
|
10
|
+
// https://codepen.io/gaearon/pen/VmmPgp?editors=0010
|
11
|
+
class NameForm extends React.Component {
|
12
|
+
constructor(props) {
|
13
|
+
super(props);
|
14
|
+
this.state = { value: '' };
|
15
|
+
|
16
|
+
this.handleChange = this.handleChange.bind(this);
|
17
|
+
this.handleSubmit = this.handleSubmit.bind(this);
|
18
|
+
}
|
19
|
+
|
20
|
+
handleChange(event) {
|
21
|
+
this.setState({ value: event.target.value });
|
22
|
+
}
|
23
|
+
|
24
|
+
handleSubmit(event) {
|
25
|
+
alert('A name was submitted: ' + this.state.value);
|
26
|
+
event.preventDefault();
|
27
|
+
}
|
28
|
+
|
29
|
+
render() {
|
30
|
+
return (
|
31
|
+
React.createElement("form", { onSubmit: this.handleSubmit },
|
32
|
+
React.createElement("label", null, "Name:",
|
33
|
+
|
34
|
+
React.createElement("input", { type: "text", value: this.state.value, onChange: this.handleChange })),
|
35
|
+
|
36
|
+
React.createElement("input", { type: "submit", value: "Submit" })));
|
37
|
+
}}
|
38
|
+
|
39
|
+
|
40
|
+
ReactDOM.render(
|
41
|
+
React.createElement(NameForm, null),
|
42
|
+
document.getElementById('root'));
|
43
|
+
</script>
|
44
|
+
</body>
|
45
|
+
</html>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html style="height: 250%; width: 150%">
|
3
|
+
<head>
|
4
|
+
<style>
|
5
|
+
* { padding: 0; }
|
6
|
+
div { position: absolute; }
|
7
|
+
#scroll { top: 125%; }
|
8
|
+
#scrollable { top: 150%; overflow-y: scroll; overflow-x: scroll; height: 50px; width: 50px; position: relative; border: 1px solid black;}
|
9
|
+
#inner { top: 50%; }
|
10
|
+
</style>
|
11
|
+
</head>
|
12
|
+
<body style="height: 100%; width: 100%">
|
13
|
+
<div id="scroll" style = "top: 125%">scroll</div>
|
14
|
+
<div id="scrollable">
|
15
|
+
<div style="height: 200px; width: 200px; poistion: relative">
|
16
|
+
<div id="inner">inner</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</body>
|
21
|
+
</html>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
|
5
|
+
<title>spatial</title>
|
6
|
+
<style>
|
7
|
+
#spatial {
|
8
|
+
display: grid;
|
9
|
+
grid-template-columns: repeat(3, 1fr);
|
10
|
+
grid-gap: 10px;
|
11
|
+
grid-auto-rows: minmax(100px, auto);
|
12
|
+
}
|
13
|
+
.footer {
|
14
|
+
grid-column: 1 / 4;
|
15
|
+
}
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body id="spatial">
|
20
|
+
<div class="corner">1</div>
|
21
|
+
<div class="distance">2</div>
|
22
|
+
<div class="corner">3</div>
|
23
|
+
<div>4</div>
|
24
|
+
<div class="center">5</div>
|
25
|
+
<div>6</div>
|
26
|
+
<div class="corner">7</div>
|
27
|
+
<div>8</div>
|
28
|
+
<div class="corner">9</div>
|
29
|
+
<div class="footer distance">10</div>
|
30
|
+
</body>
|
31
|
+
</html>
|