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,76 +1,130 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#has_selector?' do
|
|
3
4
|
before do
|
|
4
5
|
@session.visit('/with_html')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
it
|
|
8
|
-
expect(@session).to have_selector(:xpath,
|
|
9
|
-
expect(@session).to have_selector(:css,
|
|
8
|
+
it 'should be true if the given selector is on the page' do
|
|
9
|
+
expect(@session).to have_selector(:xpath, '//p')
|
|
10
|
+
expect(@session).to have_selector(:css, 'p a#foo')
|
|
10
11
|
expect(@session).to have_selector("//p[contains(.,'est')]")
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
it
|
|
14
|
-
expect(@session).not_to have_selector(:xpath,
|
|
15
|
-
expect(@session).not_to have_selector(:css,
|
|
14
|
+
it 'should be false if the given selector is not on the page' do
|
|
15
|
+
expect(@session).not_to have_selector(:xpath, '//abbr')
|
|
16
|
+
expect(@session).not_to have_selector(:css, 'p a#doesnotexist')
|
|
16
17
|
expect(@session).not_to have_selector("//p[contains(.,'thisstringisnotonpage')]")
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
it
|
|
20
|
+
it 'should use default selector' do
|
|
20
21
|
Capybara.default_selector = :css
|
|
21
|
-
expect(@session).not_to have_selector(
|
|
22
|
-
expect(@session).to have_selector(
|
|
22
|
+
expect(@session).not_to have_selector('p a#doesnotexist')
|
|
23
|
+
expect(@session).to have_selector('p a#foo')
|
|
23
24
|
end
|
|
24
25
|
|
|
25
|
-
it
|
|
26
|
+
it 'should respect scopes' do
|
|
26
27
|
@session.within "//p[@id='first']" do
|
|
27
28
|
expect(@session).to have_selector(".//a[@id='foo']")
|
|
28
29
|
expect(@session).not_to have_selector(".//a[@id='red']")
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
it 'should accept a filter block' do
|
|
34
|
+
expect(@session).to have_selector(:css, 'a', count: 1) { |el| el[:id] == 'foo' }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context 'with count' do
|
|
38
|
+
it 'should be true if the content is on the page the given number of times' do
|
|
39
|
+
expect(@session).to have_selector('//p', count: 3)
|
|
40
|
+
expect(@session).to have_selector("//p//a[@id='foo']", count: 1)
|
|
41
|
+
expect(@session).to have_selector("//p[contains(.,'est')]", count: 1)
|
|
37
42
|
end
|
|
38
43
|
|
|
39
|
-
it
|
|
40
|
-
expect(@session).not_to have_selector(
|
|
41
|
-
expect(@session).not_to have_selector("//p//a[@id='foo']", :
|
|
42
|
-
expect(@session).not_to have_selector("//p[contains(.,'est')]", :
|
|
44
|
+
it 'should be false if the content is on the page the given number of times' do
|
|
45
|
+
expect(@session).not_to have_selector('//p', count: 6)
|
|
46
|
+
expect(@session).not_to have_selector("//p//a[@id='foo']", count: 2)
|
|
47
|
+
expect(@session).not_to have_selector("//p[contains(.,'est')]", count: 5)
|
|
43
48
|
end
|
|
44
49
|
|
|
45
50
|
it "should be false if the content isn't on the page at all" do
|
|
46
|
-
expect(@session).not_to have_selector(
|
|
47
|
-
expect(@session).not_to have_selector("//p//a[@id='doesnotexist']", :
|
|
51
|
+
expect(@session).not_to have_selector('//abbr', count: 2)
|
|
52
|
+
expect(@session).not_to have_selector("//p//a[@id='doesnotexist']", count: 1)
|
|
48
53
|
end
|
|
49
54
|
end
|
|
50
55
|
|
|
51
|
-
context
|
|
52
|
-
it
|
|
53
|
-
expect(@session).to have_selector(
|
|
54
|
-
expect(@session).
|
|
56
|
+
context 'with text' do
|
|
57
|
+
it 'should discard all matches where the given string is not contained' do
|
|
58
|
+
expect(@session).to have_selector('//p//a', text: 'Redirect', count: 1)
|
|
59
|
+
expect(@session).to have_selector(:css, 'p a', text: 'Redirect', count: 1)
|
|
60
|
+
expect(@session).not_to have_selector('//p', text: 'Doesnotexist')
|
|
55
61
|
end
|
|
56
62
|
|
|
57
|
-
it
|
|
58
|
-
expect(@session).to have_selector(:id,
|
|
59
|
-
expect(@session).not_to have_selector(:id,
|
|
63
|
+
it 'should respect visibility setting' do
|
|
64
|
+
expect(@session).to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :all)
|
|
65
|
+
expect(@session).not_to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :visible)
|
|
60
66
|
Capybara.ignore_hidden_elements = false
|
|
61
|
-
expect(@session).to have_selector(:id,
|
|
67
|
+
expect(@session).to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :all)
|
|
62
68
|
Capybara.visible_text_only = true
|
|
63
|
-
expect(@session).not_to have_selector(:id,
|
|
69
|
+
expect(@session).not_to have_selector(:id, 'hidden-text', text: 'Some of this text is hidden!', visible: :visible)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'should discard all matches where the given regexp is not matched' do
|
|
73
|
+
expect(@session).to have_selector('//p//a', text: /re[dab]i/i, count: 1)
|
|
74
|
+
expect(@session).not_to have_selector('//p//a', text: /Red$/)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'should raise when extra parameters passed' do
|
|
78
|
+
expect do
|
|
79
|
+
expect(@session).to have_selector(:css, 'p a#foo', 'extra')
|
|
80
|
+
end.to raise_error ArgumentError, /extra/
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
context 'with whitespace normalization' do
|
|
84
|
+
context 'Capybara.default_normalize_ws = false' do
|
|
85
|
+
it 'should support normalize_ws option' do
|
|
86
|
+
Capybara.default_normalize_ws = false
|
|
87
|
+
expect(@session).not_to have_selector(:id, 'second', text: 'text with whitespace')
|
|
88
|
+
expect(@session).to have_selector(:id, 'second', text: 'text with whitespace', normalize_ws: true)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context 'Capybara.default_normalize_ws = true' do
|
|
93
|
+
it 'should support normalize_ws option' do
|
|
94
|
+
Capybara.default_normalize_ws = true
|
|
95
|
+
expect(@session).to have_selector(:id, 'second', text: 'text with whitespace')
|
|
96
|
+
expect(@session).not_to have_selector(:id, 'second', text: 'text with whitespace', normalize_ws: false)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
64
99
|
end
|
|
100
|
+
end
|
|
65
101
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
102
|
+
context 'with exact_text' do
|
|
103
|
+
context 'string' do
|
|
104
|
+
it 'should only match elements that match exactly' do
|
|
105
|
+
expect(@session).to have_selector(:id, 'h2one', exact_text: 'Header Class Test One')
|
|
106
|
+
expect(@session).to have_no_selector(:id, 'h2one', exact_text: 'Header Class Test')
|
|
107
|
+
end
|
|
69
108
|
end
|
|
70
109
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
110
|
+
context 'boolean' do
|
|
111
|
+
it 'should only match elements that match exactly when true' do
|
|
112
|
+
expect(@session).to have_selector(:id, 'h2one', text: 'Header Class Test One', exact_text: true)
|
|
113
|
+
expect(@session).to have_no_selector(:id, 'h2one', text: 'Header Class Test', exact_text: true)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'should match substrings when false' do
|
|
117
|
+
expect(@session).to have_selector(:id, 'h2one', text: 'Header Class Test One', exact_text: false)
|
|
118
|
+
expect(@session).to have_selector(:id, 'h2one', text: 'Header Class Test', exact_text: false)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
context 'datalist' do
|
|
124
|
+
it 'should match options' do
|
|
125
|
+
@session.visit('/form')
|
|
126
|
+
expect(@session).to have_selector(:datalist_input, with_options: %w[Jaguar Audi Mercedes])
|
|
127
|
+
expect(@session).not_to have_selector(:datalist_input, with_options: %w[Ford Chevy])
|
|
74
128
|
end
|
|
75
129
|
end
|
|
76
130
|
end
|
|
@@ -80,59 +134,69 @@ Capybara::SpecHelper.spec '#has_no_selector?' do
|
|
|
80
134
|
@session.visit('/with_html')
|
|
81
135
|
end
|
|
82
136
|
|
|
83
|
-
it
|
|
84
|
-
expect(@session).not_to have_no_selector(:xpath,
|
|
85
|
-
expect(@session).not_to have_no_selector(:css,
|
|
137
|
+
it 'should be false if the given selector is on the page' do
|
|
138
|
+
expect(@session).not_to have_no_selector(:xpath, '//p')
|
|
139
|
+
expect(@session).not_to have_no_selector(:css, 'p a#foo')
|
|
86
140
|
expect(@session).not_to have_no_selector("//p[contains(.,'est')]")
|
|
87
141
|
end
|
|
88
142
|
|
|
89
|
-
it
|
|
90
|
-
expect(@session).to have_no_selector(:xpath,
|
|
91
|
-
expect(@session).to have_no_selector(:css,
|
|
143
|
+
it 'should be true if the given selector is not on the page' do
|
|
144
|
+
expect(@session).to have_no_selector(:xpath, '//abbr')
|
|
145
|
+
expect(@session).to have_no_selector(:css, 'p a#doesnotexist')
|
|
92
146
|
expect(@session).to have_no_selector("//p[contains(.,'thisstringisnotonpage')]")
|
|
93
147
|
end
|
|
94
148
|
|
|
95
|
-
it
|
|
149
|
+
it 'should use default selector' do
|
|
96
150
|
Capybara.default_selector = :css
|
|
97
|
-
expect(@session).to have_no_selector(
|
|
98
|
-
expect(@session).not_to have_no_selector(
|
|
151
|
+
expect(@session).to have_no_selector('p a#doesnotexist')
|
|
152
|
+
expect(@session).not_to have_no_selector('p a#foo')
|
|
99
153
|
end
|
|
100
154
|
|
|
101
|
-
it
|
|
155
|
+
it 'should respect scopes' do
|
|
102
156
|
@session.within "//p[@id='first']" do
|
|
103
157
|
expect(@session).not_to have_no_selector(".//a[@id='foo']")
|
|
104
158
|
expect(@session).to have_no_selector(".//a[@id='red']")
|
|
105
159
|
end
|
|
106
160
|
end
|
|
107
161
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
162
|
+
it 'should accept a filter block' do
|
|
163
|
+
expect(@session).to have_no_selector(:css, 'a#foo') { |el| el[:id] != 'foo' }
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
context 'with count' do
|
|
167
|
+
it 'should be false if the content is on the page the given number of times' do
|
|
168
|
+
expect(@session).not_to have_no_selector('//p', count: 3)
|
|
169
|
+
expect(@session).not_to have_no_selector("//p//a[@id='foo']", count: 1)
|
|
170
|
+
expect(@session).not_to have_no_selector("//p[contains(.,'est')]", count: 1)
|
|
113
171
|
end
|
|
114
172
|
|
|
115
|
-
it
|
|
116
|
-
expect(@session).to have_no_selector(
|
|
117
|
-
expect(@session).to have_no_selector("//p//a[@id='foo']", :
|
|
118
|
-
expect(@session).to have_no_selector("//p[contains(.,'est')]", :
|
|
173
|
+
it 'should be true if the content is on the page the wrong number of times' do
|
|
174
|
+
expect(@session).to have_no_selector('//p', count: 6)
|
|
175
|
+
expect(@session).to have_no_selector("//p//a[@id='foo']", count: 2)
|
|
176
|
+
expect(@session).to have_no_selector("//p[contains(.,'est')]", count: 5)
|
|
119
177
|
end
|
|
120
178
|
|
|
121
179
|
it "should be true if the content isn't on the page at all" do
|
|
122
|
-
expect(@session).to have_no_selector(
|
|
123
|
-
expect(@session).to have_no_selector("//p//a[@id='doesnotexist']", :
|
|
180
|
+
expect(@session).to have_no_selector('//abbr', count: 2)
|
|
181
|
+
expect(@session).to have_no_selector("//p//a[@id='doesnotexist']", count: 1)
|
|
124
182
|
end
|
|
125
183
|
end
|
|
126
184
|
|
|
127
|
-
context
|
|
128
|
-
it
|
|
129
|
-
expect(@session).not_to have_no_selector(
|
|
130
|
-
expect(@session).to have_no_selector(
|
|
185
|
+
context 'with text' do
|
|
186
|
+
it 'should discard all matches where the given string is contained' do
|
|
187
|
+
expect(@session).not_to have_no_selector('//p//a', text: 'Redirect', count: 1)
|
|
188
|
+
expect(@session).to have_no_selector('//p', text: 'Doesnotexist')
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it 'should discard all matches where the given regexp is matched' do
|
|
192
|
+
expect(@session).not_to have_no_selector('//p//a', text: /re[dab]i/i, count: 1)
|
|
193
|
+
expect(@session).to have_no_selector('//p//a', text: /Red$/)
|
|
131
194
|
end
|
|
132
195
|
|
|
133
|
-
it
|
|
134
|
-
expect
|
|
135
|
-
|
|
196
|
+
it 'should error when matching element exists' do
|
|
197
|
+
expect do
|
|
198
|
+
expect(@session).to have_no_selector('//h2', text: 'Header Class Test Five')
|
|
199
|
+
end.to raise_error RSpec::Expectations::ExpectationNotMetError
|
|
136
200
|
end
|
|
137
201
|
end
|
|
138
202
|
end
|
|
@@ -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
|
|
@@ -1,18 +1,125 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
Capybara::SpecHelper.spec '#has_table?' do
|
|
3
4
|
before do
|
|
4
5
|
@session.visit('/tables')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
it
|
|
8
|
+
it 'should be true if the table is on the page' do
|
|
8
9
|
expect(@session).to have_table('Villain')
|
|
9
10
|
expect(@session).to have_table('villain_table')
|
|
10
|
-
expect(@session).to have_table(:
|
|
11
|
+
expect(@session).to have_table(:villain_table)
|
|
12
|
+
end
|
|
13
|
+
|
|
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 hashses' 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
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'should accept rows with array of cell values' do
|
|
31
|
+
expect(@session).to have_table('Horizontal Headers', with_rows:
|
|
32
|
+
[
|
|
33
|
+
%w[Thomas Walpole Oceanside],
|
|
34
|
+
['Ratke', 'Lawrence', 'East Sorayashire']
|
|
35
|
+
])
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should consider order of cells in each row' do
|
|
39
|
+
expect(@session).not_to have_table('Horizontal Headers', with_rows:
|
|
40
|
+
[
|
|
41
|
+
%w[Thomas Walpole Oceanside],
|
|
42
|
+
['Lawrence', 'Ratke', 'East Sorayashire']
|
|
43
|
+
])
|
|
11
44
|
end
|
|
12
45
|
|
|
13
|
-
it
|
|
46
|
+
it 'should accept all rows with array of cell values' do
|
|
47
|
+
expect(@session).to have_table('Horizontal Headers', rows:
|
|
48
|
+
[
|
|
49
|
+
%w[Thomas Walpole Oceanside],
|
|
50
|
+
%w[Danilo Wilkinson Johnsonville],
|
|
51
|
+
%w[Vern Konopelski Everette],
|
|
52
|
+
['Ratke', 'Lawrence', 'East Sorayashire'],
|
|
53
|
+
['Palmer', 'Sawayn', 'West Trinidad']
|
|
54
|
+
])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should match with vertical headers' do
|
|
58
|
+
expect(@session).to have_table('Vertical Headers', with_cols:
|
|
59
|
+
[
|
|
60
|
+
{ 'First Name' => 'Thomas' },
|
|
61
|
+
{ 'First Name' => 'Danilo', 'Last Name' => 'Wilkinson', 'City' => 'Johnsonville' },
|
|
62
|
+
{ 'Last Name' => 'Sawayn', 'City' => 'West Trinidad' }
|
|
63
|
+
])
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'should match col with array of cell values' do
|
|
67
|
+
expect(@session).to have_table('Vertical Headers', with_cols:
|
|
68
|
+
[
|
|
69
|
+
%w[Vern Konopelski Everette]
|
|
70
|
+
])
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should match cols with array of cell values' do
|
|
74
|
+
expect(@session).to have_table('Vertical Headers', with_cols:
|
|
75
|
+
[
|
|
76
|
+
%w[Danilo Wilkinson Johnsonville],
|
|
77
|
+
%w[Vern Konopelski Everette]
|
|
78
|
+
])
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'should match all cols with array of cell values' do
|
|
82
|
+
expect(@session).to have_table('Vertical Headers', cols:
|
|
83
|
+
[
|
|
84
|
+
%w[Thomas Walpole Oceanside],
|
|
85
|
+
%w[Danilo Wilkinson Johnsonville],
|
|
86
|
+
%w[Vern Konopelski Everette],
|
|
87
|
+
['Ratke', 'Lawrence', 'East Sorayashire'],
|
|
88
|
+
['Palmer', 'Sawayn', 'West Trinidad']
|
|
89
|
+
])
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should not match if the order of cell values doesn't match" do
|
|
93
|
+
expect(@session).not_to have_table('Vertical Headers', with_cols:
|
|
94
|
+
[
|
|
95
|
+
%w[Vern Everette Konopelski]
|
|
96
|
+
])
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "should not match with vertical headers if the columns don't match" do
|
|
100
|
+
expect(@session).not_to have_table('Vertical Headers', with_cols:
|
|
101
|
+
[
|
|
102
|
+
{ 'First Name' => 'Thomas' },
|
|
103
|
+
{ 'First Name' => 'Danilo', 'Last Name' => 'Walpole', 'City' => 'Johnsonville' },
|
|
104
|
+
{ 'Last Name' => 'Sawayn', 'City' => 'West Trinidad' }
|
|
105
|
+
])
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it 'should be false if the table is not on the page' do
|
|
14
109
|
expect(@session).not_to have_table('Monkey')
|
|
15
110
|
end
|
|
111
|
+
|
|
112
|
+
it 'should find row by header and cell values' do
|
|
113
|
+
expect(@session.find(:table, 'Horizontal Headers')).to have_selector(:table_row, 'First Name' => 'Thomas', 'Last Name' => 'Walpole')
|
|
114
|
+
expect(@session.find(:table, 'Horizontal Headers')).to have_selector(:table_row, 'Last Name' => 'Walpole')
|
|
115
|
+
expect(@session.find(:table, 'Horizontal Headers')).not_to have_selector(:table_row, 'First Name' => 'Walpole')
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it 'should find row by cell values' do
|
|
119
|
+
expect(@session.find(:table, 'Horizontal Headers')).to have_selector(:table_row, %w[Thomas Walpole])
|
|
120
|
+
expect(@session.find(:table, 'Horizontal Headers')).not_to have_selector(:table_row, %w[Walpole Thomas])
|
|
121
|
+
expect(@session.find(:table, 'Horizontal Headers')).not_to have_selector(:table_row, %w[Other])
|
|
122
|
+
end
|
|
16
123
|
end
|
|
17
124
|
|
|
18
125
|
Capybara::SpecHelper.spec '#has_no_table?' do
|
|
@@ -20,12 +127,72 @@ Capybara::SpecHelper.spec '#has_no_table?' do
|
|
|
20
127
|
@session.visit('/tables')
|
|
21
128
|
end
|
|
22
129
|
|
|
23
|
-
it
|
|
130
|
+
it 'should be false if the table is on the page' do
|
|
24
131
|
expect(@session).not_to have_no_table('Villain')
|
|
25
132
|
expect(@session).not_to have_no_table('villain_table')
|
|
26
133
|
end
|
|
27
134
|
|
|
28
|
-
it
|
|
135
|
+
it 'should be true if the table is not on the page' do
|
|
29
136
|
expect(@session).to have_no_table('Monkey')
|
|
30
137
|
end
|
|
138
|
+
|
|
139
|
+
it 'should consider rows' do
|
|
140
|
+
expect(@session).to have_no_table('Horizontal Headers', with_rows:
|
|
141
|
+
[
|
|
142
|
+
{ 'First Name' => 'Thomas', 'City' => 'Los Angeles' }
|
|
143
|
+
])
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
context 'using :with_cols' do
|
|
147
|
+
it 'should consider a single column' do
|
|
148
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
|
149
|
+
[
|
|
150
|
+
{ 'First Name' => 'Joe' }
|
|
151
|
+
])
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it 'should be true even if the last column does exist' do
|
|
155
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
|
156
|
+
[
|
|
157
|
+
{
|
|
158
|
+
'First Name' => 'What?',
|
|
159
|
+
'What?' => 'Walpole',
|
|
160
|
+
'City' => 'Oceanside' # This line makes the example fail
|
|
161
|
+
}
|
|
162
|
+
])
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it 'should be true if none of the columns exist' do
|
|
166
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
|
167
|
+
[
|
|
168
|
+
{
|
|
169
|
+
'First Name' => 'What?',
|
|
170
|
+
'What?' => 'Walpole',
|
|
171
|
+
'City' => 'What?'
|
|
172
|
+
}
|
|
173
|
+
])
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
it 'should be true if the first column does match' do
|
|
177
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
|
178
|
+
[
|
|
179
|
+
{
|
|
180
|
+
'First Name' => 'Thomas',
|
|
181
|
+
'Last Name' => 'What',
|
|
182
|
+
'City' => 'What'
|
|
183
|
+
}
|
|
184
|
+
])
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it 'should be true if none of the columns match' do
|
|
188
|
+
expect(@session).to have_no_table('Vertical Headers', with_cols:
|
|
189
|
+
[
|
|
190
|
+
{
|
|
191
|
+
'First Name' => 'What',
|
|
192
|
+
'Last Name' => 'What',
|
|
193
|
+
'City' => 'What'
|
|
194
|
+
}
|
|
195
|
+
])
|
|
196
|
+
end
|
|
197
|
+
end
|
|
31
198
|
end
|