capybara 3.3.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 -0
- data/History.md +803 -13
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +25 -9
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +17 -3
- data/lib/capybara/driver/node.rb +31 -6
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +31 -7
- data/lib/capybara/minitest/spec.rb +180 -88
- data/lib/capybara/minitest.rb +262 -149
- data/lib/capybara/node/actions.rb +202 -116
- data/lib/capybara/node/base.rb +34 -19
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +10 -12
- data/lib/capybara/node/element.rb +269 -115
- data/lib/capybara/node/finders.rb +99 -77
- data/lib/capybara/node/matchers.rb +327 -151
- data/lib/capybara/node/simple.rb +48 -13
- 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 +8 -9
- data/lib/capybara/queries/base_query.rb +23 -16
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +1 -0
- data/lib/capybara/queries/selector_query.rb +587 -130
- data/lib/capybara/queries/sibling_query.rb +8 -6
- data/lib/capybara/queries/style_query.rb +6 -2
- data/lib/capybara/queries/text_query.rb +28 -14
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +92 -25
- 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 +68 -41
- data/lib/capybara/rack_test/node.rb +106 -39
- 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 +75 -52
- data/lib/capybara/rspec/features.rb +7 -7
- 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 +141 -339
- data/lib/capybara/rspec.rb +2 -0
- 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 +27 -25
- 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 +73 -25
- data/lib/capybara/selector/filters/base.rb +24 -5
- data/lib/capybara/selector/filters/expression_filter.rb +3 -3
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +16 -2
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +85 -348
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -447
- 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 +255 -143
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +93 -11
- 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 +436 -134
- 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 +56 -19
- data/lib/capybara/server/checker.rb +9 -3
- data/lib/capybara/server/middleware.rb +28 -12
- data/lib/capybara/server.rb +33 -10
- data/lib/capybara/session/config.rb +34 -10
- data/lib/capybara/session/matchers.rb +23 -16
- data/lib/capybara/session.rb +230 -170
- 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 +121 -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 +127 -40
- 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_spec.rb +21 -18
- data/lib/capybara/spec/session/assert_selector_spec.rb +52 -58
- data/lib/capybara/spec/session/assert_style_spec.rb +7 -7
- data/lib/capybara/spec/session/assert_text_spec.rb +74 -50
- data/lib/capybara/spec/session/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 +6 -6
- data/lib/capybara/spec/session/check_spec.rb +102 -47
- data/lib/capybara/spec/session/choose_spec.rb +58 -32
- data/lib/capybara/spec/session/click_button_spec.rb +219 -163
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -23
- data/lib/capybara/spec/session/click_link_spec.rb +77 -54
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +38 -29
- 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_spec.rb +8 -8
- data/lib/capybara/spec/session/element/match_css_spec.rb +16 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +6 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +68 -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 +101 -46
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +7 -7
- data/lib/capybara/spec/session/find_field_spec.rb +32 -30
- data/lib/capybara/spec/session/find_link_spec.rb +31 -21
- data/lib/capybara/spec/session/find_spec.rb +244 -141
- data/lib/capybara/spec/session/first_spec.rb +43 -43
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +5 -5
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +30 -18
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +45 -18
- 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 +94 -13
- data/lib/capybara/spec/session/has_css_spec.rb +272 -132
- 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 +44 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +31 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +111 -71
- 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_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 +894 -142
- data/lib/capybara/spec/session/node_wrapper_spec.rb +10 -7
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +63 -35
- data/lib/capybara/spec/session/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 +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +37 -37
- data/lib/capybara/spec/session/save_screenshot_spec.rb +10 -10
- 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 +85 -85
- data/lib/capybara/spec/session/selectors_spec.rb +49 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +25 -24
- data/lib/capybara/spec/session/title_spec.rb +7 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +33 -21
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +68 -49
- data/lib/capybara/spec/session/window/become_closed_spec.rb +20 -17
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +20 -16
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +6 -2
- data/lib/capybara/spec/session/window/window_spec.rb +62 -63
- data/lib/capybara/spec/session/window/windows_spec.rb +5 -1
- data/lib/capybara/spec/session/window/within_window_spec.rb +14 -14
- data/lib/capybara/spec/session/within_spec.rb +79 -42
- data/lib/capybara/spec/spec_helper.rb +41 -53
- data/lib/capybara/spec/test_app.rb +132 -43
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +139 -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 +67 -0
- data/lib/capybara/spec/views/with_animation.erb +39 -4
- 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 +37 -9
- 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 +26 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +1 -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 +19 -25
- data/lib/capybara.rb +126 -111
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +56 -44
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +8 -8
- data/spec/dsl_spec.rb +79 -52
- data/spec/filter_set_spec.rb +9 -9
- data/spec/fixtures/selenium_driver_rspec_failure.rb +4 -4
- data/spec/fixtures/selenium_driver_rspec_success.rb +4 -4
- data/spec/minitest_spec.rb +45 -7
- data/spec/minitest_spec_spec.rb +87 -64
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +172 -116
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +80 -72
- data/spec/rspec/features_spec.rb +21 -16
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +407 -365
- data/spec/rspec/views_spec.rb +3 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +63 -41
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +334 -89
- data/spec/selenium_spec_chrome.rb +176 -62
- data/spec/selenium_spec_chrome_remote.rb +54 -14
- 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 +171 -97
- data/spec/session_spec.rb +34 -18
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +344 -80
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +326 -28
- data/lib/capybara/rspec/compound.rb +0 -94
- data/lib/capybara/selenium/driver_specializations/marionette_driver.rb +0 -31
- data/lib/capybara/selenium/nodes/marionette_node.rb +0 -31
- data/lib/capybara/spec/session/has_style_spec.rb +0 -25
- 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 -167
|
@@ -1,118 +1,118 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
Capybara::SpecHelper.spec
|
|
3
|
+
Capybara::SpecHelper.spec '#select' do
|
|
4
4
|
before do
|
|
5
5
|
@session.visit('/form')
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
it
|
|
8
|
+
it 'should return value of the first option' do
|
|
9
9
|
expect(@session.find_field('Title').value).to eq('Mrs')
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
it
|
|
13
|
-
@session.select(
|
|
12
|
+
it 'should return value of the selected option' do
|
|
13
|
+
@session.select('Miss', from: 'Title')
|
|
14
14
|
expect(@session.find_field('Title').value).to eq('Miss')
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
it
|
|
18
|
-
@session.select(
|
|
17
|
+
it 'should allow selecting exact options where there are inexact matches', :exact_false do
|
|
18
|
+
@session.select('Mr', from: 'Title')
|
|
19
19
|
expect(@session.find_field('Title').value).to eq('Mr')
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
it
|
|
23
|
-
@session.select(
|
|
22
|
+
it 'should allow selecting options where they are the only inexact match', :exact_false do
|
|
23
|
+
@session.select('Mis', from: 'Title')
|
|
24
24
|
expect(@session.find_field('Title').value).to eq('Miss')
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
it
|
|
27
|
+
it 'should not allow selecting options where they are the only inexact match if `exact: true` is specified' do
|
|
28
28
|
sel = @session.find(:select, 'Title')
|
|
29
29
|
expect do
|
|
30
|
-
sel.select(
|
|
30
|
+
sel.select('Mis', exact: true)
|
|
31
31
|
end.to raise_error(Capybara::ElementNotFound)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
it
|
|
34
|
+
it 'should not allow selecting an option if the match is ambiguous', :exact_false do
|
|
35
35
|
expect do
|
|
36
|
-
@session.select(
|
|
36
|
+
@session.select('M', from: 'Title')
|
|
37
37
|
end.to raise_error(Capybara::Ambiguous)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
it
|
|
40
|
+
it 'should return the value attribute rather than content if present' do
|
|
41
41
|
expect(@session.find_field('Locale').value).to eq('en')
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
it
|
|
45
|
-
@session.select(
|
|
44
|
+
it 'should select an option from a select box by id' do
|
|
45
|
+
@session.select('Finnish', from: 'form_locale')
|
|
46
46
|
@session.click_button('awesome')
|
|
47
47
|
expect(extract_results(@session)['locale']).to eq('fi')
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
it
|
|
51
|
-
@session.select(
|
|
50
|
+
it 'should select an option from a select box by label' do
|
|
51
|
+
@session.select('Finnish', from: 'Locale')
|
|
52
52
|
@session.click_button('awesome')
|
|
53
53
|
expect(extract_results(@session)['locale']).to eq('fi')
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
it
|
|
57
|
-
@session.select(
|
|
56
|
+
it 'should select an option without giving a select box' do
|
|
57
|
+
@session.select('Swedish')
|
|
58
58
|
@session.click_button('awesome')
|
|
59
59
|
expect(extract_results(@session)['locale']).to eq('sv')
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
it
|
|
62
|
+
it 'should escape quotes' do
|
|
63
63
|
@session.select("John's made-up language", from: 'Locale')
|
|
64
64
|
@session.click_button('awesome')
|
|
65
65
|
expect(extract_results(@session)['locale']).to eq('jo')
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
it
|
|
69
|
-
@session.select(
|
|
68
|
+
it 'should obey from' do
|
|
69
|
+
@session.select('Miss', from: 'Other title')
|
|
70
70
|
@session.click_button('awesome')
|
|
71
71
|
results = extract_results(@session)
|
|
72
|
-
expect(results['other_title']).to eq(
|
|
73
|
-
expect(results['title']).not_to eq(
|
|
72
|
+
expect(results['other_title']).to eq('Miss')
|
|
73
|
+
expect(results['title']).not_to eq('Miss')
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
it
|
|
77
|
-
@session.select(
|
|
76
|
+
it 'show match labels with preceding or trailing whitespace' do
|
|
77
|
+
@session.select('Lojban', from: 'Locale')
|
|
78
78
|
@session.click_button('awesome')
|
|
79
79
|
expect(extract_results(@session)['locale']).to eq('jbo')
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
it
|
|
82
|
+
it 'casts to string' do
|
|
83
83
|
@session.select(:Miss, from: :Title)
|
|
84
84
|
expect(@session.find_field('Title').value).to eq('Miss')
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
context
|
|
88
|
-
it
|
|
89
|
-
@session.select(
|
|
87
|
+
context 'input with datalist' do
|
|
88
|
+
it 'should select an option' do
|
|
89
|
+
@session.select('Audi', from: 'manufacturer')
|
|
90
90
|
@session.click_button('awesome')
|
|
91
91
|
expect(extract_results(@session)['manufacturer']).to eq('Audi')
|
|
92
92
|
end
|
|
93
93
|
|
|
94
|
-
it
|
|
94
|
+
it 'should not find an input without a datalist' do
|
|
95
95
|
expect do
|
|
96
|
-
@session.select(
|
|
97
|
-
end.to raise_error(/Unable to find
|
|
96
|
+
@session.select('Thomas', from: 'form_first_name')
|
|
97
|
+
end.to raise_error(/Unable to find input box with datalist completion "form_first_name"/)
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
it "should not select an option that doesn't exist" do
|
|
101
101
|
expect do
|
|
102
|
-
@session.select(
|
|
102
|
+
@session.select('Tata', from: 'manufacturer')
|
|
103
103
|
end.to raise_error(/Unable to find datalist option "Tata"/)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
it
|
|
106
|
+
it 'should not select a disabled option' do
|
|
107
107
|
expect do
|
|
108
|
-
@session.select(
|
|
108
|
+
@session.select('Mercedes', from: 'manufacturer')
|
|
109
109
|
end.to raise_error(/Unable to find datalist option "Mercedes"/)
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
context "with a locator that doesn't exist" do
|
|
114
|
-
it
|
|
115
|
-
msg = /Unable to find
|
|
114
|
+
it 'should raise an error' do
|
|
115
|
+
msg = /Unable to find select box "does not exist"/
|
|
116
116
|
expect do
|
|
117
117
|
@session.select('foo', from: 'does not exist')
|
|
118
118
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
@@ -120,110 +120,110 @@ Capybara::SpecHelper.spec "#select" do
|
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
context "with an option that doesn't exist" do
|
|
123
|
-
it
|
|
124
|
-
msg = /^Unable to find
|
|
123
|
+
it 'should raise an error' do
|
|
124
|
+
msg = /^Unable to find option "Does not Exist" within/
|
|
125
125
|
expect do
|
|
126
126
|
@session.select('Does not Exist', from: 'form_locale')
|
|
127
127
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
128
128
|
end
|
|
129
129
|
end
|
|
130
130
|
|
|
131
|
-
context
|
|
132
|
-
it
|
|
131
|
+
context 'on a disabled select' do
|
|
132
|
+
it 'should raise an error' do
|
|
133
133
|
expect do
|
|
134
134
|
@session.select('Should not see me', from: 'Disabled Select')
|
|
135
135
|
end.to raise_error(Capybara::ElementNotFound)
|
|
136
136
|
end
|
|
137
137
|
end
|
|
138
138
|
|
|
139
|
-
context
|
|
140
|
-
it
|
|
139
|
+
context 'on a disabled option' do
|
|
140
|
+
it 'should not select' do
|
|
141
141
|
@session.select('Other', from: 'form_title')
|
|
142
142
|
expect(@session.find_field('form_title').value).not_to eq 'Other'
|
|
143
143
|
end
|
|
144
|
-
|
|
145
|
-
it "should warn" do
|
|
146
|
-
expect_any_instance_of(Capybara::Node::Element).to receive(:warn).once
|
|
147
|
-
@session.select('Other', from: 'form_title')
|
|
148
|
-
end
|
|
149
144
|
end
|
|
150
145
|
|
|
151
|
-
context
|
|
152
|
-
it
|
|
146
|
+
context 'with multiple select' do
|
|
147
|
+
it 'should return an empty value' do
|
|
153
148
|
expect(@session.find_field('Languages').value).to eq([])
|
|
154
149
|
end
|
|
155
150
|
|
|
156
|
-
it
|
|
157
|
-
@session.select(
|
|
158
|
-
@session.select(
|
|
151
|
+
it 'should return value of the selected options' do
|
|
152
|
+
@session.select('Ruby', from: 'Languages')
|
|
153
|
+
@session.select('Javascript', from: 'Languages')
|
|
159
154
|
expect(@session.find_field('Languages').value).to include('Ruby', 'Javascript')
|
|
160
155
|
end
|
|
161
156
|
|
|
162
|
-
it
|
|
163
|
-
@session.select(
|
|
157
|
+
it 'should select one option' do
|
|
158
|
+
@session.select('Ruby', from: 'Languages')
|
|
164
159
|
@session.click_button('awesome')
|
|
165
160
|
expect(extract_results(@session)['languages']).to eq(['Ruby'])
|
|
166
161
|
end
|
|
167
162
|
|
|
168
|
-
it
|
|
169
|
-
@session.select(
|
|
170
|
-
@session.select(
|
|
163
|
+
it 'should select multiple options' do
|
|
164
|
+
@session.select('Ruby', from: 'Languages')
|
|
165
|
+
@session.select('Javascript', from: 'Languages')
|
|
171
166
|
@session.click_button('awesome')
|
|
172
167
|
expect(extract_results(@session)['languages']).to include('Ruby', 'Javascript')
|
|
173
168
|
end
|
|
174
169
|
|
|
175
|
-
it
|
|
176
|
-
@session.select(
|
|
177
|
-
@session.select(
|
|
178
|
-
@session.select(
|
|
170
|
+
it 'should remain selected if already selected' do
|
|
171
|
+
@session.select('Ruby', from: 'Languages')
|
|
172
|
+
@session.select('Javascript', from: 'Languages')
|
|
173
|
+
@session.select('Ruby', from: 'Languages')
|
|
179
174
|
@session.click_button('awesome')
|
|
180
175
|
expect(extract_results(@session)['languages']).to include('Ruby', 'Javascript')
|
|
181
176
|
end
|
|
182
177
|
|
|
183
|
-
it
|
|
178
|
+
it 'should return value attribute rather than content if present' do
|
|
184
179
|
expect(@session.find_field('Underwear').value).to include('thermal')
|
|
185
180
|
end
|
|
186
181
|
end
|
|
187
182
|
|
|
188
|
-
context
|
|
189
|
-
context
|
|
190
|
-
it
|
|
191
|
-
@session.select(
|
|
192
|
-
@session.click_button(
|
|
193
|
-
expect(extract_results(@session)[
|
|
183
|
+
context 'with :exact option' do
|
|
184
|
+
context 'when `false`' do
|
|
185
|
+
it 'can match select box approximately' do
|
|
186
|
+
@session.select('Finnish', from: 'Loc', exact: false)
|
|
187
|
+
@session.click_button('awesome')
|
|
188
|
+
expect(extract_results(@session)['locale']).to eq('fi')
|
|
194
189
|
end
|
|
195
190
|
|
|
196
|
-
it
|
|
197
|
-
@session.select(
|
|
198
|
-
@session.click_button(
|
|
199
|
-
expect(extract_results(@session)[
|
|
191
|
+
it 'can match option approximately' do
|
|
192
|
+
@session.select('Fin', from: 'Locale', exact: false)
|
|
193
|
+
@session.click_button('awesome')
|
|
194
|
+
expect(extract_results(@session)['locale']).to eq('fi')
|
|
200
195
|
end
|
|
201
196
|
|
|
202
|
-
it
|
|
203
|
-
@session.select(
|
|
204
|
-
@session.click_button(
|
|
205
|
-
expect(extract_results(@session)[
|
|
197
|
+
it 'can match option approximately when :from not given' do
|
|
198
|
+
@session.select('made-up language', exact: false)
|
|
199
|
+
@session.click_button('awesome')
|
|
200
|
+
expect(extract_results(@session)['locale']).to eq('jo')
|
|
206
201
|
end
|
|
207
202
|
end
|
|
208
203
|
|
|
209
|
-
context
|
|
210
|
-
it
|
|
204
|
+
context 'when `true`' do
|
|
205
|
+
it 'can match select box approximately' do
|
|
211
206
|
expect do
|
|
212
|
-
@session.select(
|
|
207
|
+
@session.select('Finnish', from: 'Loc', exact: true)
|
|
213
208
|
end.to raise_error(Capybara::ElementNotFound)
|
|
214
209
|
end
|
|
215
210
|
|
|
216
|
-
it
|
|
211
|
+
it 'can match option approximately' do
|
|
217
212
|
expect do
|
|
218
|
-
@session.select(
|
|
213
|
+
@session.select('Fin', from: 'Locale', exact: true)
|
|
219
214
|
end.to raise_error(Capybara::ElementNotFound)
|
|
220
215
|
end
|
|
221
216
|
|
|
222
|
-
it
|
|
217
|
+
it 'can match option approximately when :from not given' do
|
|
223
218
|
expect do
|
|
224
|
-
@session.select(
|
|
219
|
+
@session.select('made-up language', exact: true)
|
|
225
220
|
end.to raise_error(Capybara::ElementNotFound)
|
|
226
221
|
end
|
|
227
222
|
end
|
|
228
223
|
end
|
|
224
|
+
|
|
225
|
+
it 'should error when not passed a locator for :from option' do
|
|
226
|
+
select = @session.find(:select, 'Title')
|
|
227
|
+
expect { @session.select('Mr', from: select) }.to raise_error(ArgumentError, /does not take an element/)
|
|
228
|
+
end
|
|
229
229
|
end
|
|
@@ -5,31 +5,44 @@ Capybara::SpecHelper.spec Capybara::Selector do
|
|
|
5
5
|
@session.visit('/form')
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
describe
|
|
9
|
-
it
|
|
8
|
+
describe ':label selector' do
|
|
9
|
+
it 'finds a label by text' do
|
|
10
10
|
expect(@session.find(:label, 'Customer Name').text).to eq 'Customer Name'
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
it
|
|
13
|
+
it 'finds a label by for attribute string' do
|
|
14
14
|
expect(@session.find(:label, for: 'form_other_title')['for']).to eq 'form_other_title'
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
it
|
|
17
|
+
it 'finds a label for for attribute regex' do
|
|
18
|
+
expect(@session.find(:label, for: /_other_title/)['for']).to eq 'form_other_title'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'finds a label from nested input using :for filter with id string' do
|
|
18
22
|
expect(@session.find(:label, for: 'nested_label').text).to eq 'Nested Label'
|
|
19
23
|
end
|
|
20
24
|
|
|
21
|
-
it
|
|
25
|
+
it 'finds a label from nested input using :for filter with id regexp' do
|
|
26
|
+
expect(@session.find(:label, for: /nested_lab/).text).to eq 'Nested Label'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'finds a label from nested input using :for filter with element' do
|
|
22
30
|
input = @session.find(:id, 'nested_label')
|
|
23
31
|
expect(@session.find(:label, for: input).text).to eq 'Nested Label'
|
|
24
32
|
end
|
|
25
33
|
|
|
26
|
-
it
|
|
34
|
+
it 'finds a label from nested input using :for filter with element when no id on label' do
|
|
35
|
+
input = @session.find(:css, '#wrapper_label').find(:css, 'input')
|
|
36
|
+
expect(@session.find(:label, for: input).text).to eq 'Wrapper Label'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'finds the label for an non-nested element when using :for filter' do
|
|
27
40
|
select = @session.find(:id, 'form_other_title')
|
|
28
41
|
expect(@session.find(:label, for: select)['for']).to eq 'form_other_title'
|
|
29
42
|
end
|
|
30
43
|
|
|
31
|
-
context
|
|
32
|
-
it
|
|
44
|
+
context 'with exact option' do
|
|
45
|
+
it 'matches substrings' do
|
|
33
46
|
expect(@session.find(:label, 'Customer Na', exact: false).text).to eq 'Customer Name'
|
|
34
47
|
end
|
|
35
48
|
|
|
@@ -39,29 +52,47 @@ Capybara::SpecHelper.spec Capybara::Selector do
|
|
|
39
52
|
end
|
|
40
53
|
end
|
|
41
54
|
|
|
42
|
-
describe
|
|
43
|
-
|
|
44
|
-
|
|
55
|
+
describe 'field selectors' do
|
|
56
|
+
context 'with :id option' do
|
|
57
|
+
it 'can find specifically by id' do
|
|
58
|
+
expect(@session.find(:field, id: 'customer_email').value).to eq 'ben@ben.com'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'can find by regex' do
|
|
62
|
+
expect(@session.find(:field, id: /ustomer.emai/).value).to eq 'ben@ben.com'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'can find by case-insensitive id' do
|
|
66
|
+
expect(@session.find(:field, id: /StOmer.emAI/i).value).to eq 'ben@ben.com'
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'can find specifically by name string' do
|
|
71
|
+
expect(@session.find(:field, name: 'form[other_title]')['id']).to eq 'form_other_title'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'can find specifically by name regex' do
|
|
75
|
+
expect(@session.find(:field, name: /form\[other_.*\]/)['id']).to eq 'form_other_title'
|
|
45
76
|
end
|
|
46
77
|
|
|
47
|
-
it
|
|
48
|
-
expect(@session.find(:field,
|
|
78
|
+
it 'can find specifically by placeholder string' do
|
|
79
|
+
expect(@session.find(:field, placeholder: 'FirstName')['id']).to eq 'form_first_name'
|
|
49
80
|
end
|
|
50
81
|
|
|
51
|
-
it
|
|
52
|
-
expect(@session.find(:field, placeholder:
|
|
82
|
+
it 'can find specifically by placeholder regex' do
|
|
83
|
+
expect(@session.find(:field, placeholder: /FirstN.*/)['id']).to eq 'form_first_name'
|
|
53
84
|
end
|
|
54
85
|
|
|
55
|
-
it
|
|
86
|
+
it 'can find by type' do
|
|
56
87
|
expect(@session.find(:field, 'Confusion', type: 'checkbox')['id']).to eq 'confusion_checkbox'
|
|
57
88
|
expect(@session.find(:field, 'Confusion', type: 'text')['id']).to eq 'confusion_text'
|
|
58
89
|
expect(@session.find(:field, 'Confusion', type: 'textarea')['id']).to eq 'confusion_textarea'
|
|
59
90
|
end
|
|
60
91
|
|
|
61
|
-
it
|
|
92
|
+
it 'can find by class' do
|
|
62
93
|
expect(@session.find(:field, class: 'confusion-checkbox')['id']).to eq 'confusion_checkbox'
|
|
63
94
|
expect(@session).to have_selector(:field, class: 'confusion', count: 3)
|
|
64
|
-
expect(@session.find(:field, class: [
|
|
95
|
+
expect(@session.find(:field, class: %w[confusion confusion-textarea])['id']).to eq 'confusion_textarea'
|
|
65
96
|
end
|
|
66
97
|
end
|
|
67
98
|
end
|
|
@@ -9,31 +9,31 @@ Capybara::SpecHelper.spec '#sibling' do
|
|
|
9
9
|
Capybara::Selector.remove(:monkey)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
it
|
|
12
|
+
it 'should find a prior sibling element using the given locator' do
|
|
13
13
|
el = @session.find(:css, '#mid_sibling')
|
|
14
14
|
expect(el.sibling('//div[@data-pre]')[:id]).to eq('pre_sibling')
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
it
|
|
17
|
+
it 'should find a following sibling element using the given locator' do
|
|
18
18
|
el = @session.find(:css, '#mid_sibling')
|
|
19
19
|
expect(el.sibling('//div[@data-post]')[:id]).to eq('post_sibling')
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
it
|
|
22
|
+
it 'should raise an error if there are multiple matches' do
|
|
23
23
|
el = @session.find(:css, '#mid_sibling')
|
|
24
24
|
expect { el.sibling('//div') }.to raise_error(Capybara::Ambiguous)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
context
|
|
28
|
-
it
|
|
27
|
+
context 'with css selectors' do
|
|
28
|
+
it 'should find the first element using the given locator' do
|
|
29
29
|
el = @session.find(:css, '#mid_sibling')
|
|
30
30
|
expect(el.sibling(:css, '#pre_sibling')).to have_text('Pre Sibling')
|
|
31
31
|
expect(el.sibling(:css, '#post_sibling')).to have_text('Post Sibling')
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
context
|
|
36
|
-
it
|
|
35
|
+
context 'with custom selector' do
|
|
36
|
+
it 'should use the custom selector' do
|
|
37
37
|
Capybara.add_selector(:data_attribute) do
|
|
38
38
|
xpath { |attr| ".//*[@data-#{attr}]" }
|
|
39
39
|
end
|
|
@@ -43,10 +43,10 @@ Capybara::SpecHelper.spec '#sibling' do
|
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
it
|
|
46
|
+
it 'should raise ElementNotFound with a useful default message if nothing was found' do
|
|
47
47
|
el = @session.find(:css, '#child')
|
|
48
48
|
expect do
|
|
49
49
|
el.sibling(:xpath, '//div[@id="nosuchthing"]')
|
|
50
|
-
end.to raise_error(Capybara::ElementNotFound,
|
|
50
|
+
end.to raise_error(Capybara::ElementNotFound, 'Unable to find xpath "//div[@id=\\"nosuchthing\\"]" that is a sibling of visible css "#child"')
|
|
51
51
|
end
|
|
52
52
|
end
|
|
@@ -1,73 +1,74 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
Capybara::SpecHelper.spec '#text' do
|
|
4
|
-
it
|
|
4
|
+
it 'should print the text of the page' do
|
|
5
5
|
@session.visit('/with_simple_html')
|
|
6
6
|
expect(@session.text).to eq('Bar')
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
it
|
|
9
|
+
it 'ignores invisible text by default' do
|
|
10
10
|
@session.visit('/with_html')
|
|
11
|
-
expect(@session.find(:id,
|
|
11
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
it
|
|
14
|
+
it 'shows invisible text if `:all` given' do
|
|
15
15
|
@session.visit('/with_html')
|
|
16
|
-
expect(@session.find(:id,
|
|
16
|
+
expect(@session.find(:id, 'hidden-text').text(:all)).to eq('Some of this text is hidden!')
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
it
|
|
19
|
+
it 'ignores invisible text if `:visible` given' do
|
|
20
20
|
Capybara.ignore_hidden_elements = false
|
|
21
21
|
@session.visit('/with_html')
|
|
22
|
-
expect(@session.find(:id,
|
|
22
|
+
expect(@session.find(:id, 'hidden-text').text(:visible)).to eq('Some of this text is')
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
it
|
|
25
|
+
it 'ignores invisible text if `Capybara.ignore_hidden_elements = true`' do
|
|
26
26
|
@session.visit('/with_html')
|
|
27
|
-
expect(@session.find(:id,
|
|
27
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
28
28
|
Capybara.ignore_hidden_elements = false
|
|
29
|
-
expect(@session.find(:id,
|
|
29
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is hidden!')
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
it
|
|
32
|
+
it 'ignores invisible text if `Capybara.visible_text_only = true`' do
|
|
33
33
|
@session.visit('/with_html')
|
|
34
34
|
Capybara.visible_text_only = true
|
|
35
|
-
expect(@session.find(:id,
|
|
35
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
36
36
|
Capybara.ignore_hidden_elements = false
|
|
37
|
-
expect(@session.find(:id,
|
|
37
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
it
|
|
40
|
+
it 'ignores invisible text if ancestor is invisible' do
|
|
41
41
|
@session.visit('/with_html')
|
|
42
|
-
expect(@session.find(:id,
|
|
42
|
+
expect(@session.find(:id, 'hidden_via_ancestor', visible: false).text).to eq('')
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
context
|
|
45
|
+
context 'with css as default selector' do
|
|
46
46
|
before { Capybara.default_selector = :css }
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
after { Capybara.default_selector = :xpath }
|
|
49
|
+
|
|
50
|
+
it 'should print the text of the page' do
|
|
49
51
|
@session.visit('/with_simple_html')
|
|
50
52
|
expect(@session.text).to eq('Bar')
|
|
51
53
|
end
|
|
52
|
-
after { Capybara.default_selector = :xpath }
|
|
53
54
|
end
|
|
54
55
|
|
|
55
|
-
it
|
|
56
|
+
it 'should be correctly normalized when visible' do
|
|
56
57
|
@session.visit('/with_html')
|
|
57
58
|
el = @session.find(:css, '#normalized')
|
|
58
59
|
expect(el.text).to eq "Some text\nMore text\nAnd more text\nEven more text on multiple lines"
|
|
59
60
|
end
|
|
60
61
|
|
|
61
|
-
it
|
|
62
|
+
it 'should be a textContent with irrelevant whitespace collapsed when non-visible' do
|
|
62
63
|
@session.visit('/with_html')
|
|
63
64
|
el = @session.find(:css, '#non_visible_normalized', visible: false)
|
|
64
|
-
expect(el.text(:all)).to eq
|
|
65
|
+
expect(el.text(:all)).to eq 'Some textMore text And more text Even more text on multiple lines'
|
|
65
66
|
end
|
|
66
67
|
|
|
67
|
-
it
|
|
68
|
+
it 'should strip correctly' do
|
|
68
69
|
@session.visit('/with_html')
|
|
69
70
|
el = @session.find(:css, '#ws')
|
|
70
|
-
expect(el.text).to eq
|
|
71
|
-
expect(el.text(:all)).to eq
|
|
71
|
+
expect(el.text).to eq ' '
|
|
72
|
+
expect(el.text(:all)).to eq ' '
|
|
72
73
|
end
|
|
73
74
|
end
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
Capybara::SpecHelper.spec '#title' do
|
|
4
|
-
it
|
|
4
|
+
it 'should get the title of the page' do
|
|
5
5
|
@session.visit('/with_title')
|
|
6
6
|
expect(@session.title).to eq('Test Title')
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
context
|
|
9
|
+
context 'with css as default selector' do
|
|
10
10
|
before { Capybara.default_selector = :css }
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
after { Capybara.default_selector = :xpath }
|
|
13
|
+
|
|
14
|
+
it 'should get the title of the page' do
|
|
13
15
|
@session.visit('/with_title')
|
|
14
16
|
expect(@session.title).to eq('Test Title')
|
|
15
17
|
end
|
|
16
|
-
after { Capybara.default_selector = :xpath }
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
context
|
|
20
|
-
it
|
|
20
|
+
context 'within iframe', requires: [:frames] do
|
|
21
|
+
it 'should get the title of the top level browsing context' do
|
|
21
22
|
@session.visit('/within_frames')
|
|
22
23
|
expect(@session.title).to eq('With Frames')
|
|
23
24
|
@session.within_frame('frameOne') do
|