capybara 2.7.0 → 3.35.3
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 +5 -5
- data/.yardopts +1 -0
- data/History.md +1147 -11
- data/License.txt +1 -1
- data/README.md +252 -131
- data/lib/capybara/config.rb +92 -0
- data/lib/capybara/cucumber.rb +3 -3
- data/lib/capybara/driver/base.rb +52 -21
- data/lib/capybara/driver/node.rb +48 -14
- data/lib/capybara/dsl.rb +16 -9
- data/lib/capybara/helpers.rb +72 -81
- data/lib/capybara/minitest/spec.rb +267 -0
- data/lib/capybara/minitest.rb +385 -0
- data/lib/capybara/node/actions.rb +337 -89
- data/lib/capybara/node/base.rb +50 -32
- data/lib/capybara/node/document.rb +19 -3
- data/lib/capybara/node/document_matchers.rb +22 -24
- data/lib/capybara/node/element.rb +388 -125
- data/lib/capybara/node/finders.rb +231 -121
- data/lib/capybara/node/matchers.rb +503 -217
- data/lib/capybara/node/simple.rb +64 -27
- data/lib/capybara/queries/ancestor_query.rb +27 -0
- data/lib/capybara/queries/base_query.rb +87 -11
- data/lib/capybara/queries/current_path_query.rb +24 -24
- data/lib/capybara/queries/match_query.rb +15 -10
- data/lib/capybara/queries/selector_query.rb +675 -81
- 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 +88 -20
- data/lib/capybara/queries/title_query.rb +9 -11
- data/lib/capybara/rack_test/browser.rb +63 -39
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +26 -16
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +73 -58
- data/lib/capybara/rack_test/node.rb +187 -67
- data/lib/capybara/rails.rb +4 -8
- data/lib/capybara/registration_container.rb +44 -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 +45 -0
- data/lib/capybara/result.rb +142 -14
- data/lib/capybara/rspec/features.rb +17 -42
- data/lib/capybara/rspec/matcher_proxies.rb +82 -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 +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +143 -244
- data/lib/capybara/rspec.rb +10 -12
- 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 +102 -0
- data/lib/capybara/selector/definition/button.rb +63 -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 +54 -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 +278 -0
- data/lib/capybara/selector/filter.rb +3 -46
- 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 +155 -0
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +232 -369
- 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 +380 -142
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -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 +76 -0
- data/lib/capybara/selenium/logger_suppressor.rb +40 -0
- data/lib/capybara/selenium/node.rb +528 -97
- data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +104 -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/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 +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 +63 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +74 -71
- data/lib/capybara/session/config.rb +126 -0
- data/lib/capybara/session/matchers.rb +44 -27
- data/lib/capybara/session.rb +500 -297
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- 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 +168 -14
- data/lib/capybara/spec/session/accept_alert_spec.rb +37 -14
- data/lib/capybara/spec/session/accept_confirm_spec.rb +7 -6
- data/lib/capybara/spec/session/accept_prompt_spec.rb +38 -10
- data/lib/capybara/spec/session/all_spec.rb +179 -59
- 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 +154 -48
- data/lib/capybara/spec/session/body_spec.rb +12 -13
- data/lib/capybara/spec/session/check_spec.rb +168 -41
- data/lib/capybara/spec/session/choose_spec.rb +75 -23
- data/lib/capybara/spec/session/click_button_spec.rb +243 -175
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +57 -32
- data/lib/capybara/spec/session/click_link_spec.rb +100 -53
- data/lib/capybara/spec/session/current_scope_spec.rb +11 -10
- data/lib/capybara/spec/session/current_url_spec.rb +61 -35
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +7 -7
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +5 -4
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +13 -6
- data/lib/capybara/spec/session/element/match_css_spec.rb +21 -7
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +9 -7
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +91 -34
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +45 -3
- data/lib/capybara/spec/session/execute_script_spec.rb +24 -4
- data/lib/capybara/spec/session/fill_in_spec.rb +166 -64
- data/lib/capybara/spec/session/find_button_spec.rb +37 -18
- data/lib/capybara/spec/session/find_by_id_spec.rb +10 -9
- data/lib/capybara/spec/session/find_field_spec.rb +57 -34
- data/lib/capybara/spec/session/find_link_spec.rb +47 -10
- data/lib/capybara/spec/session/find_spec.rb +290 -144
- data/lib/capybara/spec/session/first_spec.rb +91 -48
- 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 +3 -2
- data/lib/capybara/spec/session/go_forward_spec.rb +3 -2
- 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 +76 -19
- data/lib/capybara/spec/session/has_css_spec.rb +277 -131
- data/lib/capybara/spec/session/has_current_path_spec.rb +98 -26
- data/lib/capybara/spec/session/has_field_spec.rb +177 -107
- data/lib/capybara/spec/session/has_link_spec.rb +13 -12
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
- data/lib/capybara/spec/session/has_select_spec.rb +191 -95
- data/lib/capybara/spec/session/has_selector_spec.rb +128 -64
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +172 -5
- data/lib/capybara/spec/session/has_text_spec.rb +126 -60
- data/lib/capybara/spec/session/has_title_spec.rb +35 -12
- data/lib/capybara/spec/session/has_xpath_spec.rb +74 -53
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +3 -2
- data/lib/capybara/spec/session/html_spec.rb +14 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
- data/lib/capybara/spec/session/node_spec.rb +1028 -131
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +34 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +75 -34
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +2 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +3 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +11 -15
- data/lib/capybara/spec/session/save_page_spec.rb +42 -55
- data/lib/capybara/spec/session/save_screenshot_spec.rb +16 -14
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +117 -0
- data/lib/capybara/spec/session/select_spec.rb +112 -85
- data/lib/capybara/spec/session/selectors_spec.rb +71 -8
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/text_spec.rb +38 -23
- data/lib/capybara/spec/session/title_spec.rb +17 -5
- data/lib/capybara/spec/session/uncheck_spec.rb +71 -12
- data/lib/capybara/spec/session/unselect_spec.rb +44 -43
- data/lib/capybara/spec/session/visit_spec.rb +99 -32
- data/lib/capybara/spec/session/window/become_closed_spec.rb +33 -29
- data/lib/capybara/spec/session/window/current_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +5 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +39 -30
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +17 -10
- data/lib/capybara/spec/session/window/window_spec.rb +121 -73
- data/lib/capybara/spec/session/window/windows_spec.rb +12 -10
- data/lib/capybara/spec/session/window/within_window_spec.rb +52 -82
- data/lib/capybara/spec/session/within_spec.rb +76 -43
- data/lib/capybara/spec/spec_helper.rb +67 -33
- data/lib/capybara/spec/test_app.rb +85 -36
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/buttons.erb +1 -1
- data/lib/capybara/spec/views/fieldsets.erb +1 -1
- data/lib/capybara/spec/views/form.erb +227 -20
- data/lib/capybara/spec/views/frame_child.erb +10 -2
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +2 -2
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/header_links.erb +1 -1
- data/lib/capybara/spec/views/host_links.erb +1 -1
- 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 +1 -1
- 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/postback.erb +1 -1
- 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 +69 -2
- data/lib/capybara/spec/views/with_animation.erb +82 -0
- data/lib/capybara/spec/views/with_base_tag.erb +1 -1
- data/lib/capybara/spec/views/with_count.erb +1 -1
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +7 -1
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +100 -10
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_html_entities.erb +1 -1
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +49 -3
- 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 +1 -1
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_simple_html.erb +1 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_title.erb +1 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
- data/lib/capybara/spec/views/with_windows.erb +7 -1
- data/lib/capybara/spec/views/within_frames.erb +6 -3
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +39 -21
- data/lib/capybara.rb +208 -186
- data/spec/basic_node_spec.rb +52 -39
- data/spec/capybara_spec.rb +72 -50
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +81 -61
- 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 +7 -3
- data/spec/fixtures/selenium_driver_rspec_success.rb +7 -3
- data/spec/minitest_spec.rb +164 -0
- data/spec/minitest_spec_spec.rb +162 -0
- data/spec/per_session_config_spec.rb +68 -0
- data/spec/rack_test_spec.rb +189 -96
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +143 -13
- data/spec/rspec/features_spec.rb +38 -32
- data/spec/rspec/scenarios_spec.rb +9 -7
- data/spec/rspec/shared_spec_matchers.rb +959 -0
- data/spec/rspec/views_spec.rb +9 -3
- data/spec/rspec_matchers_spec.rb +62 -0
- data/spec/rspec_spec.rb +127 -30
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +458 -37
- data/spec/selenium_spec_chrome.rb +196 -9
- data/spec/selenium_spec_chrome_remote.rb +100 -0
- data/spec/selenium_spec_edge.rb +47 -0
- data/spec/selenium_spec_firefox.rb +210 -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 +200 -101
- data/spec/session_spec.rb +91 -0
- data/spec/shared_selenium_node.rb +83 -0
- data/spec/shared_selenium_session.rb +558 -0
- data/spec/spec_helper.rb +94 -2
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +420 -60
- data/lib/capybara/query.rb +0 -7
- data/lib/capybara/spec/session/assert_current_path.rb +0 -60
- data/lib/capybara/spec/session/assert_selector.rb +0 -148
- data/lib/capybara/spec/session/assert_text.rb +0 -196
- data/lib/capybara/spec/session/assert_title.rb +0 -70
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/session/within_frame_spec.rb +0 -53
- data/spec/rspec/matchers_spec.rb +0 -827
- data/spec/selenium_spec.rb +0 -151
|
@@ -1,29 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
Capybara::SpecHelper.spec Capybara::Selector do
|
|
2
4
|
before do
|
|
3
5
|
@session.visit('/form')
|
|
4
6
|
end
|
|
5
7
|
|
|
6
|
-
describe
|
|
7
|
-
it
|
|
8
|
+
describe ':label selector' do
|
|
9
|
+
it 'finds a label by text' do
|
|
8
10
|
expect(@session.find(:label, 'Customer Name').text).to eq 'Customer Name'
|
|
9
11
|
end
|
|
10
12
|
|
|
11
|
-
it
|
|
13
|
+
it 'finds a label by for attribute string' do
|
|
12
14
|
expect(@session.find(:label, for: 'form_other_title')['for']).to eq 'form_other_title'
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
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
|
|
22
|
+
expect(@session.find(:label, for: 'nested_label').text).to eq 'Nested Label'
|
|
23
|
+
end
|
|
24
|
+
|
|
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
|
|
16
30
|
input = @session.find(:id, 'nested_label')
|
|
17
31
|
expect(@session.find(:label, for: input).text).to eq 'Nested Label'
|
|
18
32
|
end
|
|
19
33
|
|
|
20
|
-
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
|
|
21
40
|
select = @session.find(:id, 'form_other_title')
|
|
22
41
|
expect(@session.find(:label, for: select)['for']).to eq 'form_other_title'
|
|
23
42
|
end
|
|
24
43
|
|
|
25
|
-
context
|
|
26
|
-
it
|
|
44
|
+
context 'with exact option' do
|
|
45
|
+
it 'matches substrings' do
|
|
27
46
|
expect(@session.find(:label, 'Customer Na', exact: false).text).to eq 'Customer Name'
|
|
28
47
|
end
|
|
29
48
|
|
|
@@ -32,4 +51,48 @@ Capybara::SpecHelper.spec Capybara::Selector do
|
|
|
32
51
|
end
|
|
33
52
|
end
|
|
34
53
|
end
|
|
35
|
-
|
|
54
|
+
|
|
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'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'can find specifically by placeholder string' do
|
|
79
|
+
expect(@session.find(:field, placeholder: 'FirstName')['id']).to eq 'form_first_name'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'can find specifically by placeholder regex' do
|
|
83
|
+
expect(@session.find(:field, placeholder: /FirstN.*/)['id']).to eq 'form_first_name'
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'can find by type' do
|
|
87
|
+
expect(@session.find(:field, 'Confusion', type: 'checkbox')['id']).to eq 'confusion_checkbox'
|
|
88
|
+
expect(@session.find(:field, 'Confusion', type: 'text')['id']).to eq 'confusion_text'
|
|
89
|
+
expect(@session.find(:field, 'Confusion', type: 'textarea')['id']).to eq 'confusion_textarea'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'can find by class' do
|
|
93
|
+
expect(@session.find(:field, class: 'confusion-checkbox')['id']).to eq 'confusion_checkbox'
|
|
94
|
+
expect(@session).to have_selector(:field, class: 'confusion', count: 3)
|
|
95
|
+
expect(@session.find(:field, class: %w[confusion confusion-textarea])['id']).to eq 'confusion_textarea'
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -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
|
|
@@ -1,59 +1,74 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#text' do
|
|
3
|
-
it
|
|
4
|
+
it 'should print the text of the page' do
|
|
4
5
|
@session.visit('/with_simple_html')
|
|
5
6
|
expect(@session.text).to eq('Bar')
|
|
6
7
|
end
|
|
7
8
|
|
|
8
|
-
it
|
|
9
|
+
it 'ignores invisible text by default' do
|
|
9
10
|
@session.visit('/with_html')
|
|
10
|
-
expect(@session.find(:id,
|
|
11
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
it
|
|
14
|
+
it 'shows invisible text if `:all` given' do
|
|
14
15
|
@session.visit('/with_html')
|
|
15
|
-
expect(@session.find(:id,
|
|
16
|
+
expect(@session.find(:id, 'hidden-text').text(:all)).to eq('Some of this text is hidden!')
|
|
16
17
|
end
|
|
17
18
|
|
|
18
|
-
it
|
|
19
|
+
it 'ignores invisible text if `:visible` given' do
|
|
19
20
|
Capybara.ignore_hidden_elements = false
|
|
20
21
|
@session.visit('/with_html')
|
|
21
|
-
expect(@session.find(:id,
|
|
22
|
+
expect(@session.find(:id, 'hidden-text').text(:visible)).to eq('Some of this text is')
|
|
22
23
|
end
|
|
23
24
|
|
|
24
|
-
it
|
|
25
|
+
it 'ignores invisible text if `Capybara.ignore_hidden_elements = true`' do
|
|
25
26
|
@session.visit('/with_html')
|
|
26
|
-
expect(@session.find(:id,
|
|
27
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
27
28
|
Capybara.ignore_hidden_elements = false
|
|
28
|
-
expect(@session.find(:id,
|
|
29
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is hidden!')
|
|
29
30
|
end
|
|
30
31
|
|
|
31
|
-
it
|
|
32
|
+
it 'ignores invisible text if `Capybara.visible_text_only = true`' do
|
|
32
33
|
@session.visit('/with_html')
|
|
33
34
|
Capybara.visible_text_only = true
|
|
34
|
-
expect(@session.find(:id,
|
|
35
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
35
36
|
Capybara.ignore_hidden_elements = false
|
|
36
|
-
expect(@session.find(:id,
|
|
37
|
+
expect(@session.find(:id, 'hidden-text').text).to eq('Some of this text is')
|
|
37
38
|
end
|
|
38
|
-
|
|
39
|
-
it
|
|
39
|
+
|
|
40
|
+
it 'ignores invisible text if ancestor is invisible' do
|
|
40
41
|
@session.visit('/with_html')
|
|
41
|
-
expect(@session.find(:id,
|
|
42
|
+
expect(@session.find(:id, 'hidden_via_ancestor', visible: false).text).to eq('')
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
context
|
|
45
|
+
context 'with css as default selector' do
|
|
45
46
|
before { Capybara.default_selector = :css }
|
|
46
|
-
|
|
47
|
+
|
|
48
|
+
after { Capybara.default_selector = :xpath }
|
|
49
|
+
|
|
50
|
+
it 'should print the text of the page' do
|
|
47
51
|
@session.visit('/with_simple_html')
|
|
48
52
|
expect(@session.text).to eq('Bar')
|
|
49
53
|
end
|
|
50
|
-
after { Capybara.default_selector = :xpath }
|
|
51
54
|
end
|
|
52
55
|
|
|
53
|
-
it
|
|
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
|
|
54
69
|
@session.visit('/with_html')
|
|
55
|
-
|
|
56
|
-
expect(
|
|
57
|
-
|
|
70
|
+
el = @session.find(:css, '#ws')
|
|
71
|
+
expect(el.text).to eq ' '
|
|
72
|
+
expect(el.text(:all)).to eq ' '
|
|
58
73
|
end
|
|
59
74
|
end
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
Capybara::SpecHelper.spec '#title' do
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
Capybara::SpecHelper.spec '#title' do
|
|
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
|
+
after { Capybara.default_selector = :xpath }
|
|
13
|
+
|
|
14
|
+
it 'should get the title of the page' do
|
|
12
15
|
@session.visit('/with_title')
|
|
13
16
|
expect(@session.title).to eq('Test Title')
|
|
14
17
|
end
|
|
15
|
-
|
|
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
|
|
16
28
|
end
|
|
17
29
|
end
|
|
@@ -1,41 +1,100 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#uncheck' do
|
|
3
4
|
before do
|
|
4
5
|
@session.visit('/form')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
it
|
|
8
|
-
@session.uncheck(
|
|
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')
|
|
9
24
|
@session.click_button('awesome')
|
|
10
25
|
expect(extract_results(@session)['pets']).to include('dog')
|
|
11
26
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
12
27
|
end
|
|
13
28
|
|
|
14
|
-
it
|
|
15
|
-
@session.
|
|
29
|
+
it 'should be able to uncheck itself if no locator specified' do
|
|
30
|
+
cb = @session.find(:id, 'form_pets_hamster')
|
|
31
|
+
cb.uncheck
|
|
16
32
|
@session.click_button('awesome')
|
|
17
33
|
expect(extract_results(@session)['pets']).to include('dog')
|
|
18
34
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
19
35
|
end
|
|
20
36
|
|
|
21
|
-
it
|
|
22
|
-
@session.uncheck(:
|
|
37
|
+
it 'casts to string' do
|
|
38
|
+
@session.uncheck(:form_pets_hamster)
|
|
23
39
|
@session.click_button('awesome')
|
|
24
40
|
expect(extract_results(@session)['pets']).to include('dog')
|
|
25
41
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
26
42
|
end
|
|
27
43
|
|
|
28
|
-
context
|
|
29
|
-
it
|
|
30
|
-
@session.uncheck('Ham', :
|
|
44
|
+
context 'with :exact option' do
|
|
45
|
+
it 'should accept partial matches when false' do
|
|
46
|
+
@session.uncheck('Ham', exact: false)
|
|
31
47
|
@session.click_button('awesome')
|
|
32
48
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
|
33
49
|
end
|
|
34
50
|
|
|
35
|
-
it
|
|
51
|
+
it 'should not accept partial matches when true' do
|
|
36
52
|
expect do
|
|
37
|
-
@session.uncheck('Ham', :
|
|
53
|
+
@session.uncheck('Ham', exact: true)
|
|
38
54
|
end.to raise_error(Capybara::ElementNotFound)
|
|
39
55
|
end
|
|
40
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
|
|
41
100
|
end
|
|
@@ -1,113 +1,114 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#unselect' do
|
|
3
4
|
before do
|
|
4
5
|
@session.visit('/form')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
context
|
|
8
|
-
it
|
|
9
|
-
@session.unselect('Commando', :
|
|
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')
|
|
10
11
|
@session.click_button('awesome')
|
|
11
12
|
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
|
12
13
|
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
|
13
14
|
end
|
|
14
15
|
|
|
15
|
-
it
|
|
16
|
+
it 'should unselect an option without a select box' do
|
|
16
17
|
@session.unselect('Commando')
|
|
17
18
|
@session.click_button('awesome')
|
|
18
19
|
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
|
19
20
|
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
|
20
21
|
end
|
|
21
22
|
|
|
22
|
-
it
|
|
23
|
-
@session.unselect('Commando', :
|
|
23
|
+
it 'should unselect an option from a select box by label' do
|
|
24
|
+
@session.unselect('Commando', from: 'Underwear')
|
|
24
25
|
@session.click_button('awesome')
|
|
25
26
|
expect(extract_results(@session)['underwear']).to include('Briefs', 'Boxerbriefs')
|
|
26
27
|
expect(extract_results(@session)['underwear']).not_to include('Commando')
|
|
27
28
|
end
|
|
28
29
|
|
|
29
|
-
it
|
|
30
|
-
@session.unselect(
|
|
30
|
+
it 'should favour exact matches to option labels' do
|
|
31
|
+
@session.unselect('Briefs', from: 'Underwear')
|
|
31
32
|
@session.click_button('awesome')
|
|
32
33
|
expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
|
|
33
34
|
expect(extract_results(@session)['underwear']).not_to include('Briefs')
|
|
34
35
|
end
|
|
35
36
|
|
|
36
|
-
it
|
|
37
|
-
@session.unselect("Frenchman's Pantalons", :
|
|
37
|
+
it 'should escape quotes' do
|
|
38
|
+
@session.unselect("Frenchman's Pantalons", from: 'Underwear')
|
|
38
39
|
@session.click_button('awesome')
|
|
39
40
|
expect(extract_results(@session)['underwear']).not_to include("Frenchman's Pantalons")
|
|
40
41
|
end
|
|
41
42
|
|
|
42
|
-
it
|
|
43
|
-
@session.unselect(:
|
|
43
|
+
it 'casts to string' do
|
|
44
|
+
@session.unselect(:Briefs, from: :Underwear)
|
|
44
45
|
@session.click_button('awesome')
|
|
45
46
|
expect(extract_results(@session)['underwear']).to include('Commando', 'Boxerbriefs')
|
|
46
47
|
expect(extract_results(@session)['underwear']).not_to include('Briefs')
|
|
47
48
|
end
|
|
48
49
|
end
|
|
49
50
|
|
|
50
|
-
context
|
|
51
|
-
it
|
|
52
|
-
expect { @session.unselect(
|
|
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)
|
|
53
54
|
end
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
context "with a locator that doesn't exist" do
|
|
57
|
-
it
|
|
58
|
-
msg =
|
|
58
|
+
it 'should raise an error' do
|
|
59
|
+
msg = /Unable to find select box "does not exist"/
|
|
59
60
|
expect do
|
|
60
|
-
@session.unselect('foo', :
|
|
61
|
+
@session.unselect('foo', from: 'does not exist')
|
|
61
62
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
62
63
|
end
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
context "with an option that doesn't exist" do
|
|
66
|
-
it
|
|
67
|
-
msg =
|
|
67
|
+
it 'should raise an error' do
|
|
68
|
+
msg = /^Unable to find option "Does not Exist" within/
|
|
68
69
|
expect do
|
|
69
|
-
@session.unselect('Does not Exist', :
|
|
70
|
+
@session.unselect('Does not Exist', from: 'form_underwear')
|
|
70
71
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
71
72
|
end
|
|
72
73
|
end
|
|
73
74
|
|
|
74
|
-
context
|
|
75
|
-
context
|
|
76
|
-
it
|
|
77
|
-
@session.unselect(
|
|
78
|
-
@session.click_button(
|
|
79
|
-
expect(extract_results(@session)[
|
|
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')
|
|
80
81
|
end
|
|
81
82
|
|
|
82
|
-
it
|
|
83
|
-
@session.unselect(
|
|
84
|
-
@session.click_button(
|
|
85
|
-
expect(extract_results(@session)[
|
|
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')
|
|
86
87
|
end
|
|
87
88
|
|
|
88
|
-
it
|
|
89
|
-
@session.unselect(
|
|
90
|
-
@session.click_button(
|
|
91
|
-
expect(extract_results(@session)[
|
|
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')
|
|
92
93
|
end
|
|
93
94
|
end
|
|
94
95
|
|
|
95
|
-
context
|
|
96
|
-
it
|
|
96
|
+
context 'when `true`' do
|
|
97
|
+
it 'can match select box approximately' do
|
|
97
98
|
expect do
|
|
98
|
-
@session.unselect(
|
|
99
|
+
@session.unselect('Boxerbriefs', from: 'Under', exact: true)
|
|
99
100
|
end.to raise_error(Capybara::ElementNotFound)
|
|
100
101
|
end
|
|
101
102
|
|
|
102
|
-
it
|
|
103
|
+
it 'can match option approximately' do
|
|
103
104
|
expect do
|
|
104
|
-
@session.unselect(
|
|
105
|
+
@session.unselect('Boxerbr', from: 'Underwear', exact: true)
|
|
105
106
|
end.to raise_error(Capybara::ElementNotFound)
|
|
106
107
|
end
|
|
107
108
|
|
|
108
|
-
it
|
|
109
|
+
it 'can match option approximately when :from not given' do
|
|
109
110
|
expect do
|
|
110
|
-
@session.unselect(
|
|
111
|
+
@session.unselect('Boxerbr', exact: true)
|
|
111
112
|
end.to raise_error(Capybara::ElementNotFound)
|
|
112
113
|
end
|
|
113
114
|
end
|