capybara 3.0.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/History.md +891 -12
- data/License.txt +1 -1
- data/README.md +257 -84
- data/lib/capybara/config.rb +29 -10
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +22 -4
- data/lib/capybara/driver/node.rb +38 -9
- data/lib/capybara/dsl.rb +9 -7
- data/lib/capybara/helpers.rb +57 -8
- data/lib/capybara/minitest/spec.rb +185 -84
- data/lib/capybara/minitest.rb +264 -145
- data/lib/capybara/node/actions.rb +248 -124
- data/lib/capybara/node/base.rb +35 -20
- data/lib/capybara/node/document.rb +14 -2
- data/lib/capybara/node/document_matchers.rb +13 -15
- data/lib/capybara/node/element.rb +350 -113
- data/lib/capybara/node/finders.rb +104 -82
- data/lib/capybara/node/matchers.rb +363 -157
- data/lib/capybara/node/simple.rb +54 -15
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +9 -10
- data/lib/capybara/queries/base_query.rb +25 -18
- data/lib/capybara/queries/current_path_query.rb +16 -6
- data/lib/capybara/queries/match_query.rb +11 -0
- data/lib/capybara/queries/selector_query.rb +617 -104
- data/lib/capybara/queries/sibling_query.rb +9 -7
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +40 -22
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +106 -31
- data/lib/capybara/rack_test/driver.rb +16 -7
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +74 -49
- data/lib/capybara/rack_test/node.rb +120 -47
- data/lib/capybara/rails.rb +1 -1
- data/lib/capybara/registration_container.rb +41 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +66 -0
- data/lib/capybara/result.rb +87 -53
- data/lib/capybara/rspec/features.rb +8 -10
- data/lib/capybara/rspec/matcher_proxies.rb +39 -18
- data/lib/capybara/rspec/matchers/base.rb +113 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +69 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +43 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +142 -315
- data/lib/capybara/rspec.rb +3 -2
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
- data/lib/capybara/selector/css.rb +85 -8
- data/lib/capybara/selector/definition/button.rb +68 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +55 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +280 -0
- data/lib/capybara/selector/filter.rb +1 -0
- data/lib/capybara/selector/filter_set.rb +72 -28
- data/lib/capybara/selector/filters/base.rb +45 -2
- data/lib/capybara/selector/filters/expression_filter.rb +5 -6
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +18 -4
- data/lib/capybara/selector/regexp_disassembler.rb +211 -0
- data/lib/capybara/selector/selector.rb +89 -200
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +474 -534
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +270 -245
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +84 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +229 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +76 -0
- data/lib/capybara/selenium/node.rb +460 -170
- data/lib/capybara/selenium/nodes/chrome_node.rb +125 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +80 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +71 -0
- data/lib/capybara/server.rb +58 -67
- data/lib/capybara/session/config.rb +40 -6
- data/lib/capybara/session/matchers.rb +26 -19
- data/lib/capybara/session.rb +252 -194
- data/lib/capybara/spec/public/jquery.js +5 -5
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +126 -8
- data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +135 -44
- data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
- data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/{assert_text.rb → assert_text_spec.rb} +76 -52
- data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
- data/lib/capybara/spec/session/attach_file_spec.rb +126 -72
- data/lib/capybara/spec/session/body_spec.rb +11 -13
- data/lib/capybara/spec/session/check_spec.rb +112 -51
- data/lib/capybara/spec/session/choose_spec.rb +62 -30
- data/lib/capybara/spec/session/click_button_spec.rb +227 -161
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
- data/lib/capybara/spec/session/click_link_spec.rb +89 -55
- data/lib/capybara/spec/session/current_scope_spec.rb +8 -8
- data/lib/capybara/spec/session/current_url_spec.rb +44 -37
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
- data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
- data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +8 -6
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
- data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
- data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
- data/lib/capybara/spec/session/fill_in_spec.rb +110 -44
- data/lib/capybara/spec/session/find_button_spec.rb +23 -23
- data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
- data/lib/capybara/spec/session/find_field_spec.rb +33 -31
- data/lib/capybara/spec/session/find_link_spec.rb +42 -14
- data/lib/capybara/spec/session/find_spec.rb +251 -142
- data/lib/capybara/spec/session/first_spec.rb +45 -44
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +46 -19
- data/lib/capybara/spec/session/go_back_spec.rb +1 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +23 -23
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
- data/lib/capybara/spec/session/has_button_spec.rb +98 -12
- data/lib/capybara/spec/session/has_css_spec.rb +271 -137
- data/lib/capybara/spec/session/has_current_path_spec.rb +50 -35
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +137 -58
- data/lib/capybara/spec/session/has_link_spec.rb +46 -6
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +33 -31
- data/lib/capybara/spec/session/has_select_spec.rb +84 -50
- data/lib/capybara/spec/session/has_selector_spec.rb +117 -69
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +181 -4
- data/lib/capybara/spec/session/has_text_spec.rb +101 -53
- data/lib/capybara/spec/session/has_title_spec.rb +19 -14
- data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
- data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
- data/lib/capybara/spec/session/html_spec.rb +13 -6
- data/lib/capybara/spec/session/matches_style_spec.rb +37 -0
- data/lib/capybara/spec/session/node_spec.rb +958 -122
- data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
- data/lib/capybara/spec/session/refresh_spec.rb +9 -7
- data/lib/capybara/spec/session/reset_session_spec.rb +65 -37
- data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
- data/lib/capybara/spec/session/save_page_spec.rb +41 -38
- data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
- data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/scroll_spec.rb +119 -0
- data/lib/capybara/spec/session/select_spec.rb +102 -76
- data/lib/capybara/spec/session/selectors_spec.rb +51 -18
- data/lib/capybara/spec/session/sibling_spec.rb +9 -9
- data/lib/capybara/spec/session/text_spec.rb +26 -24
- data/lib/capybara/spec/session/title_spec.rb +8 -6
- data/lib/capybara/spec/session/uncheck_spec.rb +41 -22
- data/lib/capybara/spec/session/unselect_spec.rb +37 -37
- data/lib/capybara/spec/session/visit_spec.rb +79 -53
- data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
- data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
- data/lib/capybara/spec/session/window/window_spec.rb +88 -54
- data/lib/capybara/spec/session/window/windows_spec.rb +11 -8
- data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
- data/lib/capybara/spec/session/within_spec.rb +82 -44
- data/lib/capybara/spec/spec_helper.rb +46 -52
- data/lib/capybara/spec/test_app.rb +148 -41
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +156 -42
- data/lib/capybara/spec/views/frame_child.erb +4 -3
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +21 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +68 -1
- data/lib/capybara/spec/views/with_animation.erb +81 -0
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +46 -11
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +30 -5
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +21 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +32 -26
- data/lib/capybara.rb +128 -104
- data/spec/basic_node_spec.rb +59 -34
- data/spec/capybara_spec.rb +65 -51
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +84 -55
- data/spec/filter_set_spec.rb +24 -7
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -5
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -5
- data/spec/minitest_spec.rb +49 -5
- data/spec/minitest_spec_spec.rb +92 -62
- data/spec/per_session_config_spec.rb +6 -6
- data/spec/rack_test_spec.rb +183 -115
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +99 -39
- data/spec/rspec/features_spec.rb +28 -25
- data/spec/rspec/scenarios_spec.rb +10 -6
- data/spec/rspec/shared_spec_matchers.rb +418 -364
- data/spec/rspec/views_spec.rb +4 -3
- data/spec/rspec_matchers_spec.rb +35 -10
- data/spec/rspec_spec.rb +109 -85
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +392 -62
- data/spec/selenium_spec_chrome.rb +183 -41
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +41 -8
- data/spec/selenium_spec_firefox.rb +228 -0
- data/spec/selenium_spec_firefox_remote.rb +94 -0
- data/spec/selenium_spec_ie.rb +129 -11
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +192 -81
- data/spec/session_spec.rb +52 -16
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +460 -123
- data/spec/spec_helper.rb +124 -2
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +344 -45
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/lib/capybara/rspec/compound.rb +0 -90
- data/lib/capybara/spec/session/assert_selector.rb +0 -149
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
- data/spec/selenium_spec_marionette.rb +0 -143
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Capybara::SpecHelper.spec '#have_sibling' do
|
4
|
+
before do
|
5
|
+
@session.visit('/with_html')
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should assert a prior sibling element using the given locator' do
|
9
|
+
el = @session.find(:css, '#mid_sibling')
|
10
|
+
expect(el).to have_sibling(:css, '#pre_sibling')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should assert a following sibling element using the given locator' do
|
14
|
+
el = @session.find(:css, '#mid_sibling')
|
15
|
+
expect(el).to have_sibling(:css, '#post_sibling')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should not raise an error if there are multiple matches' do
|
19
|
+
el = @session.find(:css, '#mid_sibling')
|
20
|
+
expect(el).to have_sibling(:css, 'div')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should allow counts to be specified' do
|
24
|
+
el = @session.find(:css, '#mid_sibling')
|
25
|
+
|
26
|
+
expect(el).to have_sibling(:css, 'div').exactly(2).times
|
27
|
+
expect do
|
28
|
+
expect(el).to have_sibling(:css, 'div').once
|
29
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Capybara::SpecHelper.spec '#have_no_sibling' do
|
34
|
+
before do
|
35
|
+
@session.visit('/with_html')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should assert no matching sibling' do
|
39
|
+
el = @session.find(:css, '#mid_sibling')
|
40
|
+
expect(el).to have_no_sibling(:css, '#not_a_sibling')
|
41
|
+
expect(el).not_to have_sibling(:css, '#not_a_sibling')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should raise if there are matching siblings' do
|
45
|
+
el = @session.find(:css, '#mid_sibling')
|
46
|
+
expect do
|
47
|
+
expect(el).to have_no_sibling(:css, '#pre_sibling')
|
48
|
+
end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
49
|
+
end
|
50
|
+
end
|
@@ -5,15 +5,132 @@ Capybara::SpecHelper.spec '#has_table?' do
|
|
5
5
|
@session.visit('/tables')
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
8
|
+
it 'should be true if the table is on the page' do
|
9
9
|
expect(@session).to have_table('Villain')
|
10
10
|
expect(@session).to have_table('villain_table')
|
11
11
|
expect(@session).to have_table(:villain_table)
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
14
|
+
it 'should accept rows with column header hashes' do
|
15
|
+
expect(@session).to have_table('Horizontal Headers', with_rows:
|
16
|
+
[
|
17
|
+
{ 'First Name' => 'Vern', 'Last Name' => 'Konopelski', 'City' => 'Everette' },
|
18
|
+
{ 'First Name' => 'Palmer', 'Last Name' => 'Sawayn', 'City' => 'West Trinidad' }
|
19
|
+
])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should accept rows with partial column header hashes' do
|
23
|
+
expect(@session).to have_table('Horizontal Headers', with_rows:
|
24
|
+
[
|
25
|
+
{ 'First Name' => 'Thomas' },
|
26
|
+
{ 'Last Name' => 'Sawayn', 'City' => 'West Trinidad' }
|
27
|
+
])
|
28
|
+
|
29
|
+
expect(@session).not_to have_table('Horizontal Headers', with_rows:
|
30
|
+
[
|
31
|
+
{ 'Unmatched Header' => 'Thomas' }
|
32
|
+
])
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should accept rows with array of cell values' do
|
36
|
+
expect(@session).to have_table('Horizontal Headers', with_rows:
|
37
|
+
[
|
38
|
+
%w[Thomas Walpole Oceanside],
|
39
|
+
['Ratke', 'Lawrence', 'East Sorayashire']
|
40
|
+
])
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should consider order of cells in each row' do
|
44
|
+
expect(@session).not_to have_table('Horizontal Headers', with_rows:
|
45
|
+
[
|
46
|
+
%w[Thomas Walpole Oceanside],
|
47
|
+
['Lawrence', 'Ratke', 'East Sorayashire']
|
48
|
+
])
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should accept all rows with array of cell values' do
|
52
|
+
expect(@session).to have_table('Horizontal Headers', rows:
|
53
|
+
[
|
54
|
+
%w[Thomas Walpole Oceanside],
|
55
|
+
%w[Danilo Wilkinson Johnsonville],
|
56
|
+
%w[Vern Konopelski Everette],
|
57
|
+
['Ratke', 'Lawrence', 'East Sorayashire'],
|
58
|
+
['Palmer', 'Sawayn', 'West Trinidad']
|
59
|
+
])
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should match with vertical headers' do
|
63
|
+
expect(@session).to have_table('Vertical Headers', with_cols:
|
64
|
+
[
|
65
|
+
{ 'First Name' => 'Thomas' },
|
66
|
+
{ 'First Name' => 'Danilo', 'Last Name' => 'Wilkinson', 'City' => 'Johnsonville' },
|
67
|
+
{ 'Last Name' => 'Sawayn', 'City' => 'West Trinidad' }
|
68
|
+
])
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should match col with array of cell values' do
|
72
|
+
expect(@session).to have_table('Vertical Headers', with_cols:
|
73
|
+
[
|
74
|
+
%w[Vern Konopelski Everette]
|
75
|
+
])
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should match cols with array of cell values' do
|
79
|
+
expect(@session).to have_table('Vertical Headers', with_cols:
|
80
|
+
[
|
81
|
+
%w[Danilo Wilkinson Johnsonville],
|
82
|
+
%w[Vern Konopelski Everette]
|
83
|
+
])
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should match all cols with array of cell values' do
|
87
|
+
expect(@session).to have_table('Vertical Headers', cols:
|
88
|
+
[
|
89
|
+
%w[Thomas Walpole Oceanside],
|
90
|
+
%w[Danilo Wilkinson Johnsonville],
|
91
|
+
%w[Vern Konopelski Everette],
|
92
|
+
['Ratke', 'Lawrence', 'East Sorayashire'],
|
93
|
+
['Palmer', 'Sawayn', 'West Trinidad']
|
94
|
+
])
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should not match if the order of cell values doesn't match" do
|
98
|
+
expect(@session).not_to have_table('Vertical Headers', with_cols:
|
99
|
+
[
|
100
|
+
%w[Vern Everette Konopelski]
|
101
|
+
])
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should not match with vertical headers if the columns don't match" do
|
105
|
+
expect(@session).not_to have_table('Vertical Headers', with_cols:
|
106
|
+
[
|
107
|
+
{ 'First Name' => 'Thomas' },
|
108
|
+
{ 'First Name' => 'Danilo', 'Last Name' => 'Walpole', 'City' => 'Johnsonville' },
|
109
|
+
{ 'Last Name' => 'Sawayn', 'City' => 'West Trinidad' }
|
110
|
+
])
|
111
|
+
|
112
|
+
expect(@session).not_to have_table('Vertical Headers', with_cols:
|
113
|
+
[
|
114
|
+
{ 'Unmatched Header' => 'Thomas' }
|
115
|
+
])
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'should be false if the table is not on the page' do
|
15
119
|
expect(@session).not_to have_table('Monkey')
|
16
120
|
end
|
121
|
+
|
122
|
+
it 'should find row by header and cell values' do
|
123
|
+
expect(@session.find(:table, 'Horizontal Headers')).to have_selector(:table_row, 'First Name' => 'Thomas', 'Last Name' => 'Walpole')
|
124
|
+
expect(@session.find(:table, 'Horizontal Headers')).to have_selector(:table_row, 'Last Name' => 'Walpole')
|
125
|
+
expect(@session.find(:table, 'Horizontal Headers')).not_to have_selector(:table_row, 'First Name' => 'Walpole')
|
126
|
+
expect(@session.find(:table, 'Horizontal Headers')).not_to have_selector(:table_row, 'Unmatched Header' => 'Thomas')
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should find row by cell values' do
|
130
|
+
expect(@session.find(:table, 'Horizontal Headers')).to have_selector(:table_row, %w[Thomas Walpole Oceanside])
|
131
|
+
expect(@session.find(:table, 'Horizontal Headers')).not_to have_selector(:table_row, %w[Walpole Thomas])
|
132
|
+
expect(@session.find(:table, 'Horizontal Headers')).not_to have_selector(:table_row, %w[Other])
|
133
|
+
end
|
17
134
|
end
|
18
135
|
|
19
136
|
Capybara::SpecHelper.spec '#has_no_table?' do
|
@@ -21,12 +138,72 @@ Capybara::SpecHelper.spec '#has_no_table?' do
|
|
21
138
|
@session.visit('/tables')
|
22
139
|
end
|
23
140
|
|
24
|
-
it
|
141
|
+
it 'should be false if the table is on the page' do
|
25
142
|
expect(@session).not_to have_no_table('Villain')
|
26
143
|
expect(@session).not_to have_no_table('villain_table')
|
27
144
|
end
|
28
145
|
|
29
|
-
it
|
146
|
+
it 'should be true if the table is not on the page' do
|
30
147
|
expect(@session).to have_no_table('Monkey')
|
31
148
|
end
|
149
|
+
|
150
|
+
it 'should consider rows' do
|
151
|
+
expect(@session).to have_no_table('Horizontal Headers', with_rows:
|
152
|
+
[
|
153
|
+
{ 'First Name' => 'Thomas', 'City' => 'Los Angeles' }
|
154
|
+
])
|
155
|
+
end
|
156
|
+
|
157
|
+
context 'using :with_cols' do
|
158
|
+
it 'should consider a single column' do
|
159
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
160
|
+
[
|
161
|
+
{ 'First Name' => 'Joe' }
|
162
|
+
])
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'should be true even if the last column does exist' do
|
166
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
167
|
+
[
|
168
|
+
{
|
169
|
+
'First Name' => 'What?',
|
170
|
+
'What?' => 'Walpole',
|
171
|
+
'City' => 'Oceanside' # This line makes the example fail
|
172
|
+
}
|
173
|
+
])
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'should be true if none of the columns exist' do
|
177
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
178
|
+
[
|
179
|
+
{
|
180
|
+
'First Name' => 'What?',
|
181
|
+
'What?' => 'Walpole',
|
182
|
+
'City' => 'What?'
|
183
|
+
}
|
184
|
+
])
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'should be true if the first column does match' do
|
188
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
189
|
+
[
|
190
|
+
{
|
191
|
+
'First Name' => 'Thomas',
|
192
|
+
'Last Name' => 'What',
|
193
|
+
'City' => 'What'
|
194
|
+
}
|
195
|
+
])
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'should be true if none of the columns match' do
|
199
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
200
|
+
[
|
201
|
+
{
|
202
|
+
'First Name' => 'What',
|
203
|
+
'Last Name' => 'What',
|
204
|
+
'City' => 'What'
|
205
|
+
}
|
206
|
+
])
|
207
|
+
end
|
208
|
+
end
|
32
209
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Capybara::SpecHelper.spec '#has_text?' do
|
4
|
-
it
|
4
|
+
it 'should be true if the given text is on the page at least once' do
|
5
5
|
@session.visit('/with_html')
|
6
6
|
expect(@session).to have_text('est')
|
7
7
|
expect(@session).to have_text('Lorem')
|
@@ -9,32 +9,51 @@ Capybara::SpecHelper.spec '#has_text?' do
|
|
9
9
|
expect(@session).to have_text(:Redirect)
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
12
|
+
it 'should be true if scoped to an element which has the text' do
|
13
13
|
@session.visit('/with_html')
|
14
14
|
@session.within("//a[@title='awesome title']") do
|
15
15
|
expect(@session).to have_text('labore')
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it 'should be false if scoped to an element which does not have the text' do
|
20
20
|
@session.visit('/with_html')
|
21
21
|
@session.within("//a[@title='awesome title']") do
|
22
22
|
expect(@session).not_to have_text('monkey')
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'should ignore tags' do
|
27
27
|
@session.visit('/with_html')
|
28
28
|
expect(@session).not_to have_text('exercitation <a href="/foo" id="foo">ullamco</a> laboris')
|
29
29
|
expect(@session).to have_text('exercitation ullamco laboris')
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it 'should search correctly normalized text' do
|
33
33
|
@session.visit('/with_html')
|
34
34
|
expect(@session).to have_text('text with whitespace')
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
37
|
+
it 'should search whitespace collapsed text' do
|
38
|
+
@session.visit('/with_html')
|
39
|
+
expect(@session).to have_text('text with whitespace', normalize_ws: true)
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'with enabled default collapsing whitespace' do
|
43
|
+
before { Capybara.default_normalize_ws = true }
|
44
|
+
|
45
|
+
it 'should search unnormalized text' do
|
46
|
+
@session.visit('/with_html')
|
47
|
+
expect(@session).to have_text('text with whitespace', normalize_ws: false)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should search whitespace collapsed text' do
|
51
|
+
@session.visit('/with_html')
|
52
|
+
expect(@session).to have_text('text with whitespace')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should be false if the given text is not on the page' do
|
38
57
|
@session.visit('/with_html')
|
39
58
|
expect(@session).not_to have_text('xxxxyzzz')
|
40
59
|
expect(@session).not_to have_text('monkey')
|
@@ -66,23 +85,23 @@ Capybara::SpecHelper.spec '#has_text?' do
|
|
66
85
|
expect(@session).not_to have_text('aVar')
|
67
86
|
end
|
68
87
|
|
69
|
-
it
|
88
|
+
it 'should be false if the given text is on the page but not visible' do
|
70
89
|
@session.visit('/with_html')
|
71
90
|
expect(@session).not_to have_text('Inside element with hidden ancestor')
|
72
91
|
end
|
73
92
|
|
74
|
-
it
|
93
|
+
it 'should be true if :all given and text is invisible.' do
|
75
94
|
@session.visit('/with_html')
|
76
95
|
expect(@session).to have_text(:all, 'Some of this text is hidden!')
|
77
96
|
end
|
78
97
|
|
79
|
-
it
|
98
|
+
it 'should be true if `Capybara.ignore_hidden_elements = false` and text is invisible.' do
|
80
99
|
Capybara.ignore_hidden_elements = false
|
81
100
|
@session.visit('/with_html')
|
82
101
|
expect(@session).to have_text('Some of this text is hidden!')
|
83
102
|
end
|
84
103
|
|
85
|
-
it
|
104
|
+
it 'should be true if the text in the page matches given regexp' do
|
86
105
|
@session.visit('/with_html')
|
87
106
|
expect(@session).to have_text(/Lorem/)
|
88
107
|
end
|
@@ -92,50 +111,72 @@ Capybara::SpecHelper.spec '#has_text?' do
|
|
92
111
|
expect(@session).not_to have_text(/xxxxyzzz/)
|
93
112
|
end
|
94
113
|
|
95
|
-
context
|
96
|
-
it
|
114
|
+
context 'with object implementing to_s and to_hash' do
|
115
|
+
it 'should work if the object is passed alone' do
|
116
|
+
with_to_hash = Class.new do
|
117
|
+
def to_s; '42' end
|
118
|
+
def to_hash; { value: 'Other hash' } end
|
119
|
+
end.new
|
97
120
|
@session.visit('/with_html')
|
98
|
-
expect(@session
|
121
|
+
expect(@session).to have_text(with_to_hash)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should work if passed with empty options' do
|
125
|
+
with_to_hash = Class.new do
|
126
|
+
def to_s; '42' end
|
127
|
+
def to_hash; { value: 'Other hash' } end
|
128
|
+
end.new
|
129
|
+
@session.visit('/with_html')
|
130
|
+
expect(@session).to have_text(:visible, with_to_hash, **{})
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'with exact: true option' do
|
135
|
+
it 'should be true if text matches exactly' do
|
136
|
+
@session.visit('/with_html')
|
137
|
+
expect(@session.find(:id, 'h2one')).to have_text('Header Class Test One', exact: true)
|
99
138
|
end
|
100
139
|
|
101
140
|
it "should be false if text doesn't match exactly" do
|
102
141
|
@session.visit('/with_html')
|
103
|
-
expect(@session.find(:id,
|
142
|
+
expect(@session.find(:id, 'h2one')).not_to have_text('Header Class Test On', exact: true)
|
104
143
|
end
|
105
144
|
end
|
106
145
|
|
107
|
-
it
|
146
|
+
it 'should escape any characters that would have special meaning in a regexp' do
|
108
147
|
@session.visit('/with_html')
|
109
148
|
expect(@session).not_to have_text('.orem')
|
110
149
|
end
|
111
150
|
|
112
|
-
it
|
151
|
+
it 'should accept non-string parameters' do
|
113
152
|
@session.visit('/with_html')
|
114
153
|
expect(@session).to have_text(42)
|
115
154
|
end
|
116
155
|
|
117
|
-
it
|
156
|
+
it 'should be true when passed nil, and warn about it' do
|
118
157
|
# nil is converted to '' when to_s is invoked
|
119
158
|
@session.visit('/with_html')
|
120
|
-
expect
|
159
|
+
expect do
|
160
|
+
expect(@session).to have_text(nil)
|
161
|
+
end.to output(/Checking for expected text of nil is confusing/).to_stderr
|
121
162
|
end
|
122
163
|
|
123
|
-
it
|
164
|
+
it 'should wait for text to appear', requires: [:js] do
|
124
165
|
Capybara.using_wait_time(3) do
|
125
166
|
@session.visit('/with_js')
|
126
167
|
@session.click_link('Click me')
|
127
|
-
expect(@session).to have_text(
|
168
|
+
expect(@session).to have_text('Has been clicked')
|
128
169
|
end
|
129
170
|
end
|
130
171
|
|
131
|
-
context
|
132
|
-
it
|
172
|
+
context 'with between' do
|
173
|
+
it 'should be true if the text occurs within the range given' do
|
133
174
|
@session.visit('/with_count')
|
134
175
|
expect(@session).to have_text('count', between: 1..3)
|
135
176
|
expect(@session).to have_text(/count/, between: 2..2)
|
136
177
|
end
|
137
178
|
|
138
|
-
it
|
179
|
+
it 'should be false if the text occurs more or fewer times than range' do
|
139
180
|
@session.visit('/with_count')
|
140
181
|
expect(@session).not_to have_text('count', between: 0..1)
|
141
182
|
expect(@session).not_to have_text('count', between: 3..10)
|
@@ -143,76 +184,82 @@ Capybara::SpecHelper.spec '#has_text?' do
|
|
143
184
|
end
|
144
185
|
end
|
145
186
|
|
146
|
-
context
|
147
|
-
it
|
187
|
+
context 'with count' do
|
188
|
+
it 'should be true if the text occurs the given number of times' do
|
148
189
|
@session.visit('/with_count')
|
149
190
|
expect(@session).to have_text('count', count: 2)
|
191
|
+
expect(@session).to have_text('count').exactly(2).times
|
150
192
|
end
|
151
193
|
|
152
|
-
it
|
194
|
+
it 'should be false if the text occurs a different number of times than the given' do
|
153
195
|
@session.visit('/with_count')
|
154
196
|
expect(@session).not_to have_text('count', count: 0)
|
155
197
|
expect(@session).not_to have_text('count', count: 1)
|
198
|
+
expect(@session).not_to have_text('count').once
|
156
199
|
expect(@session).not_to have_text(/count/, count: 3)
|
157
200
|
end
|
158
201
|
|
159
|
-
it
|
202
|
+
it 'should coerce count to an integer' do
|
160
203
|
@session.visit('/with_count')
|
161
204
|
expect(@session).to have_text('count', count: '2')
|
162
205
|
expect(@session).not_to have_text('count', count: '3')
|
163
206
|
end
|
164
207
|
end
|
165
208
|
|
166
|
-
context
|
167
|
-
it
|
209
|
+
context 'with maximum' do
|
210
|
+
it 'should be true when text occurs same or fewer times than given' do
|
168
211
|
@session.visit('/with_count')
|
169
212
|
expect(@session).to have_text('count', maximum: 2)
|
213
|
+
expect(@session).to have_text('count').at_most(2).times
|
170
214
|
expect(@session).to have_text(/count/, maximum: 3)
|
171
215
|
end
|
172
216
|
|
173
|
-
it
|
217
|
+
it 'should be false when text occurs more times than given' do
|
174
218
|
@session.visit('/with_count')
|
175
219
|
expect(@session).not_to have_text('count', maximum: 1)
|
220
|
+
expect(@session).not_to have_text('count').at_most(1).times
|
176
221
|
expect(@session).not_to have_text('count', maximum: 0)
|
177
222
|
end
|
178
223
|
|
179
|
-
it
|
224
|
+
it 'should coerce maximum to an integer' do
|
180
225
|
@session.visit('/with_count')
|
181
226
|
expect(@session).to have_text('count', maximum: '2')
|
182
227
|
expect(@session).not_to have_text('count', maximum: '1')
|
183
228
|
end
|
184
229
|
end
|
185
230
|
|
186
|
-
context
|
187
|
-
it
|
231
|
+
context 'with minimum' do
|
232
|
+
it 'should be true when text occurs same or more times than given' do
|
188
233
|
@session.visit('/with_count')
|
189
234
|
expect(@session).to have_text('count', minimum: 2)
|
235
|
+
expect(@session).to have_text('count').at_least(2).times
|
190
236
|
expect(@session).to have_text(/count/, minimum: 0)
|
191
237
|
end
|
192
238
|
|
193
|
-
it
|
239
|
+
it 'should be false when text occurs fewer times than given' do
|
194
240
|
@session.visit('/with_count')
|
195
241
|
expect(@session).not_to have_text('count', minimum: 3)
|
242
|
+
expect(@session).not_to have_text('count').at_least(3).times
|
196
243
|
end
|
197
244
|
|
198
|
-
it
|
245
|
+
it 'should coerce minimum to an integer' do
|
199
246
|
@session.visit('/with_count')
|
200
247
|
expect(@session).to have_text('count', minimum: '2')
|
201
248
|
expect(@session).not_to have_text('count', minimum: '3')
|
202
249
|
end
|
203
250
|
end
|
204
251
|
|
205
|
-
context
|
206
|
-
it
|
252
|
+
context 'with wait', requires: [:js] do
|
253
|
+
it 'should find element if it appears before given wait duration' do
|
207
254
|
Capybara.using_wait_time(0.1) do
|
208
255
|
@session.visit('/with_js')
|
209
256
|
@session.click_link('Click me')
|
210
|
-
expect(@session).to have_text('Has been clicked', wait:
|
257
|
+
expect(@session).to have_text('Has been clicked', wait: 3)
|
211
258
|
end
|
212
259
|
end
|
213
260
|
end
|
214
261
|
|
215
|
-
it
|
262
|
+
it 'should raise an error if an invalid option is passed' do
|
216
263
|
@session.visit('/with_html')
|
217
264
|
expect do
|
218
265
|
expect(@session).to have_text('Lorem', invalid: true)
|
@@ -221,34 +268,34 @@ Capybara::SpecHelper.spec '#has_text?' do
|
|
221
268
|
end
|
222
269
|
|
223
270
|
Capybara::SpecHelper.spec '#has_no_text?' do
|
224
|
-
it
|
271
|
+
it 'should be false if the given text is on the page at least once' do
|
225
272
|
@session.visit('/with_html')
|
226
273
|
expect(@session).not_to have_no_text('est')
|
227
274
|
expect(@session).not_to have_no_text('Lorem')
|
228
275
|
expect(@session).not_to have_no_text('Redirect')
|
229
276
|
end
|
230
277
|
|
231
|
-
it
|
278
|
+
it 'should be false if scoped to an element which has the text' do
|
232
279
|
@session.visit('/with_html')
|
233
280
|
@session.within("//a[@title='awesome title']") do
|
234
281
|
expect(@session).not_to have_no_text('labore')
|
235
282
|
end
|
236
283
|
end
|
237
284
|
|
238
|
-
it
|
285
|
+
it 'should be true if scoped to an element which does not have the text' do
|
239
286
|
@session.visit('/with_html')
|
240
287
|
@session.within("//a[@title='awesome title']") do
|
241
288
|
expect(@session).to have_no_text('monkey')
|
242
289
|
end
|
243
290
|
end
|
244
291
|
|
245
|
-
it
|
292
|
+
it 'should ignore tags' do
|
246
293
|
@session.visit('/with_html')
|
247
294
|
expect(@session).to have_no_text('exercitation <a href="/foo" id="foo">ullamco</a> laboris')
|
248
295
|
expect(@session).not_to have_no_text('exercitation ullamco laboris')
|
249
296
|
end
|
250
297
|
|
251
|
-
it
|
298
|
+
it 'should be true if the given text is not on the page' do
|
252
299
|
@session.visit('/with_html')
|
253
300
|
expect(@session).to have_no_text('xxxxyzzz')
|
254
301
|
expect(@session).to have_no_text('monkey')
|
@@ -280,17 +327,17 @@ Capybara::SpecHelper.spec '#has_no_text?' do
|
|
280
327
|
expect(@session).to have_no_text('aVar')
|
281
328
|
end
|
282
329
|
|
283
|
-
it
|
330
|
+
it 'should be true if the given text is on the page but not visible' do
|
284
331
|
@session.visit('/with_html')
|
285
332
|
expect(@session).to have_no_text('Inside element with hidden ancestor')
|
286
333
|
end
|
287
334
|
|
288
|
-
it
|
335
|
+
it 'should be false if :all given and text is invisible.' do
|
289
336
|
@session.visit('/with_html')
|
290
337
|
expect(@session).not_to have_no_text(:all, 'Some of this text is hidden!')
|
291
338
|
end
|
292
339
|
|
293
|
-
it
|
340
|
+
it 'should be false if `Capybara.ignore_hidden_elements = false` and text is invisible.' do
|
294
341
|
Capybara.ignore_hidden_elements = false
|
295
342
|
@session.visit('/with_html')
|
296
343
|
expect(@session).not_to have_no_text('Some of this text is hidden!')
|
@@ -301,24 +348,25 @@ Capybara::SpecHelper.spec '#has_no_text?' do
|
|
301
348
|
expect(@session).to have_no_text(/xxxxyzzz/)
|
302
349
|
end
|
303
350
|
|
304
|
-
it
|
351
|
+
it 'should be false if the text in the page matches given regexp' do
|
305
352
|
@session.visit('/with_html')
|
306
353
|
expect(@session).not_to have_no_text(/Lorem/)
|
307
354
|
end
|
308
355
|
|
309
|
-
it
|
356
|
+
it 'should escape any characters that would have special meaning in a regexp' do
|
310
357
|
@session.visit('/with_html')
|
311
358
|
expect(@session).to have_no_text('.orem')
|
312
359
|
end
|
313
360
|
|
314
|
-
it
|
361
|
+
it 'should wait for text to disappear', requires: [:js] do
|
362
|
+
Capybara.default_max_wait_time = 2
|
315
363
|
@session.visit('/with_js')
|
316
364
|
@session.click_link('Click me')
|
317
|
-
expect(@session).to have_no_text(
|
365
|
+
expect(@session).to have_no_text('I changed it')
|
318
366
|
end
|
319
367
|
|
320
|
-
context
|
321
|
-
it
|
368
|
+
context 'with wait', requires: [:js] do
|
369
|
+
it 'should not find element if it appears after given wait duration' do
|
322
370
|
@session.visit('/with_js')
|
323
371
|
@session.click_link('Click me')
|
324
372
|
expect(@session).to have_no_text('Has been clicked', wait: 0.05)
|