capybara 3.32.2
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 +7 -0
- data/.yardopts +1 -0
- data/History.md +1813 -0
- data/License.txt +22 -0
- data/README.md +1099 -0
- data/lib/capybara.rb +511 -0
- data/lib/capybara/config.rb +94 -0
- data/lib/capybara/cucumber.rb +27 -0
- data/lib/capybara/driver/base.rb +170 -0
- data/lib/capybara/driver/node.rb +139 -0
- data/lib/capybara/dsl.rb +65 -0
- data/lib/capybara/helpers.rb +108 -0
- data/lib/capybara/minitest.rb +386 -0
- data/lib/capybara/minitest/spec.rb +264 -0
- data/lib/capybara/node/actions.rb +420 -0
- data/lib/capybara/node/base.rb +143 -0
- data/lib/capybara/node/document.rb +48 -0
- data/lib/capybara/node/document_matchers.rb +67 -0
- data/lib/capybara/node/element.rb +606 -0
- data/lib/capybara/node/finders.rb +325 -0
- data/lib/capybara/node/matchers.rb +883 -0
- data/lib/capybara/node/simple.rb +208 -0
- data/lib/capybara/queries/ancestor_query.rb +27 -0
- data/lib/capybara/queries/base_query.rb +106 -0
- data/lib/capybara/queries/current_path_query.rb +51 -0
- data/lib/capybara/queries/match_query.rb +26 -0
- data/lib/capybara/queries/selector_query.rb +710 -0
- data/lib/capybara/queries/sibling_query.rb +26 -0
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +110 -0
- data/lib/capybara/queries/title_query.rb +39 -0
- data/lib/capybara/rack_test/browser.rb +140 -0
- data/lib/capybara/rack_test/css_handlers.rb +13 -0
- data/lib/capybara/rack_test/driver.rb +109 -0
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +127 -0
- data/lib/capybara/rack_test/node.rb +325 -0
- data/lib/capybara/rails.rb +16 -0
- data/lib/capybara/registrations/drivers.rb +36 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +27 -0
- data/lib/capybara/registrations/servers.rb +44 -0
- data/lib/capybara/result.rb +190 -0
- data/lib/capybara/rspec.rb +29 -0
- data/lib/capybara/rspec/features.rb +23 -0
- data/lib/capybara/rspec/matcher_proxies.rb +82 -0
- data/lib/capybara/rspec/matchers.rb +201 -0
- data/lib/capybara/rspec/matchers/base.rb +111 -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 +77 -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 +38 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/selector.rb +233 -0
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +69 -0
- data/lib/capybara/selector/css.rb +102 -0
- data/lib/capybara/selector/definition.rb +276 -0
- data/lib/capybara/selector/definition/button.rb +51 -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 +27 -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 +46 -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/filter.rb +5 -0
- data/lib/capybara/selector/filter_set.rb +124 -0
- data/lib/capybara/selector/filters/base.rb +77 -0
- data/lib/capybara/selector/filters/expression_filter.rb +22 -0
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +31 -0
- data/lib/capybara/selector/regexp_disassembler.rb +214 -0
- data/lib/capybara/selector/selector.rb +147 -0
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- 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 +496 -0
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +119 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +126 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -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 +228 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +78 -0
- data/lib/capybara/selenium/logger_suppressor.rb +34 -0
- data/lib/capybara/selenium/node.rb +610 -0
- data/lib/capybara/selenium/nodes/chrome_node.rb +119 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +131 -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/action_pauser.rb +26 -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 +47 -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.rb +126 -0
- data/lib/capybara/server/animation_disabler.rb +58 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +69 -0
- data/lib/capybara/session.rb +942 -0
- data/lib/capybara/session/config.rb +124 -0
- data/lib/capybara/session/matchers.rb +87 -0
- data/lib/capybara/spec/fixtures/another_test_file.txt +1 -0
- data/lib/capybara/spec/fixtures/capybara.jpg +3 -0
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/fixtures/test_file.txt +1 -0
- data/lib/capybara/spec/public/jquery-ui.js +13 -0
- data/lib/capybara/spec/public/jquery.js +5 -0
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +268 -0
- data/lib/capybara/spec/session/accept_alert_spec.rb +81 -0
- data/lib/capybara/spec/session/accept_confirm_spec.rb +32 -0
- data/lib/capybara/spec/session/accept_prompt_spec.rb +78 -0
- data/lib/capybara/spec/session/all_spec.rb +278 -0
- data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
- data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
- 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_spec.rb +258 -0
- data/lib/capybara/spec/session/assert_title_spec.rb +93 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +216 -0
- data/lib/capybara/spec/session/body_spec.rb +23 -0
- data/lib/capybara/spec/session/check_spec.rb +235 -0
- data/lib/capybara/spec/session/choose_spec.rb +121 -0
- data/lib/capybara/spec/session/click_button_spec.rb +506 -0
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +129 -0
- data/lib/capybara/spec/session/click_link_spec.rb +229 -0
- data/lib/capybara/spec/session/current_scope_spec.rb +31 -0
- data/lib/capybara/spec/session/current_url_spec.rb +115 -0
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +36 -0
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +21 -0
- data/lib/capybara/spec/session/element/assert_match_selector_spec.rb +38 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +31 -0
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +25 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +120 -0
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +49 -0
- data/lib/capybara/spec/session/execute_script_spec.rb +28 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +286 -0
- data/lib/capybara/spec/session/find_button_spec.rb +74 -0
- data/lib/capybara/spec/session/find_by_id_spec.rb +33 -0
- data/lib/capybara/spec/session/find_field_spec.rb +113 -0
- data/lib/capybara/spec/session/find_link_spec.rb +70 -0
- data/lib/capybara/spec/session/find_spec.rb +531 -0
- data/lib/capybara/spec/session/first_spec.rb +156 -0
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
- data/lib/capybara/spec/session/go_back_spec.rb +12 -0
- data/lib/capybara/spec/session/go_forward_spec.rb +14 -0
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
- data/lib/capybara/spec/session/has_button_spec.rb +69 -0
- data/lib/capybara/spec/session/has_css_spec.rb +374 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +138 -0
- data/lib/capybara/spec/session/has_field_spec.rb +349 -0
- data/lib/capybara/spec/session/has_link_spec.rb +39 -0
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
- data/lib/capybara/spec/session/has_select_spec.rb +310 -0
- data/lib/capybara/spec/session/has_selector_spec.rb +202 -0
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +198 -0
- data/lib/capybara/spec/session/has_text_spec.rb +394 -0
- data/lib/capybara/spec/session/has_title_spec.rb +71 -0
- data/lib/capybara/spec/session/has_xpath_spec.rb +149 -0
- data/lib/capybara/spec/session/headers_spec.rb +8 -0
- data/lib/capybara/spec/session/html_spec.rb +47 -0
- data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
- data/lib/capybara/spec/session/node_spec.rb +1292 -0
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +33 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +148 -0
- data/lib/capybara/spec/session/response_code_spec.rb +8 -0
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +21 -0
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +43 -0
- data/lib/capybara/spec/session/save_page_spec.rb +110 -0
- data/lib/capybara/spec/session/save_screenshot_spec.rb +55 -0
- data/lib/capybara/spec/session/screenshot_spec.rb +18 -0
- data/lib/capybara/spec/session/scroll_spec.rb +117 -0
- data/lib/capybara/spec/session/select_spec.rb +229 -0
- data/lib/capybara/spec/session/selectors_spec.rb +98 -0
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/session/text_spec.rb +74 -0
- data/lib/capybara/spec/session/title_spec.rb +29 -0
- data/lib/capybara/spec/session/uncheck_spec.rb +100 -0
- data/lib/capybara/spec/session/unselect_spec.rb +116 -0
- data/lib/capybara/spec/session/visit_spec.rb +204 -0
- data/lib/capybara/spec/session/window/become_closed_spec.rb +89 -0
- data/lib/capybara/spec/session/window/current_window_spec.rb +28 -0
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +31 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +132 -0
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +99 -0
- data/lib/capybara/spec/session/window/window_spec.rb +203 -0
- data/lib/capybara/spec/session/window/windows_spec.rb +34 -0
- data/lib/capybara/spec/session/window/within_window_spec.rb +157 -0
- data/lib/capybara/spec/session/within_spec.rb +199 -0
- data/lib/capybara/spec/spec_helper.rb +134 -0
- data/lib/capybara/spec/test_app.rb +226 -0
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/buttons.erb +5 -0
- data/lib/capybara/spec/views/fieldsets.erb +30 -0
- data/lib/capybara/spec/views/form.erb +685 -0
- data/lib/capybara/spec/views/frame_child.erb +18 -0
- data/lib/capybara/spec/views/frame_one.erb +10 -0
- data/lib/capybara/spec/views/frame_parent.erb +9 -0
- data/lib/capybara/spec/views/frame_two.erb +9 -0
- data/lib/capybara/spec/views/header_links.erb +8 -0
- data/lib/capybara/spec/views/host_links.erb +13 -0
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +32 -0
- data/lib/capybara/spec/views/path.erb +13 -0
- data/lib/capybara/spec/views/popup_one.erb +9 -0
- data/lib/capybara/spec/views/popup_two.erb +9 -0
- data/lib/capybara/spec/views/postback.erb +14 -0
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +20 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +130 -0
- data/lib/capybara/spec/views/with_animation.erb +74 -0
- data/lib/capybara/spec/views/with_base_tag.erb +11 -0
- data/lib/capybara/spec/views/with_count.erb +8 -0
- data/lib/capybara/spec/views/with_dragula.erb +22 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +24 -0
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +208 -0
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_html_entities.erb +2 -0
- data/lib/capybara/spec/views/with_js.erb +160 -0
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +20 -0
- data/lib/capybara/spec/views/with_scope.erb +42 -0
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_simple_html.erb +2 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +17 -0
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_title.erb +5 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +14 -0
- data/lib/capybara/spec/views/with_windows.erb +54 -0
- data/lib/capybara/spec/views/within_frames.erb +15 -0
- data/lib/capybara/version.rb +5 -0
- data/lib/capybara/window.rb +146 -0
- data/spec/basic_node_spec.rb +154 -0
- data/spec/capybara_spec.rb +112 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +276 -0
- data/spec/filter_set_spec.rb +46 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +13 -0
- data/spec/fixtures/selenium_driver_rspec_success.rb +13 -0
- data/spec/minitest_spec.rb +163 -0
- data/spec/minitest_spec_spec.rb +162 -0
- data/spec/per_session_config_spec.rb +68 -0
- data/spec/rack_test_spec.rb +268 -0
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +196 -0
- data/spec/rspec/features_spec.rb +99 -0
- data/spec/rspec/scenarios_spec.rb +19 -0
- data/spec/rspec/shared_spec_matchers.rb +947 -0
- data/spec/rspec/views_spec.rb +14 -0
- data/spec/rspec_matchers_spec.rb +62 -0
- data/spec/rspec_spec.rb +145 -0
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +513 -0
- data/spec/selenium_spec_chrome.rb +188 -0
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +47 -0
- data/spec/selenium_spec_firefox.rb +208 -0
- data/spec/selenium_spec_firefox_remote.rb +80 -0
- data/spec/selenium_spec_ie.rb +150 -0
- data/spec/selenium_spec_safari.rb +148 -0
- data/spec/server_spec.rb +292 -0
- data/spec/session_spec.rb +91 -0
- data/spec/shared_selenium_node.rb +83 -0
- data/spec/shared_selenium_session.rb +476 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +753 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#assert_text' do
|
|
4
|
+
it 'should be true if the given text is on the page' do
|
|
5
|
+
@session.visit('/with_html')
|
|
6
|
+
expect(@session.assert_text('est')).to eq(true)
|
|
7
|
+
expect(@session.assert_text('Lorem')).to eq(true)
|
|
8
|
+
expect(@session.assert_text('Redirect')).to eq(true)
|
|
9
|
+
expect(@session.assert_text(:Redirect)).to eq(true)
|
|
10
|
+
expect(@session.assert_text('text with whitespace')).to eq(true)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'should support collapsing whitespace' do
|
|
14
|
+
@session.visit('/with_html')
|
|
15
|
+
expect(@session.assert_text('text with whitespace', normalize_ws: true)).to eq(true)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context 'with enabled default collapsing whitespace' do
|
|
19
|
+
before { Capybara.default_normalize_ws = true }
|
|
20
|
+
|
|
21
|
+
it 'should be true if the given unnormalized text is on the page' do
|
|
22
|
+
@session.visit('/with_html')
|
|
23
|
+
expect(@session.assert_text('text with whitespace', normalize_ws: false)).to eq(true)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should support collapsing whitespace' do
|
|
27
|
+
@session.visit('/with_html')
|
|
28
|
+
expect(@session.assert_text('text with whitespace')).to eq(true)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'should take scopes into account' do
|
|
33
|
+
@session.visit('/with_html')
|
|
34
|
+
@session.within("//a[@title='awesome title']") do
|
|
35
|
+
expect(@session.assert_text('labore')).to eq(true)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should raise if scoped to an element which does not have the text' do
|
|
40
|
+
@session.visit('/with_html')
|
|
41
|
+
@session.within("//a[@title='awesome title']") do
|
|
42
|
+
expect do
|
|
43
|
+
@session.assert_text('monkey')
|
|
44
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected to find text "monkey" in "labore"')
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should be true if :all given and text is invisible.' do
|
|
49
|
+
@session.visit('/with_html')
|
|
50
|
+
expect(@session.assert_text(:all, 'Some of this text is hidden!')).to eq(true)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'should be true if `Capybara.ignore_hidden_elements = true` and text is invisible.' do
|
|
54
|
+
Capybara.ignore_hidden_elements = false
|
|
55
|
+
@session.visit('/with_html')
|
|
56
|
+
expect(@session.assert_text('Some of this text is hidden!')).to eq(true)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'should raise error with a helpful message if the requested text is present but invisible' do
|
|
60
|
+
@session.visit('/with_html')
|
|
61
|
+
el = @session.find(:css, '#hidden-text')
|
|
62
|
+
expect do
|
|
63
|
+
el.assert_text(:visible, 'Some of this text is hidden!')
|
|
64
|
+
end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time including non-visible text/)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'should raise error with a helpful message if the requested text is present but with incorrect case' do
|
|
68
|
+
@session.visit('/with_html')
|
|
69
|
+
expect do
|
|
70
|
+
@session.assert_text('Text With Whitespace')
|
|
71
|
+
end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time using a case insensitive search/)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should raise error with helpful message if requested text is present but invisible and with incorrect case', requires: [:js] do
|
|
75
|
+
@session.visit('/with_html')
|
|
76
|
+
el = @session.find(:css, '#uppercase')
|
|
77
|
+
expect do
|
|
78
|
+
el.assert_text('text here')
|
|
79
|
+
end.to raise_error(Capybara::ExpectationNotMet, /it was found 1 time using a case insensitive search and it was found 1 time including non-visible text/)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'should raise the correct error if requested text is missing but contains regex special characters' do
|
|
83
|
+
@session.visit('/with_html')
|
|
84
|
+
expect do
|
|
85
|
+
@session.assert_text('[]*.')
|
|
86
|
+
end.to raise_error(Capybara::ExpectationNotMet, /expected to find text "\[\]\*\."/)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'should be true if the text in the page matches given regexp' do
|
|
90
|
+
@session.visit('/with_html')
|
|
91
|
+
expect(@session.assert_text(/Lorem/)).to eq(true)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should raise error if the text in the page doesn't match given regexp" do
|
|
95
|
+
@session.visit('/with_html')
|
|
96
|
+
expect do
|
|
97
|
+
@session.assert_text(/xxxxyzzz/)
|
|
98
|
+
end.to raise_error(Capybara::ExpectationNotMet, %r{\Aexpected to find text matching /xxxxyzzz/ in "This is a test\\nHeader Class(.+)"\Z})
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'should escape any characters that would have special meaning in a regexp' do
|
|
102
|
+
@session.visit('/with_html')
|
|
103
|
+
expect do
|
|
104
|
+
@session.assert_text('.orem')
|
|
105
|
+
end.to raise_error(Capybara::ExpectationNotMet)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it 'should wait for text to appear', requires: [:js] do
|
|
109
|
+
Capybara.default_max_wait_time = 2
|
|
110
|
+
@session.visit('/with_js')
|
|
111
|
+
@session.click_link('Click me')
|
|
112
|
+
expect(@session.assert_text('Has been clicked')).to eq(true)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
context 'with between' do
|
|
116
|
+
it 'should be true if the text occurs within the range given' do
|
|
117
|
+
@session.visit('/with_count')
|
|
118
|
+
expect(@session.assert_text('count', between: 1..3)).to eq(true)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'should be false if the text occurs more or fewer times than range' do
|
|
122
|
+
@session.visit('/with_html')
|
|
123
|
+
expect do
|
|
124
|
+
@session.find(:css, '.number').assert_text(/\d/, between: 0..1)
|
|
125
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected to find text matching /\\d/ between 0 and 1 times but found 2 times in "42"')
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context 'with wait', requires: [:js] do
|
|
130
|
+
it 'should find element if it appears before given wait duration' do
|
|
131
|
+
Capybara.using_wait_time(0) do
|
|
132
|
+
@session.visit('/with_js')
|
|
133
|
+
@session.find(:css, '#reload-list').click
|
|
134
|
+
@session.find(:css, '#the-list').assert_text("Foo\nBar", wait: 0.9)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it 'should raise error if it appears after given wait duration' do
|
|
139
|
+
Capybara.using_wait_time(0) do
|
|
140
|
+
@session.visit('/with_js')
|
|
141
|
+
@session.find(:css, '#reload-list').click
|
|
142
|
+
el = @session.find(:css, '#the-list', visible: false)
|
|
143
|
+
expect do
|
|
144
|
+
el.assert_text(:all, 'Foo Bar', wait: 0.3)
|
|
145
|
+
end.to raise_error(Capybara::ExpectationNotMet)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
context 'with multiple count filters' do
|
|
151
|
+
before do
|
|
152
|
+
@session.visit('/with_html')
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it 'ignores other filters when :count is specified' do
|
|
156
|
+
o = { count: 5,
|
|
157
|
+
minimum: 6,
|
|
158
|
+
maximum: 0,
|
|
159
|
+
between: 0..4 }
|
|
160
|
+
expect { @session.assert_text('Header', **o) }.not_to raise_error
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
context 'with no :count expectation' do
|
|
164
|
+
it 'fails if :minimum is not met' do
|
|
165
|
+
o = { minimum: 6,
|
|
166
|
+
maximum: 5,
|
|
167
|
+
between: 2..7 }
|
|
168
|
+
expect { @session.assert_text('Header', **o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it 'fails if :maximum is not met' do
|
|
172
|
+
o = { minimum: 0,
|
|
173
|
+
maximum: 0,
|
|
174
|
+
between: 2..7 }
|
|
175
|
+
expect { @session.assert_text('Header', **o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it 'fails if :between is not met' do
|
|
179
|
+
o = { minimum: 0,
|
|
180
|
+
maximum: 5,
|
|
181
|
+
between: 0..4 }
|
|
182
|
+
expect { @session.assert_text('Header', **o) }.to raise_error(Capybara::ExpectationNotMet)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it 'succeeds if all combineable expectations are met' do
|
|
186
|
+
o = { minimum: 0,
|
|
187
|
+
maximum: 5,
|
|
188
|
+
between: 2..7 }
|
|
189
|
+
expect { @session.assert_text('Header', **o) }.not_to raise_error
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
Capybara::SpecHelper.spec '#assert_no_text' do
|
|
196
|
+
it 'should raise error if the given text is on the page at least once' do
|
|
197
|
+
@session.visit('/with_html')
|
|
198
|
+
expect do
|
|
199
|
+
@session.assert_no_text('Lorem')
|
|
200
|
+
end.to raise_error(Capybara::ExpectationNotMet, /\Aexpected not to find text "Lorem" in "This is a test.*"\z/)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it 'should be true if scoped to an element which does not have the text' do
|
|
204
|
+
@session.visit('/with_html')
|
|
205
|
+
@session.within("//a[@title='awesome title']") do
|
|
206
|
+
expect(@session.assert_no_text('monkey')).to eq(true)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it 'should be true if the given text is on the page but not visible' do
|
|
211
|
+
@session.visit('/with_html')
|
|
212
|
+
expect(@session.assert_no_text('Inside element with hidden ancestor')).to eq(true)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it 'should raise error if :all given and text is invisible.' do
|
|
216
|
+
@session.visit('/with_html')
|
|
217
|
+
el = @session.find(:css, '#hidden-text', visible: false)
|
|
218
|
+
expect do
|
|
219
|
+
el.assert_no_text(:all, 'Some of this text is hidden!')
|
|
220
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected not to find text "Some of this text is hidden!" in "Some of this text is hidden!"')
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it 'should raise error if :all given and text is invisible.' do
|
|
224
|
+
@session.visit('/with_html')
|
|
225
|
+
el = @session.find(:css, '#some-hidden-text', visible: false)
|
|
226
|
+
expect do
|
|
227
|
+
el.assert_no_text(:visible, 'hidden')
|
|
228
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected not to find text "hidden" in "Some of this text is not hidden"')
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
it "should be true if the text in the page doesn't match given regexp" do
|
|
232
|
+
@session.visit('/with_html')
|
|
233
|
+
@session.assert_no_text(/xxxxyzzz/)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
context 'with count' do
|
|
237
|
+
it 'should be true if the text occurs within the range given' do
|
|
238
|
+
@session.visit('/with_count')
|
|
239
|
+
expect(@session.assert_text('count', count: 2)).to eq(true)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
it 'should be false if the text occurs more or fewer times than range' do
|
|
243
|
+
@session.visit('/with_html')
|
|
244
|
+
expect do
|
|
245
|
+
@session.find(:css, '.number').assert_text(/\d/, count: 1)
|
|
246
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected to find text matching /\\d/ 1 time but found 2 times in "42"')
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
context 'with wait', requires: [:js] do
|
|
251
|
+
it 'should not find element if it appears after given wait duration' do
|
|
252
|
+
@session.visit('/with_js')
|
|
253
|
+
@session.click_link('Click me')
|
|
254
|
+
@session.find(:css, '#reload-list').click
|
|
255
|
+
@session.find(:css, '#the-list').assert_no_text('Foo Bar', wait: 0.3)
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#assert_title' do
|
|
4
|
+
before do
|
|
5
|
+
@session.visit('/with_js')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should not raise if the page's title contains the given string" do
|
|
9
|
+
expect do
|
|
10
|
+
@session.assert_title('js')
|
|
11
|
+
end.not_to raise_error
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'should not raise when given an empty string' do
|
|
15
|
+
expect do
|
|
16
|
+
@session.assert_title('')
|
|
17
|
+
end.not_to raise_error
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should allow regexp matches' do
|
|
21
|
+
expect do
|
|
22
|
+
@session.assert_title(/w[a-z]{3}_js/)
|
|
23
|
+
end.not_to raise_error
|
|
24
|
+
|
|
25
|
+
expect do
|
|
26
|
+
@session.assert_title(/w[a-z]{10}_js/)
|
|
27
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to match /w[a-z]{10}_js/')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'should wait for title', requires: [:js] do
|
|
31
|
+
@session.click_link('Change title')
|
|
32
|
+
expect do
|
|
33
|
+
@session.assert_title('changed title', wait: 3)
|
|
34
|
+
end.not_to raise_error
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should raise error if the title doesn't contain the given string" do
|
|
38
|
+
expect do
|
|
39
|
+
@session.assert_title('monkey')
|
|
40
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to include "monkey"')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'should not normalize given title' do
|
|
44
|
+
@session.visit('/with_js')
|
|
45
|
+
expect { @session.assert_title(' with_js ') }.to raise_error(Capybara::ExpectationNotMet)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should match correctly normalized title' do
|
|
49
|
+
uri = Addressable::URI.parse('/with_title')
|
|
50
|
+
uri.query_values = { title: ' with space title ' }
|
|
51
|
+
@session.visit(uri.to_s)
|
|
52
|
+
@session.assert_title(' with space title')
|
|
53
|
+
expect { @session.assert_title('with space title') }.to raise_error(Capybara::ExpectationNotMet)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'should not normalize given title in error message' do
|
|
57
|
+
expect do
|
|
58
|
+
@session.assert_title(2)
|
|
59
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" to include "2"')
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
Capybara::SpecHelper.spec '#assert_no_title' do
|
|
64
|
+
before do
|
|
65
|
+
@session.visit('/with_js')
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should raise error if the title contains the given string' do
|
|
69
|
+
expect do
|
|
70
|
+
@session.assert_no_title('with_j')
|
|
71
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" not to include "with_j"')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should allow regexp matches' do
|
|
75
|
+
expect do
|
|
76
|
+
@session.assert_no_title(/w[a-z]{3}_js/)
|
|
77
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'expected "with_js" not to match /w[a-z]{3}_js/')
|
|
78
|
+
@session.assert_no_title(/monkey/)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'should wait for title to disappear', requires: [:js] do
|
|
82
|
+
@session.click_link('Change title')
|
|
83
|
+
expect do
|
|
84
|
+
@session.assert_no_title('with_js', wait: 3)
|
|
85
|
+
end.not_to raise_error
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should not raise if the title doesn't contain the given string" do
|
|
89
|
+
expect do
|
|
90
|
+
@session.assert_no_title('monkey')
|
|
91
|
+
end.not_to raise_error
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#attach_file' do
|
|
4
|
+
let(:test_file_path) { File.expand_path('../fixtures/test_file.txt', File.dirname(__FILE__)) }
|
|
5
|
+
let(:another_test_file_path) { File.expand_path('../fixtures/another_test_file.txt', File.dirname(__FILE__)) }
|
|
6
|
+
let(:test_jpg_file_path) { File.expand_path('../fixtures/capybara.jpg', File.dirname(__FILE__)) }
|
|
7
|
+
let(:no_extension_file_path) { File.expand_path('../fixtures/no_extension', File.dirname(__FILE__)) }
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@session.visit('/form')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context 'with normal form' do
|
|
14
|
+
it 'should set a file path by id' do
|
|
15
|
+
@session.attach_file 'form_image', with_os_path_separators(__FILE__)
|
|
16
|
+
@session.click_button('awesome')
|
|
17
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should set a file path by label' do
|
|
21
|
+
@session.attach_file 'Image', with_os_path_separators(__FILE__)
|
|
22
|
+
@session.click_button('awesome')
|
|
23
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should be able to set on element if no locator passed' do
|
|
27
|
+
ff = @session.find(:file_field, 'Image')
|
|
28
|
+
ff.attach_file(with_os_path_separators(__FILE__))
|
|
29
|
+
@session.click_button('awesome')
|
|
30
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'casts to string' do
|
|
34
|
+
@session.attach_file :form_image, with_os_path_separators(__FILE__)
|
|
35
|
+
@session.click_button('awesome')
|
|
36
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'with multipart form' do
|
|
41
|
+
it 'should set a file path by id' do
|
|
42
|
+
@session.attach_file 'form_document', with_os_path_separators(test_file_path)
|
|
43
|
+
@session.click_button('Upload Single')
|
|
44
|
+
expect(@session).to have_content(File.read(test_file_path))
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'should set a file path by label' do
|
|
48
|
+
@session.attach_file 'Single Document', with_os_path_separators(test_file_path)
|
|
49
|
+
@session.click_button('Upload Single')
|
|
50
|
+
expect(@session).to have_content(File.read(test_file_path))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'should not break if no file is submitted' do
|
|
54
|
+
@session.click_button('Upload Single')
|
|
55
|
+
expect(@session).to have_content('No file uploaded')
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should send content type text/plain when uploading a text file' do
|
|
59
|
+
@session.attach_file 'Single Document', with_os_path_separators(test_file_path)
|
|
60
|
+
@session.click_button 'Upload Single'
|
|
61
|
+
expect(@session).to have_content('text/plain')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should send content type image/jpeg when uploading an image' do
|
|
65
|
+
@session.attach_file 'Single Document', with_os_path_separators(test_jpg_file_path)
|
|
66
|
+
@session.click_button 'Upload Single'
|
|
67
|
+
expect(@session).to have_content('image/jpeg')
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'should not break when uploading a file without extension' do
|
|
71
|
+
@session.attach_file 'Single Document', with_os_path_separators(no_extension_file_path)
|
|
72
|
+
@session.click_button 'Upload Single'
|
|
73
|
+
expect(@session).to have_content(File.read(no_extension_file_path))
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'should not break when using HTML5 multiple file input' do
|
|
77
|
+
@session.attach_file 'Multiple Documents', with_os_path_separators(test_file_path)
|
|
78
|
+
@session.click_button('Upload Multiple')
|
|
79
|
+
expect(@session).to have_content(File.read(test_file_path))
|
|
80
|
+
expect(@session.body).to include('1 | ') # number of files
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'should not break when using HTML5 multiple file input uploading multiple files' do
|
|
84
|
+
@session.attach_file('Multiple Documents',
|
|
85
|
+
[test_file_path, another_test_file_path].map { |f| with_os_path_separators(f) })
|
|
86
|
+
@session.click_button('Upload Multiple')
|
|
87
|
+
expect(@session).to have_content('2 | ') # number of files
|
|
88
|
+
expect(@session.body).to include(File.read(test_file_path))
|
|
89
|
+
expect(@session.body).to include(File.read(another_test_file_path))
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'should not send anything when attaching no files to a multiple upload field' do
|
|
93
|
+
@session.click_button('Upload Empty Multiple')
|
|
94
|
+
expect(@session).to have_content('Successfully ignored empty file field')
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'should not append files to already attached' do
|
|
98
|
+
@session.attach_file 'Multiple Documents', with_os_path_separators(test_file_path)
|
|
99
|
+
@session.attach_file 'Multiple Documents', with_os_path_separators(another_test_file_path)
|
|
100
|
+
@session.click_button('Upload Multiple')
|
|
101
|
+
expect(@session).to have_content('1 | ') # number of files
|
|
102
|
+
expect(@session.body).to include(File.read(another_test_file_path))
|
|
103
|
+
expect(@session.body).not_to include(File.read(test_file_path))
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it 'should fire change once when uploading multiple files from empty', requires: [:js] do
|
|
107
|
+
@session.visit('with_js')
|
|
108
|
+
@session.attach_file('multiple-file',
|
|
109
|
+
[test_file_path, another_test_file_path].map { |f| with_os_path_separators(f) })
|
|
110
|
+
expect(@session).to have_css('.file_change', count: 1)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'should fire change once for each set of files uploaded', requires: [:js] do
|
|
114
|
+
@session.visit('with_js')
|
|
115
|
+
@session.attach_file('multiple-file', [test_jpg_file_path].map { |f| with_os_path_separators(f) })
|
|
116
|
+
@session.attach_file('multiple-file',
|
|
117
|
+
[test_file_path, another_test_file_path].map { |f| with_os_path_separators(f) })
|
|
118
|
+
expect(@session).to have_css('.file_change', count: 2)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
context "with a locator that doesn't exist" do
|
|
123
|
+
it 'should raise an error' do
|
|
124
|
+
msg = /Unable to find file field "does not exist"/
|
|
125
|
+
expect do
|
|
126
|
+
@session.attach_file('does not exist', with_os_path_separators(test_file_path))
|
|
127
|
+
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
context "with a path that doesn't exist" do
|
|
132
|
+
it 'should raise an error' do
|
|
133
|
+
expect { @session.attach_file('Image', '/no_such_file.png') }.to raise_error(Capybara::FileNotFound)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
context 'with :exact option' do
|
|
138
|
+
it 'should set a file path by partial label when false' do
|
|
139
|
+
@session.attach_file 'Imag', with_os_path_separators(__FILE__), exact: false
|
|
140
|
+
@session.click_button('awesome')
|
|
141
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it 'should not allow partial matches when true' do
|
|
145
|
+
expect do
|
|
146
|
+
@session.attach_file 'Imag', with_os_path_separators(__FILE__), exact: true
|
|
147
|
+
end.to raise_error(Capybara::ElementNotFound)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
context 'with :make_visible option', requires: %i[js es_args] do
|
|
152
|
+
it 'applies a default style change when true' do
|
|
153
|
+
@session.visit('/with_js')
|
|
154
|
+
expect do
|
|
155
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__))
|
|
156
|
+
end.to raise_error Capybara::ElementNotFound
|
|
157
|
+
expect do
|
|
158
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: true)
|
|
159
|
+
end.not_to raise_error
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it 'accepts a hash of styles to be applied' do
|
|
163
|
+
@session.visit('/with_js')
|
|
164
|
+
expect do
|
|
165
|
+
@session.attach_file('hidden_file',
|
|
166
|
+
with_os_path_separators(__FILE__),
|
|
167
|
+
make_visible: { opacity: 1, display: 'block' })
|
|
168
|
+
end.not_to raise_error
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it 'raises an error when the file input is not made visible' do
|
|
172
|
+
@session.visit('/with_js')
|
|
173
|
+
expect do
|
|
174
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: { color: 'red' })
|
|
175
|
+
end.to raise_error(Capybara::ExpectationNotMet)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it 'resets the style when done' do
|
|
179
|
+
@session.visit('/with_js')
|
|
180
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: true)
|
|
181
|
+
expect(@session.evaluate_script('arguments[0].style.display', @session.find(:css, '#hidden_file', visible: :all))).to eq 'none'
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it 'should fire change' do
|
|
185
|
+
@session.visit('/with_js')
|
|
186
|
+
@session.attach_file('hidden_file', with_os_path_separators(__FILE__), make_visible: true)
|
|
187
|
+
expect(@session).to have_css('.file_change')
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
context 'with a block', requires: %i[js] do
|
|
192
|
+
it 'can upload by clicking the file input' do
|
|
193
|
+
@session.attach_file(with_os_path_separators(__FILE__)) do
|
|
194
|
+
@session.find(:file_field, 'form[image]').click
|
|
195
|
+
end
|
|
196
|
+
@session.click_button('awesome')
|
|
197
|
+
expect(extract_results(@session)['image']).to end_with(File.basename(__FILE__))
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'can upload by clicking the label' do
|
|
201
|
+
@session.attach_file(with_os_path_separators(__FILE__)) do
|
|
202
|
+
@session.find(:label, 'Hidden Image').click
|
|
203
|
+
end
|
|
204
|
+
@session.click_button('awesome')
|
|
205
|
+
expect(extract_results(@session)['hidden_image']).to end_with(File.basename(__FILE__))
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it 'should fire change' do
|
|
209
|
+
@session.visit('/with_js')
|
|
210
|
+
@session.attach_file(with_os_path_separators(__FILE__)) do
|
|
211
|
+
@session.find(:label, 'Label for hidden file input').click
|
|
212
|
+
end
|
|
213
|
+
expect(@session).to have_css('.file_change')
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|