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,168 +1,222 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
Capybara::SpecHelper.spec
|
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
|
+
|
4
9
|
before do
|
5
|
-
@test_file_path = File.expand_path('../fixtures/test_file.txt', File.dirname(__FILE__))
|
6
|
-
@another_test_file_path = File.expand_path('../fixtures/another_test_file.txt', File.dirname(__FILE__))
|
7
|
-
@test_jpg_file_path = File.expand_path('../fixtures/capybara.jpg', File.dirname(__FILE__))
|
8
|
-
@no_extension_file_path = File.expand_path('../fixtures/no_extension', File.dirname(__FILE__))
|
9
10
|
@session.visit('/form')
|
10
11
|
end
|
11
12
|
|
12
|
-
context
|
13
|
-
it
|
14
|
-
@session.attach_file
|
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__)
|
15
16
|
@session.click_button('awesome')
|
16
|
-
expect(extract_results(@session)['image']).to
|
17
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
17
18
|
end
|
18
19
|
|
19
|
-
it
|
20
|
-
@session.attach_file
|
20
|
+
it 'should set a file path by label' do
|
21
|
+
@session.attach_file 'Image', with_os_path_separators(__FILE__)
|
21
22
|
@session.click_button('awesome')
|
22
|
-
expect(extract_results(@session)['image']).to
|
23
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
23
24
|
end
|
24
25
|
|
25
|
-
it
|
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
|
26
34
|
@session.attach_file :form_image, with_os_path_separators(__FILE__)
|
27
35
|
@session.click_button('awesome')
|
28
|
-
expect(extract_results(@session)['image']).to
|
36
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
29
37
|
end
|
30
38
|
end
|
31
39
|
|
32
|
-
context
|
33
|
-
it
|
34
|
-
@session.attach_file
|
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)
|
35
43
|
@session.click_button('Upload Single')
|
36
|
-
expect(@session).to have_content(File.read(
|
44
|
+
expect(@session).to have_content(File.read(test_file_path))
|
37
45
|
end
|
38
46
|
|
39
|
-
it
|
40
|
-
@session.attach_file
|
47
|
+
it 'should set a file path by label' do
|
48
|
+
@session.attach_file 'Single Document', with_os_path_separators(test_file_path)
|
41
49
|
@session.click_button('Upload Single')
|
42
|
-
expect(@session).to have_content(File.read(
|
50
|
+
expect(@session).to have_content(File.read(test_file_path))
|
43
51
|
end
|
44
52
|
|
45
|
-
it
|
53
|
+
it 'should not break if no file is submitted' do
|
46
54
|
@session.click_button('Upload Single')
|
47
55
|
expect(@session).to have_content('No file uploaded')
|
48
56
|
end
|
49
57
|
|
50
|
-
it
|
51
|
-
@session.
|
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)
|
52
66
|
@session.click_button 'Upload Single'
|
53
67
|
expect(@session).to have_content('text/plain')
|
54
68
|
end
|
55
69
|
|
56
|
-
it
|
57
|
-
@session.attach_file
|
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)
|
58
72
|
@session.click_button 'Upload Single'
|
59
73
|
expect(@session).to have_content('image/jpeg')
|
60
74
|
end
|
61
75
|
|
62
|
-
it
|
63
|
-
@session.attach_file
|
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)
|
64
78
|
@session.click_button 'Upload Single'
|
65
|
-
expect(@session).to have_content(File.read(
|
79
|
+
expect(@session).to have_content(File.read(no_extension_file_path))
|
66
80
|
end
|
67
81
|
|
68
|
-
it
|
69
|
-
@session.attach_file
|
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)
|
70
84
|
@session.click_button('Upload Multiple')
|
71
|
-
expect(@session).to have_content(File.read(
|
72
|
-
expect(@session.body).to include(
|
85
|
+
expect(@session).to have_content(File.read(test_file_path))
|
86
|
+
expect(@session.body).to include('1 | ') # number of files
|
73
87
|
end
|
74
88
|
|
75
|
-
it
|
76
|
-
@session.attach_file(
|
77
|
-
[
|
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) })
|
78
92
|
@session.click_button('Upload Multiple')
|
79
|
-
expect(@session
|
80
|
-
expect(@session.body).to include(File.read(
|
81
|
-
expect(@session.body).to include(File.read(
|
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))
|
82
96
|
end
|
83
97
|
|
84
|
-
it
|
98
|
+
it 'should not send anything when attaching no files to a multiple upload field' do
|
85
99
|
@session.click_button('Upload Empty Multiple')
|
86
|
-
expect(@session).to have_content(
|
100
|
+
expect(@session).to have_content('Successfully ignored empty file field')
|
87
101
|
end
|
88
102
|
|
89
|
-
it
|
90
|
-
@session.attach_file
|
91
|
-
@session.attach_file
|
92
|
-
[@test_file_path, @another_test_file_path].map { |f| with_os_path_separators(f) })
|
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)
|
93
106
|
@session.click_button('Upload Multiple')
|
94
|
-
expect(@session
|
95
|
-
expect(@session.body).to include(File.read(
|
96
|
-
expect(@session.body).
|
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)
|
97
125
|
end
|
98
126
|
end
|
99
127
|
|
100
128
|
context "with a locator that doesn't exist" do
|
101
|
-
it
|
102
|
-
msg =
|
129
|
+
it 'should raise an error' do
|
130
|
+
msg = /Unable to find file field "does not exist"/
|
103
131
|
expect do
|
104
|
-
@session.attach_file('does not exist', with_os_path_separators(
|
132
|
+
@session.attach_file('does not exist', with_os_path_separators(test_file_path))
|
105
133
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
106
134
|
end
|
107
135
|
end
|
108
136
|
|
109
137
|
context "with a path that doesn't exist" do
|
110
|
-
it
|
138
|
+
it 'should raise an error' do
|
111
139
|
expect { @session.attach_file('Image', '/no_such_file.png') }.to raise_error(Capybara::FileNotFound)
|
112
140
|
end
|
113
141
|
end
|
114
142
|
|
115
|
-
context
|
116
|
-
it
|
117
|
-
@session.attach_file
|
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
|
118
146
|
@session.click_button('awesome')
|
119
|
-
expect(extract_results(@session)['image']).to
|
147
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
120
148
|
end
|
121
149
|
|
122
|
-
it
|
150
|
+
it 'should not allow partial matches when true' do
|
123
151
|
expect do
|
124
|
-
@session.attach_file
|
152
|
+
@session.attach_file 'Imag', with_os_path_separators(__FILE__), exact: true
|
125
153
|
end.to raise_error(Capybara::ElementNotFound)
|
126
154
|
end
|
127
155
|
end
|
128
156
|
|
129
|
-
context
|
130
|
-
it
|
157
|
+
context 'with :make_visible option', requires: %i[js es_args] do
|
158
|
+
it 'applies a default style change when true' do
|
131
159
|
@session.visit('/with_js')
|
132
160
|
expect do
|
133
|
-
@session.attach_file(
|
161
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__))
|
134
162
|
end.to raise_error Capybara::ElementNotFound
|
135
163
|
expect do
|
136
|
-
@session.attach_file(
|
164
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: true)
|
137
165
|
end.not_to raise_error
|
138
166
|
end
|
139
167
|
|
140
|
-
it
|
168
|
+
it 'accepts a hash of styles to be applied' do
|
141
169
|
@session.visit('/with_js')
|
142
170
|
expect do
|
143
|
-
@session.attach_file(
|
171
|
+
@session.attach_file('hidden_file',
|
144
172
|
with_os_path_separators(__FILE__),
|
145
173
|
make_visible: { opacity: 1, display: 'block' })
|
146
174
|
end.not_to raise_error
|
147
175
|
end
|
148
176
|
|
149
|
-
it
|
177
|
+
it 'raises an error when the file input is not made visible' do
|
150
178
|
@session.visit('/with_js')
|
151
179
|
expect do
|
152
|
-
@session.attach_file(
|
180
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: { color: 'red' })
|
153
181
|
end.to raise_error(Capybara::ExpectationNotMet)
|
154
182
|
end
|
155
183
|
|
156
|
-
it
|
184
|
+
it 'resets the style when done' do
|
157
185
|
@session.visit('/with_js')
|
158
|
-
@session.attach_file(
|
159
|
-
expect(@session.evaluate_script(
|
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')
|
160
194
|
end
|
161
195
|
end
|
162
196
|
|
163
|
-
|
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
|
164
213
|
|
165
|
-
|
166
|
-
|
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
|
167
221
|
end
|
168
222
|
end
|
@@ -1,25 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#body' do
|
4
|
-
it
|
4
|
+
it 'should return the unmodified page body' do
|
5
5
|
@session.visit('/')
|
6
6
|
expect(@session).to have_content('Hello world!') # wait for content to appear if visit is async
|
7
7
|
expect(@session.body).to include('Hello world!')
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
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
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
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
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
@@ -1,189 +1,250 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
Capybara::SpecHelper.spec
|
3
|
+
Capybara::SpecHelper.spec '#check' do
|
4
4
|
before do
|
5
5
|
@session.visit('/form')
|
6
6
|
end
|
7
7
|
|
8
8
|
describe "'checked' attribute" do
|
9
|
-
it
|
10
|
-
@session.check(
|
9
|
+
it 'should be true if checked' do
|
10
|
+
@session.check('Terms of Use')
|
11
11
|
expect(@session.find(:xpath, "//input[@id='form_terms_of_use']")['checked']).to be_truthy
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
14
|
+
it 'should be false if unchecked' do
|
15
15
|
expect(@session.find(:xpath, "//input[@id='form_terms_of_use']")['checked']).to be_falsey
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it 'should trigger associated events', requires: [:js] do
|
20
20
|
@session.visit('/with_js')
|
21
21
|
@session.check('checkbox_with_event')
|
22
22
|
expect(@session).to have_css('#checkbox_event_triggered')
|
23
23
|
end
|
24
24
|
|
25
|
-
describe
|
26
|
-
it
|
25
|
+
describe 'checking' do
|
26
|
+
it 'should not change an already checked checkbox' do
|
27
27
|
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
|
28
28
|
@session.check('form_pets_dog')
|
29
29
|
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it 'should check an unchecked checkbox' do
|
33
33
|
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
|
34
34
|
@session.check('form_pets_cat')
|
35
35
|
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).to be_checked
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
describe
|
40
|
-
it
|
39
|
+
describe 'unchecking' do
|
40
|
+
it 'should not change an already unchecked checkbox' do
|
41
41
|
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
|
42
42
|
@session.uncheck('form_pets_cat')
|
43
43
|
expect(@session.find(:xpath, "//input[@id='form_pets_cat']")).not_to be_checked
|
44
44
|
end
|
45
45
|
|
46
|
-
it
|
46
|
+
it 'should uncheck a checked checkbox' do
|
47
47
|
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).to be_checked
|
48
48
|
@session.uncheck('form_pets_dog')
|
49
49
|
expect(@session.find(:xpath, "//input[@id='form_pets_dog']")).not_to be_checked
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
it
|
54
|
-
@session.check(
|
53
|
+
it 'should check a checkbox by id' do
|
54
|
+
@session.check('form_pets_cat')
|
55
55
|
@session.click_button('awesome')
|
56
56
|
expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
|
57
57
|
end
|
58
58
|
|
59
|
-
it
|
60
|
-
@session.check(
|
59
|
+
it 'should check a checkbox by label' do
|
60
|
+
@session.check('Cat')
|
61
61
|
@session.click_button('awesome')
|
62
62
|
expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
|
63
63
|
end
|
64
64
|
|
65
|
-
it
|
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
|
66
79
|
@session.check(:form_pets_cat)
|
67
80
|
@session.click_button('awesome')
|
68
81
|
expect(extract_results(@session)['pets']).to include('dog', 'cat', 'hamster')
|
69
82
|
end
|
70
83
|
|
71
84
|
context "with a locator that doesn't exist" do
|
72
|
-
it
|
73
|
-
msg =
|
85
|
+
it 'should raise an error' do
|
86
|
+
msg = /Unable to find checkbox "does not exist"/
|
74
87
|
expect do
|
75
88
|
@session.check('does not exist')
|
76
89
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
77
90
|
end
|
78
91
|
end
|
79
92
|
|
80
|
-
context
|
81
|
-
it
|
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'
|
82
96
|
expect do
|
83
97
|
@session.check('Disabled Checkbox')
|
84
|
-
end.to raise_error(Capybara::ElementNotFound)
|
98
|
+
end.to raise_error(Capybara::ElementNotFound, msg)
|
85
99
|
end
|
86
100
|
end
|
87
101
|
|
88
|
-
context
|
89
|
-
it
|
102
|
+
context 'with :exact option' do
|
103
|
+
it 'should accept partial matches when false' do
|
90
104
|
@session.check('Ham', exact: false)
|
91
105
|
@session.click_button('awesome')
|
92
106
|
expect(extract_results(@session)['pets']).to include('hamster')
|
93
107
|
end
|
94
108
|
|
95
|
-
it
|
109
|
+
it 'should not accept partial matches when true' do
|
96
110
|
expect do
|
97
111
|
@session.check('Ham', exact: true)
|
98
112
|
end.to raise_error(Capybara::ElementNotFound)
|
99
113
|
end
|
100
114
|
end
|
101
115
|
|
102
|
-
context
|
103
|
-
it
|
104
|
-
@session.check('form[pets][]', option:
|
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')
|
105
125
|
@session.click_button('awesome')
|
106
126
|
expect(extract_results(@session)['pets']).to include('cat')
|
107
127
|
end
|
108
128
|
|
109
|
-
it
|
129
|
+
it 'should raise an error if option not found' do
|
110
130
|
expect do
|
111
|
-
@session.check('form[pets][]', option:
|
131
|
+
@session.check('form[pets][]', option: 'elephant')
|
112
132
|
end.to raise_error(Capybara::ElementNotFound)
|
113
133
|
end
|
114
134
|
end
|
115
135
|
|
116
|
-
context
|
117
|
-
context
|
136
|
+
context 'when checkbox hidden' do
|
137
|
+
context 'with Capybara.automatic_label_click == true' do
|
118
138
|
around do |spec|
|
119
139
|
old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
|
120
140
|
spec.run
|
121
141
|
Capybara.automatic_label_click = old_click_label
|
122
142
|
end
|
123
143
|
|
124
|
-
it
|
125
|
-
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to
|
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
|
126
146
|
@session.check('form_cars_tesla')
|
127
147
|
@session.click_button('awesome')
|
128
148
|
expect(extract_results(@session)['cars']).to include('tesla')
|
129
149
|
end
|
130
150
|
|
131
|
-
it
|
132
|
-
expect(@session.find(:checkbox, 'form_cars_mclaren', unchecked: true, visible: :hidden)).to
|
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
|
133
153
|
@session.check('form_cars_mclaren')
|
134
154
|
@session.click_button('awesome')
|
135
155
|
expect(extract_results(@session)['cars']).to include('mclaren')
|
136
156
|
end
|
137
157
|
|
138
|
-
it
|
139
|
-
|
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
|
140
174
|
@session.check('form_cars_jaguar')
|
141
175
|
@session.click_button('awesome')
|
142
176
|
expect(extract_results(@session)['cars']).to include('jaguar')
|
143
177
|
end
|
144
178
|
|
145
|
-
it
|
146
|
-
expect { @session.check('form_cars_ariel') }.to raise_error(Capybara::ElementNotFound,
|
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"/)
|
147
181
|
end
|
148
182
|
|
149
|
-
it
|
150
|
-
expect { @session.check('form_cars_mclaren', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound,
|
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"/)
|
151
185
|
end
|
152
186
|
end
|
153
187
|
|
154
|
-
context
|
188
|
+
context 'with Capybara.automatic_label_click == false' do
|
155
189
|
around do |spec|
|
156
190
|
old_label_click, Capybara.automatic_label_click = Capybara.automatic_label_click, false
|
157
191
|
spec.run
|
158
192
|
Capybara.automatic_label_click = old_label_click
|
159
193
|
end
|
160
194
|
|
161
|
-
it
|
162
|
-
expect { @session.check('form_cars_mclaren') }.to raise_error(Capybara::ElementNotFound,
|
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')
|
163
201
|
end
|
164
202
|
|
165
|
-
context
|
166
|
-
it
|
167
|
-
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to
|
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
|
168
206
|
@session.check('form_cars_tesla', allow_label_click: true)
|
169
207
|
@session.click_button('awesome')
|
170
208
|
expect(extract_results(@session)['cars']).to include('tesla')
|
171
209
|
end
|
172
210
|
|
173
|
-
it
|
174
|
-
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to
|
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
|
175
213
|
start_time = Time.now
|
176
214
|
@session.check('form_cars_tesla', allow_label_click: true, wait: 10)
|
177
215
|
end_time = Time.now
|
178
216
|
expect(end_time - start_time).to be < 10
|
179
217
|
end
|
180
218
|
|
181
|
-
it
|
182
|
-
expect(@session.find(:checkbox, 'form_cars_pagani', unchecked: true, visible: :all)).to
|
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
|
183
221
|
@session.check('form_cars_pagani', allow_label_click: true)
|
184
222
|
@session.click_button('awesome')
|
185
223
|
expect(extract_results(@session)['cars']).to include('pagani')
|
186
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
|
187
248
|
end
|
188
249
|
end
|
189
250
|
end
|