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,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#sibling' do
|
|
4
|
+
before do
|
|
5
|
+
@session.visit('/with_html')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
after do
|
|
9
|
+
Capybara::Selector.remove(:monkey)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'should find a prior sibling element using the given locator' do
|
|
13
|
+
el = @session.find(:css, '#mid_sibling')
|
|
14
|
+
expect(el.sibling('//div[@data-pre]')[:id]).to eq('pre_sibling')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should find a following sibling element using the given locator' do
|
|
18
|
+
el = @session.find(:css, '#mid_sibling')
|
|
19
|
+
expect(el.sibling('//div[@data-post]')[:id]).to eq('post_sibling')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should raise an error if there are multiple matches' do
|
|
23
|
+
el = @session.find(:css, '#mid_sibling')
|
|
24
|
+
expect { el.sibling('//div') }.to raise_error(Capybara::Ambiguous)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'with css selectors' do
|
|
28
|
+
it 'should find the first element using the given locator' do
|
|
29
|
+
el = @session.find(:css, '#mid_sibling')
|
|
30
|
+
expect(el.sibling(:css, '#pre_sibling')).to have_text('Pre Sibling')
|
|
31
|
+
expect(el.sibling(:css, '#post_sibling')).to have_text('Post Sibling')
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'with custom selector' do
|
|
36
|
+
it 'should use the custom selector' do
|
|
37
|
+
Capybara.add_selector(:data_attribute) do
|
|
38
|
+
xpath { |attr| ".//*[@data-#{attr}]" }
|
|
39
|
+
end
|
|
40
|
+
el = @session.find(:css, '#mid_sibling')
|
|
41
|
+
expect(el.sibling(:data_attribute, 'pre').text).to eq('Pre Sibling')
|
|
42
|
+
expect(el.sibling(:data_attribute, 'post').text).to eq('Post Sibling')
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should raise ElementNotFound with a useful default message if nothing was found' do
|
|
47
|
+
el = @session.find(:css, '#child')
|
|
48
|
+
expect do
|
|
49
|
+
el.sibling(:xpath, '//div[@id="nosuchthing"]')
|
|
50
|
+
end.to raise_error(Capybara::ElementNotFound, 'Unable to find xpath "//div[@id=\\"nosuchthing\\"]" that is a sibling of visible css "#child"')
|
|
51
|
+
end
|
|
52
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#text' do
|
|
4
|
+
it 'should print the text of the page' do
|
|
5
|
+
@session.visit('/with_simple_html')
|
|
6
|
+
expect(@session.text).to eq('Bar')
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it 'ignores invisible text by default' do
|
|
10
|
+
@session.visit('/with_html')
|
|
11
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'shows invisible text if `:all` given' do
|
|
15
|
+
@session.visit('/with_html')
|
|
16
|
+
expect(@session.find(:id, 'hidden-text').text(:all)).to eq('Some of this text is hidden!')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'ignores invisible text if `:visible` given' do
|
|
20
|
+
Capybara.ignore_hidden_elements = false
|
|
21
|
+
@session.visit('/with_html')
|
|
22
|
+
expect(@session.find(:id, 'hidden-text').text(:visible)).to eq('Some of this text is')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'ignores invisible text if `Capybara.ignore_hidden_elements = true`' do
|
|
26
|
+
@session.visit('/with_html')
|
|
27
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
28
|
+
Capybara.ignore_hidden_elements = false
|
|
29
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is hidden!')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'ignores invisible text if `Capybara.visible_text_only = true`' do
|
|
33
|
+
@session.visit('/with_html')
|
|
34
|
+
Capybara.visible_text_only = true
|
|
35
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
36
|
+
Capybara.ignore_hidden_elements = false
|
|
37
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'ignores invisible text if ancestor is invisible' do
|
|
41
|
+
@session.visit('/with_html')
|
|
42
|
+
expect(@session.find(:id, 'hidden_via_ancestor', visible: false).text).to eq('')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context 'with css as default selector' do
|
|
46
|
+
before { Capybara.default_selector = :css }
|
|
47
|
+
|
|
48
|
+
after { Capybara.default_selector = :xpath }
|
|
49
|
+
|
|
50
|
+
it 'should print the text of the page' do
|
|
51
|
+
@session.visit('/with_simple_html')
|
|
52
|
+
expect(@session.text).to eq('Bar')
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'should be correctly normalized when visible' do
|
|
57
|
+
@session.visit('/with_html')
|
|
58
|
+
el = @session.find(:css, '#normalized')
|
|
59
|
+
expect(el.text).to eq "Some text\nMore text\nAnd more text\nEven more text on multiple lines"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'should be a textContent with irrelevant whitespace collapsed when non-visible' do
|
|
63
|
+
@session.visit('/with_html')
|
|
64
|
+
el = @session.find(:css, '#non_visible_normalized', visible: false)
|
|
65
|
+
expect(el.text(:all)).to eq 'Some textMore text And more text Even more text on multiple lines'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should strip correctly' do
|
|
69
|
+
@session.visit('/with_html')
|
|
70
|
+
el = @session.find(:css, '#ws')
|
|
71
|
+
expect(el.text).to eq ' '
|
|
72
|
+
expect(el.text(:all)).to eq ' '
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#title' do
|
|
4
|
+
it 'should get the title of the page' do
|
|
5
|
+
@session.visit('/with_title')
|
|
6
|
+
expect(@session.title).to eq('Test Title')
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
context 'with css as default selector' do
|
|
10
|
+
before { Capybara.default_selector = :css }
|
|
11
|
+
|
|
12
|
+
after { Capybara.default_selector = :xpath }
|
|
13
|
+
|
|
14
|
+
it 'should get the title of the page' do
|
|
15
|
+
@session.visit('/with_title')
|
|
16
|
+
expect(@session.title).to eq('Test Title')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context 'within iframe', requires: [:frames] do
|
|
21
|
+
it 'should get the title of the top level browsing context' do
|
|
22
|
+
@session.visit('/within_frames')
|
|
23
|
+
expect(@session.title).to eq('With Frames')
|
|
24
|
+
@session.within_frame('frameOne') do
|
|
25
|
+
expect(@session.title).to eq('With Frames')
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#uncheck' do
|
|
4
|
+
before do
|
|
5
|
+
@session.visit('/form')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'should uncheck a checkbox by id' do
|
|
9
|
+
@session.uncheck('form_pets_hamster')
|
|
10
|
+
@session.click_button('awesome')
|
|
11
|
+
expect(extract_results(@session)['pets']).to include('dog')
|
|
12
|
+
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'should uncheck a checkbox by label' do
|
|
16
|
+
@session.uncheck('Hamster')
|
|
17
|
+
@session.click_button('awesome')
|
|
18
|
+
expect(extract_results(@session)['pets']).to include('dog')
|
|
19
|
+
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should work without a locator string' do
|
|
23
|
+
@session.uncheck(id: 'form_pets_hamster')
|
|
24
|
+
@session.click_button('awesome')
|
|
25
|
+
expect(extract_results(@session)['pets']).to include('dog')
|
|
26
|
+
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should be able to uncheck itself if no locator specified' do
|
|
30
|
+
cb = @session.find(:id, 'form_pets_hamster')
|
|
31
|
+
cb.uncheck
|
|
32
|
+
@session.click_button('awesome')
|
|
33
|
+
expect(extract_results(@session)['pets']).to include('dog')
|
|
34
|
+
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'casts to string' do
|
|
38
|
+
@session.uncheck(:form_pets_hamster)
|
|
39
|
+
@session.click_button('awesome')
|
|
40
|
+
expect(extract_results(@session)['pets']).to include('dog')
|
|
41
|
+
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'with :exact option' do
|
|
45
|
+
it 'should accept partial matches when false' do
|
|
46
|
+
@session.uncheck('Ham', exact: false)
|
|
47
|
+
@session.click_button('awesome')
|
|
48
|
+
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'should not accept partial matches when true' do
|
|
52
|
+
expect do
|
|
53
|
+
@session.uncheck('Ham', exact: true)
|
|
54
|
+
end.to raise_error(Capybara::ElementNotFound)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context 'when checkbox hidden' do
|
|
59
|
+
context 'with Capybara.automatic_label_click == true' do
|
|
60
|
+
around do |spec|
|
|
61
|
+
old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
|
|
62
|
+
spec.run
|
|
63
|
+
Capybara.automatic_label_click = old_click_label
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'should uncheck via clicking the label with :for attribute if possible' do
|
|
67
|
+
expect(@session.find(:checkbox, 'form_cars_jaguar', checked: true, visible: :hidden)).to be_truthy
|
|
68
|
+
@session.uncheck('form_cars_jaguar')
|
|
69
|
+
@session.click_button('awesome')
|
|
70
|
+
expect(extract_results(@session)['cars']).not_to include('jaguar')
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should uncheck via clicking the wrapping label if possible' do
|
|
74
|
+
expect(@session.find(:checkbox, 'form_cars_koenigsegg', checked: true, visible: :hidden)).to be_truthy
|
|
75
|
+
@session.uncheck('form_cars_koenigsegg')
|
|
76
|
+
@session.click_button('awesome')
|
|
77
|
+
expect(extract_results(@session)['cars']).not_to include('koenigsegg')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'should not click the label if unneeded' do
|
|
81
|
+
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be_truthy
|
|
82
|
+
@session.uncheck('form_cars_tesla')
|
|
83
|
+
@session.click_button('awesome')
|
|
84
|
+
expect(extract_results(@session)['cars']).not_to include('tesla')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'should raise original error when no label available' do
|
|
88
|
+
expect { @session.uncheck('form_cars_porsche') }.to raise_error(Capybara::ElementNotFound, /Unable to find visible checkbox "form_cars_porsche"/)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'should raise error if not allowed to click label' do
|
|
92
|
+
expect { @session.uncheck('form_cars_jaguar', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, /Unable to find visible checkbox "form_cars_jaguar"/)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should include node filter description in error if necessary' do
|
|
96
|
+
expect { @session.uncheck('form_cars_maserati', allow_label_click: false) }.to raise_error(Capybara::ElementNotFound, 'Unable to find visible checkbox "form_cars_maserati" that is not disabled')
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#unselect' do
|
|
4
|
+
before do
|
|
5
|
+
@session.visit('/form')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context 'with multiple select' do
|
|
9
|
+
it 'should unselect an option from a select box by id' do
|
|
10
|
+
@session.unselect('Commando', from: 'form_underwear')
|
|
11
|
+
@session.click_button('awesome')
|
|
12
|
+
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
|
13
|
+
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should unselect an option without a select box' do
|
|
17
|
+
@session.unselect('Commando')
|
|
18
|
+
@session.click_button('awesome')
|
|
19
|
+
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
|
20
|
+
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should unselect an option from a select box by label' do
|
|
24
|
+
@session.unselect('Commando', from: 'Underwear')
|
|
25
|
+
@session.click_button('awesome')
|
|
26
|
+
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
|
27
|
+
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'should favour exact matches to option labels' do
|
|
31
|
+
@session.unselect('Briefs', from: 'Underwear')
|
|
32
|
+
@session.click_button('awesome')
|
|
33
|
+
expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
|
|
34
|
+
expect(extract_results(@session)['underwear']).not_to include('Briefs')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should escape quotes' do
|
|
38
|
+
@session.unselect("Frenchman's Pantalons", from: 'Underwear')
|
|
39
|
+
@session.click_button('awesome')
|
|
40
|
+
expect(extract_results(@session)['underwear']).not_to include("Frenchman's Pantalons")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'casts to string' do
|
|
44
|
+
@session.unselect(:Briefs, from: :Underwear)
|
|
45
|
+
@session.click_button('awesome')
|
|
46
|
+
expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
|
|
47
|
+
expect(extract_results(@session)['underwear']).not_to include('Briefs')
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context 'with single select' do
|
|
52
|
+
it 'should raise an error' do
|
|
53
|
+
expect { @session.unselect('English', from: 'form_locale') }.to raise_error(Capybara::UnselectNotAllowed)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "with a locator that doesn't exist" do
|
|
58
|
+
it 'should raise an error' do
|
|
59
|
+
msg = /Unable to find select box "does not exist"/
|
|
60
|
+
expect do
|
|
61
|
+
@session.unselect('foo', from: 'does not exist')
|
|
62
|
+
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context "with an option that doesn't exist" do
|
|
67
|
+
it 'should raise an error' do
|
|
68
|
+
msg = /^Unable to find option "Does not Exist" within/
|
|
69
|
+
expect do
|
|
70
|
+
@session.unselect('Does not Exist', from: 'form_underwear')
|
|
71
|
+
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
context 'with :exact option' do
|
|
76
|
+
context 'when `false`' do
|
|
77
|
+
it 'can match select box approximately' do
|
|
78
|
+
@session.unselect('Boxerbriefs', from: 'Under', exact: false)
|
|
79
|
+
@session.click_button('awesome')
|
|
80
|
+
expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'can match option approximately' do
|
|
84
|
+
@session.unselect('Boxerbr', from: 'Underwear', exact: false)
|
|
85
|
+
@session.click_button('awesome')
|
|
86
|
+
expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'can match option approximately when :from not given' do
|
|
90
|
+
@session.unselect('Boxerbr', exact: false)
|
|
91
|
+
@session.click_button('awesome')
|
|
92
|
+
expect(extract_results(@session)['underwear']).not_to include('Boxerbriefs')
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
context 'when `true`' do
|
|
97
|
+
it 'can match select box approximately' do
|
|
98
|
+
expect do
|
|
99
|
+
@session.unselect('Boxerbriefs', from: 'Under', exact: true)
|
|
100
|
+
end.to raise_error(Capybara::ElementNotFound)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it 'can match option approximately' do
|
|
104
|
+
expect do
|
|
105
|
+
@session.unselect('Boxerbr', from: 'Underwear', exact: true)
|
|
106
|
+
end.to raise_error(Capybara::ElementNotFound)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'can match option approximately when :from not given' do
|
|
110
|
+
expect do
|
|
111
|
+
@session.unselect('Boxerbr', exact: true)
|
|
112
|
+
end.to raise_error(Capybara::ElementNotFound)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#visit' do
|
|
4
|
+
it 'should fetch a response from the driver with a relative url' do
|
|
5
|
+
@session.visit('/')
|
|
6
|
+
expect(@session).to have_content('Hello world!')
|
|
7
|
+
@session.visit('/foo')
|
|
8
|
+
expect(@session).to have_content('Another World')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'should fetch a response from the driver with an absolute url with a port' do
|
|
12
|
+
# Preparation
|
|
13
|
+
@session.visit('/')
|
|
14
|
+
root_uri = URI.parse(@session.current_url)
|
|
15
|
+
|
|
16
|
+
@session.visit("http://#{root_uri.host}:#{root_uri.port}/")
|
|
17
|
+
expect(@session).to have_content('Hello world!')
|
|
18
|
+
@session.visit("http://#{root_uri.host}:#{root_uri.port}/foo")
|
|
19
|
+
expect(@session).to have_content('Another World')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should fetch a response when absolute URI doesn't have a trailing slash" do
|
|
23
|
+
# Preparation
|
|
24
|
+
@session.visit('/foo/bar')
|
|
25
|
+
root_uri = URI.parse(@session.current_url)
|
|
26
|
+
|
|
27
|
+
@session.visit("http://#{root_uri.host}:#{root_uri.port}")
|
|
28
|
+
expect(@session).to have_content('Hello world!')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should fetch a response when sequentially visiting same destination with a target' do
|
|
32
|
+
@session.visit('/form')
|
|
33
|
+
expect(@session).to have_css('#form_title')
|
|
34
|
+
@session.visit('/form#form_title')
|
|
35
|
+
expect(@session).to have_css('#form_title')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'raises any errors caught inside the server', requires: [:server] do
|
|
39
|
+
quietly { @session.visit('/error') }
|
|
40
|
+
expect do
|
|
41
|
+
@session.visit('/')
|
|
42
|
+
end.to raise_error(TestApp::TestAppError)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should be able to open non-http url', requires: [:about_scheme] do
|
|
46
|
+
@session.visit('about:blank')
|
|
47
|
+
@session.assert_no_selector :xpath, '/html/body/*'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context 'when Capybara.always_include_port is true' do
|
|
51
|
+
let(:root_uri) do
|
|
52
|
+
@session.visit('/')
|
|
53
|
+
URI.parse(@session.current_url)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
before do
|
|
57
|
+
Capybara.always_include_port = true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
after do
|
|
61
|
+
Capybara.always_include_port = false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should fetch a response from the driver with an absolute url without a port' do
|
|
65
|
+
@session.visit("http://#{root_uri.host}/")
|
|
66
|
+
expect(URI.parse(@session.current_url).port).to eq(root_uri.port)
|
|
67
|
+
expect(@session).to have_content('Hello world!')
|
|
68
|
+
|
|
69
|
+
@session.visit("http://#{root_uri.host}/foo")
|
|
70
|
+
expect(URI.parse(@session.current_url).port).to eq(root_uri.port)
|
|
71
|
+
expect(@session).to have_content('Another World')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should add the server port to a visited url if no port specified', requires: [:server] do
|
|
75
|
+
allow(@session.driver).to receive(:visit)
|
|
76
|
+
@session.visit('http://www.example.com')
|
|
77
|
+
expect(@session.driver).to have_received(:visit).with("http://www.example.com:#{@session.server.port}")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'should not override the visit specified port even if default for scheme', requires: [:server] do
|
|
81
|
+
allow(@session.driver).to receive(:visit)
|
|
82
|
+
@session.visit('http://www.example.com:80')
|
|
83
|
+
expect(@session.driver).to have_received(:visit).with('http://www.example.com:80')
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'should give preference to app_host port if specified', requires: [:server] do
|
|
87
|
+
allow(@session.driver).to receive(:visit)
|
|
88
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
|
89
|
+
@session.visit('/random')
|
|
90
|
+
expect(@session.driver).to have_received(:visit).with('http://www.example.com:6666/random')
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "shouldn't override port if no server", requires: [:server] do
|
|
94
|
+
session = Capybara::Session.new(@session.mode, nil)
|
|
95
|
+
allow(session.driver).to receive(:visit)
|
|
96
|
+
session.visit('http://www.google.com')
|
|
97
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com')
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "shouldn't override port if no server but app_host is set", requires: [:server] do
|
|
101
|
+
session = Capybara::Session.new(@session.mode, nil)
|
|
102
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
|
103
|
+
allow(session.driver).to receive(:visit)
|
|
104
|
+
session.visit('http://www.google.com')
|
|
105
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com')
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context 'when Capybara.always_include_port is false' do
|
|
110
|
+
before do
|
|
111
|
+
Capybara.always_include_port = false
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "shouldn't overwrite port if app_host is set", requires: [:server] do
|
|
115
|
+
session = Capybara::Session.new(@session.mode, nil)
|
|
116
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
|
117
|
+
allow(session.driver).to receive(:visit)
|
|
118
|
+
session.visit('http://www.google.com')
|
|
119
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com')
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "shouldn't overwrite port if port specfified", requires: [:server] do
|
|
123
|
+
session = Capybara::Session.new(@session.mode, nil)
|
|
124
|
+
Capybara.app_host = 'http://www.example.com:6666'
|
|
125
|
+
allow(session.driver).to receive(:visit)
|
|
126
|
+
session.visit('http://www.google.com:99')
|
|
127
|
+
expect(session.driver).to have_received(:visit).with('http://www.google.com:99')
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
context 'without a server', requires: [:server] do
|
|
132
|
+
it 'should respect `app_host`' do
|
|
133
|
+
serverless_session = Capybara::Session.new(@session.mode, nil)
|
|
134
|
+
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}"
|
|
135
|
+
serverless_session.visit('/foo')
|
|
136
|
+
expect(serverless_session).to have_content('Another World')
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it 'should visit a fully qualified URL' do
|
|
140
|
+
serverless_session = Capybara::Session.new(@session.mode, nil)
|
|
141
|
+
serverless_session.visit("http://#{@session.server.host}:#{@session.server.port}/foo")
|
|
142
|
+
expect(serverless_session).to have_content('Another World')
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
context 'with Capybara.app_host set' do
|
|
147
|
+
it 'should override server', requires: [:server] do
|
|
148
|
+
another_session = Capybara::Session.new(@session.mode, @session.app.dup)
|
|
149
|
+
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}"
|
|
150
|
+
another_session.visit('/foo')
|
|
151
|
+
expect(another_session).to have_content('Another World')
|
|
152
|
+
expect(another_session.current_url).to start_with(Capybara.app_host)
|
|
153
|
+
expect(URI.parse(another_session.current_url).port).not_to eq another_session.server.port
|
|
154
|
+
expect(URI.parse(another_session.current_url).port).to eq @session.server.port
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it 'should append relative path', requires: [:server] do
|
|
158
|
+
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}/redirect/0"
|
|
159
|
+
@session.visit('/times')
|
|
160
|
+
expect(@session).to have_content('redirection complete')
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it 'should work if `app_host` has a trailing /', requires: [:server] do
|
|
164
|
+
Capybara.app_host = "http://#{@session.server.host}:#{@session.server.port}/"
|
|
165
|
+
@session.visit('/')
|
|
166
|
+
expect(@session).to have_content('Hello world!')
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'should send no referer when visiting a page' do
|
|
171
|
+
@session.visit '/get_referer'
|
|
172
|
+
expect(@session).to have_content 'No referer'
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it 'should send no referer when visiting a second page' do
|
|
176
|
+
@session.visit '/get_referer'
|
|
177
|
+
@session.visit '/get_referer'
|
|
178
|
+
expect(@session).to have_content 'No referer'
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it 'should send a referer when following a link' do
|
|
182
|
+
@session.visit '/referer_base'
|
|
183
|
+
@session.find('//a[@href="/get_referer"]').click
|
|
184
|
+
expect(@session).to have_content %r{http://.*/referer_base}
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it 'should preserve the original referer URL when following a redirect' do
|
|
188
|
+
@session.visit('/referer_base')
|
|
189
|
+
@session.find('//a[@href="/redirect_to_get_referer"]').click
|
|
190
|
+
expect(@session).to have_content %r{http://.*/referer_base}
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it 'should send a referer when submitting a form' do
|
|
194
|
+
@session.visit '/referer_base'
|
|
195
|
+
@session.find('//input').click
|
|
196
|
+
expect(@session).to have_content %r{http://.*/referer_base}
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
it 'can set cookie if a blank path is specified' do
|
|
200
|
+
@session.visit('')
|
|
201
|
+
@session.visit('/get_cookie')
|
|
202
|
+
expect(@session).to have_content('root cookie')
|
|
203
|
+
end
|
|
204
|
+
end
|