capybara 3.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +1 -0
- data/History.md +1813 -0
- data/License.txt +22 -0
- data/README.md +1099 -0
- data/lib/capybara.rb +511 -0
- data/lib/capybara/config.rb +94 -0
- data/lib/capybara/cucumber.rb +27 -0
- data/lib/capybara/driver/base.rb +170 -0
- data/lib/capybara/driver/node.rb +139 -0
- data/lib/capybara/dsl.rb +65 -0
- data/lib/capybara/helpers.rb +108 -0
- data/lib/capybara/minitest.rb +386 -0
- data/lib/capybara/minitest/spec.rb +264 -0
- data/lib/capybara/node/actions.rb +420 -0
- data/lib/capybara/node/base.rb +143 -0
- data/lib/capybara/node/document.rb +48 -0
- data/lib/capybara/node/document_matchers.rb +67 -0
- data/lib/capybara/node/element.rb +606 -0
- data/lib/capybara/node/finders.rb +325 -0
- data/lib/capybara/node/matchers.rb +883 -0
- data/lib/capybara/node/simple.rb +208 -0
- data/lib/capybara/queries/ancestor_query.rb +27 -0
- data/lib/capybara/queries/base_query.rb +106 -0
- data/lib/capybara/queries/current_path_query.rb +51 -0
- data/lib/capybara/queries/match_query.rb +26 -0
- data/lib/capybara/queries/selector_query.rb +710 -0
- data/lib/capybara/queries/sibling_query.rb +26 -0
- data/lib/capybara/queries/style_query.rb +45 -0
- data/lib/capybara/queries/text_query.rb +110 -0
- data/lib/capybara/queries/title_query.rb +39 -0
- data/lib/capybara/rack_test/browser.rb +140 -0
- data/lib/capybara/rack_test/css_handlers.rb +13 -0
- data/lib/capybara/rack_test/driver.rb +109 -0
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +127 -0
- data/lib/capybara/rack_test/node.rb +325 -0
- data/lib/capybara/rails.rb +16 -0
- data/lib/capybara/registrations/drivers.rb +36 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +27 -0
- data/lib/capybara/registrations/servers.rb +44 -0
- data/lib/capybara/result.rb +190 -0
- data/lib/capybara/rspec.rb +29 -0
- data/lib/capybara/rspec/features.rb +23 -0
- data/lib/capybara/rspec/matcher_proxies.rb +82 -0
- data/lib/capybara/rspec/matchers.rb +201 -0
- data/lib/capybara/rspec/matchers/base.rb +111 -0
- data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
- data/lib/capybara/rspec/matchers/compound.rb +88 -0
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
- data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +33 -0
- data/lib/capybara/rspec/matchers/have_title.rb +29 -0
- data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
- data/lib/capybara/rspec/matchers/match_style.rb +38 -0
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/selector.rb +233 -0
- data/lib/capybara/selector/builders/css_builder.rb +84 -0
- data/lib/capybara/selector/builders/xpath_builder.rb +69 -0
- data/lib/capybara/selector/css.rb +102 -0
- data/lib/capybara/selector/definition.rb +276 -0
- data/lib/capybara/selector/definition/button.rb +51 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +27 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +46 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/filter.rb +5 -0
- data/lib/capybara/selector/filter_set.rb +124 -0
- data/lib/capybara/selector/filters/base.rb +77 -0
- data/lib/capybara/selector/filters/expression_filter.rb +22 -0
- data/lib/capybara/selector/filters/locator_filter.rb +29 -0
- data/lib/capybara/selector/filters/node_filter.rb +31 -0
- data/lib/capybara/selector/regexp_disassembler.rb +214 -0
- data/lib/capybara/selector/selector.rb +147 -0
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +496 -0
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +119 -0
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +126 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +110 -0
- data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +78 -0
- data/lib/capybara/selenium/logger_suppressor.rb +34 -0
- data/lib/capybara/selenium/node.rb +610 -0
- data/lib/capybara/selenium/nodes/chrome_node.rb +119 -0
- data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +131 -0
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +47 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server.rb +126 -0
- data/lib/capybara/server/animation_disabler.rb +58 -0
- data/lib/capybara/server/checker.rb +44 -0
- data/lib/capybara/server/middleware.rb +69 -0
- data/lib/capybara/session.rb +942 -0
- data/lib/capybara/session/config.rb +124 -0
- data/lib/capybara/session/matchers.rb +87 -0
- data/lib/capybara/spec/fixtures/another_test_file.txt +1 -0
- data/lib/capybara/spec/fixtures/capybara.jpg +3 -0
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/fixtures/test_file.txt +1 -0
- data/lib/capybara/spec/public/jquery-ui.js +13 -0
- data/lib/capybara/spec/public/jquery.js +5 -0
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +268 -0
- data/lib/capybara/spec/session/accept_alert_spec.rb +81 -0
- data/lib/capybara/spec/session/accept_confirm_spec.rb +32 -0
- data/lib/capybara/spec/session/accept_prompt_spec.rb +78 -0
- data/lib/capybara/spec/session/all_spec.rb +278 -0
- data/lib/capybara/spec/session/ancestor_spec.rb +88 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +140 -0
- data/lib/capybara/spec/session/assert_current_path_spec.rb +75 -0
- data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
- data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
- data/lib/capybara/spec/session/assert_text_spec.rb +258 -0
- data/lib/capybara/spec/session/assert_title_spec.rb +93 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +216 -0
- data/lib/capybara/spec/session/body_spec.rb +23 -0
- data/lib/capybara/spec/session/check_spec.rb +235 -0
- data/lib/capybara/spec/session/choose_spec.rb +121 -0
- data/lib/capybara/spec/session/click_button_spec.rb +506 -0
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +129 -0
- data/lib/capybara/spec/session/click_link_spec.rb +229 -0
- data/lib/capybara/spec/session/current_scope_spec.rb +31 -0
- data/lib/capybara/spec/session/current_url_spec.rb +115 -0
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +36 -0
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +21 -0
- data/lib/capybara/spec/session/element/assert_match_selector_spec.rb +38 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +31 -0
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +25 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +120 -0
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +49 -0
- data/lib/capybara/spec/session/execute_script_spec.rb +28 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +286 -0
- data/lib/capybara/spec/session/find_button_spec.rb +74 -0
- data/lib/capybara/spec/session/find_by_id_spec.rb +33 -0
- data/lib/capybara/spec/session/find_field_spec.rb +113 -0
- data/lib/capybara/spec/session/find_link_spec.rb +70 -0
- data/lib/capybara/spec/session/find_spec.rb +531 -0
- data/lib/capybara/spec/session/first_spec.rb +156 -0
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +116 -0
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +112 -0
- data/lib/capybara/spec/session/go_back_spec.rb +12 -0
- data/lib/capybara/spec/session/go_forward_spec.rb +14 -0
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +25 -0
- data/lib/capybara/spec/session/has_button_spec.rb +69 -0
- data/lib/capybara/spec/session/has_css_spec.rb +374 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +138 -0
- data/lib/capybara/spec/session/has_field_spec.rb +349 -0
- data/lib/capybara/spec/session/has_link_spec.rb +39 -0
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +78 -0
- data/lib/capybara/spec/session/has_select_spec.rb +310 -0
- data/lib/capybara/spec/session/has_selector_spec.rb +202 -0
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +198 -0
- data/lib/capybara/spec/session/has_text_spec.rb +394 -0
- data/lib/capybara/spec/session/has_title_spec.rb +71 -0
- data/lib/capybara/spec/session/has_xpath_spec.rb +149 -0
- data/lib/capybara/spec/session/headers_spec.rb +8 -0
- data/lib/capybara/spec/session/html_spec.rb +47 -0
- data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
- data/lib/capybara/spec/session/node_spec.rb +1292 -0
- data/lib/capybara/spec/session/node_wrapper_spec.rb +39 -0
- data/lib/capybara/spec/session/refresh_spec.rb +33 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +148 -0
- data/lib/capybara/spec/session/response_code_spec.rb +8 -0
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +21 -0
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +43 -0
- data/lib/capybara/spec/session/save_page_spec.rb +110 -0
- data/lib/capybara/spec/session/save_screenshot_spec.rb +55 -0
- data/lib/capybara/spec/session/screenshot_spec.rb +18 -0
- data/lib/capybara/spec/session/scroll_spec.rb +117 -0
- data/lib/capybara/spec/session/select_spec.rb +229 -0
- data/lib/capybara/spec/session/selectors_spec.rb +98 -0
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/session/text_spec.rb +74 -0
- data/lib/capybara/spec/session/title_spec.rb +29 -0
- data/lib/capybara/spec/session/uncheck_spec.rb +100 -0
- data/lib/capybara/spec/session/unselect_spec.rb +116 -0
- data/lib/capybara/spec/session/visit_spec.rb +204 -0
- data/lib/capybara/spec/session/window/become_closed_spec.rb +89 -0
- data/lib/capybara/spec/session/window/current_window_spec.rb +28 -0
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +31 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +132 -0
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +99 -0
- data/lib/capybara/spec/session/window/window_spec.rb +203 -0
- data/lib/capybara/spec/session/window/windows_spec.rb +34 -0
- data/lib/capybara/spec/session/window/within_window_spec.rb +157 -0
- data/lib/capybara/spec/session/within_spec.rb +199 -0
- data/lib/capybara/spec/spec_helper.rb +134 -0
- data/lib/capybara/spec/test_app.rb +226 -0
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/buttons.erb +5 -0
- data/lib/capybara/spec/views/fieldsets.erb +30 -0
- data/lib/capybara/spec/views/form.erb +685 -0
- data/lib/capybara/spec/views/frame_child.erb +18 -0
- data/lib/capybara/spec/views/frame_one.erb +10 -0
- data/lib/capybara/spec/views/frame_parent.erb +9 -0
- data/lib/capybara/spec/views/frame_two.erb +9 -0
- data/lib/capybara/spec/views/header_links.erb +8 -0
- data/lib/capybara/spec/views/host_links.erb +13 -0
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +47 -0
- data/lib/capybara/spec/views/offset.erb +32 -0
- data/lib/capybara/spec/views/path.erb +13 -0
- data/lib/capybara/spec/views/popup_one.erb +9 -0
- data/lib/capybara/spec/views/popup_two.erb +9 -0
- data/lib/capybara/spec/views/postback.erb +14 -0
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +20 -0
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +130 -0
- data/lib/capybara/spec/views/with_animation.erb +74 -0
- data/lib/capybara/spec/views/with_base_tag.erb +11 -0
- data/lib/capybara/spec/views/with_count.erb +8 -0
- data/lib/capybara/spec/views/with_dragula.erb +22 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +24 -0
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +208 -0
- data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
- data/lib/capybara/spec/views/with_html_entities.erb +2 -0
- data/lib/capybara/spec/views/with_js.erb +160 -0
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +20 -0
- data/lib/capybara/spec/views/with_scope.erb +42 -0
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_simple_html.erb +2 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +17 -0
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_title.erb +5 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +14 -0
- data/lib/capybara/spec/views/with_windows.erb +54 -0
- data/lib/capybara/spec/views/within_frames.erb +15 -0
- data/lib/capybara/version.rb +5 -0
- data/lib/capybara/window.rb +146 -0
- data/spec/basic_node_spec.rb +154 -0
- data/spec/capybara_spec.rb +112 -0
- data/spec/css_builder_spec.rb +101 -0
- data/spec/css_splitter_spec.rb +38 -0
- data/spec/dsl_spec.rb +276 -0
- data/spec/filter_set_spec.rb +46 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/certificate.pem +25 -0
- data/spec/fixtures/key.pem +27 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +13 -0
- data/spec/fixtures/selenium_driver_rspec_success.rb +13 -0
- data/spec/minitest_spec.rb +163 -0
- data/spec/minitest_spec_spec.rb +162 -0
- data/spec/per_session_config_spec.rb +68 -0
- data/spec/rack_test_spec.rb +268 -0
- data/spec/regexp_dissassembler_spec.rb +250 -0
- data/spec/result_spec.rb +196 -0
- data/spec/rspec/features_spec.rb +99 -0
- data/spec/rspec/scenarios_spec.rb +19 -0
- data/spec/rspec/shared_spec_matchers.rb +947 -0
- data/spec/rspec/views_spec.rb +14 -0
- data/spec/rspec_matchers_spec.rb +62 -0
- data/spec/rspec_spec.rb +145 -0
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +513 -0
- data/spec/selenium_spec_chrome.rb +188 -0
- data/spec/selenium_spec_chrome_remote.rb +96 -0
- data/spec/selenium_spec_edge.rb +47 -0
- data/spec/selenium_spec_firefox.rb +208 -0
- data/spec/selenium_spec_firefox_remote.rb +80 -0
- data/spec/selenium_spec_ie.rb +150 -0
- data/spec/selenium_spec_safari.rb +148 -0
- data/spec/server_spec.rb +292 -0
- data/spec/session_spec.rb +91 -0
- data/spec/shared_selenium_node.rb +83 -0
- data/spec/shared_selenium_session.rb +476 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/xpath_builder_spec.rb +93 -0
- metadata +753 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#ancestor' 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 the ancestor element using the given locator' do
|
|
13
|
+
el = @session.find(:css, '#first_image')
|
|
14
|
+
expect(el.ancestor('//p')).to have_text('Lorem ipsum dolor')
|
|
15
|
+
expect(el.ancestor('//a')[:'aria-label']).to eq('Go to simple')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'should find the ancestor element using the given locator and options' do
|
|
19
|
+
el = @session.find(:css, '#child')
|
|
20
|
+
expect(el.ancestor('//div', text: "Ancestor\nAncestor\nAncestor")[:id]).to eq('ancestor3')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should find the closest ancestor' do
|
|
24
|
+
el = @session.find(:css, '#child')
|
|
25
|
+
expect(el.ancestor('.//div', order: :reverse, match: :first)[:id]).to eq('ancestor1')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'should raise an error if there are multiple matches' do
|
|
29
|
+
el = @session.find(:css, '#child')
|
|
30
|
+
expect { el.ancestor('//div') }.to raise_error(Capybara::Ambiguous)
|
|
31
|
+
expect { el.ancestor('//div', text: 'Ancestor') }.to raise_error(Capybara::Ambiguous)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context 'with css selectors' do
|
|
35
|
+
it 'should find the first element using the given locator' do
|
|
36
|
+
el = @session.find(:css, '#first_image')
|
|
37
|
+
expect(el.ancestor(:css, 'p')).to have_text('Lorem ipsum dolor')
|
|
38
|
+
expect(el.ancestor(:css, 'a')[:'aria-label']).to eq('Go to simple')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should support pseudo selectors' do
|
|
42
|
+
el = @session.find(:css, '#button_img')
|
|
43
|
+
expect(el.ancestor(:css, 'button:disabled')[:id]).to eq('ancestor_button')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context 'with xpath selectors' do
|
|
48
|
+
it 'should find the first element using the given locator' do
|
|
49
|
+
el = @session.find(:css, '#first_image')
|
|
50
|
+
expect(el.ancestor(:xpath, '//p')).to have_text('Lorem ipsum dolor')
|
|
51
|
+
expect(el.ancestor(:xpath, '//a')[:'aria-label']).to eq('Go to simple')
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context 'with custom selector' do
|
|
56
|
+
it 'should use the custom selector' do
|
|
57
|
+
Capybara.add_selector(:level) do
|
|
58
|
+
xpath { |num| ".//*[@id='ancestor#{num}']" }
|
|
59
|
+
end
|
|
60
|
+
el = @session.find(:css, '#child')
|
|
61
|
+
expect(el.ancestor(:level, 1)[:id]).to eq 'ancestor1'
|
|
62
|
+
expect(el.ancestor(:level, 3)[:id]).to eq 'ancestor3'
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'should raise ElementNotFound with a useful default message if nothing was found' do
|
|
67
|
+
el = @session.find(:css, '#child')
|
|
68
|
+
expect do
|
|
69
|
+
el.ancestor(:xpath, '//div[@id="nosuchthing"]')
|
|
70
|
+
end.to raise_error(Capybara::ElementNotFound, 'Unable to find xpath "//div[@id=\\"nosuchthing\\"]" that is an ancestor of visible css "#child"')
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context 'within a scope' do
|
|
74
|
+
it 'should limit the ancestors to inside the scope' do
|
|
75
|
+
@session.within(:css, '#ancestor2') do
|
|
76
|
+
el = @session.find(:css, '#child')
|
|
77
|
+
expect(el.ancestor(:css, 'div', text: 'Ancestor')[:id]).to eq('ancestor1')
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'should raise if selector type is unknown' do
|
|
83
|
+
el = @session.find(:css, '#child')
|
|
84
|
+
expect do
|
|
85
|
+
el.ancestor(:unknown, '//h1')
|
|
86
|
+
end.to raise_error(ArgumentError)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#assert_all_of_selectors' do
|
|
4
|
+
before do
|
|
5
|
+
@session.visit('/with_html')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'should be true if the given selectors are on the page' do
|
|
9
|
+
@session.assert_all_of_selectors(:css, 'p a#foo', 'h2#h2one', 'h2#h2two')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'should be false if any of the given selectors are not on the page' do
|
|
13
|
+
expect { @session.assert_all_of_selectors(:css, 'p a#foo', 'h2#h2three', 'h2#h2one') }.to raise_error(Capybara::ElementNotFound)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should use default selector' do
|
|
17
|
+
Capybara.default_selector = :css
|
|
18
|
+
expect { @session.assert_all_of_selectors('p a#foo', 'h2#h2three', 'h2#h2one') }.to raise_error(Capybara::ElementNotFound)
|
|
19
|
+
@session.assert_all_of_selectors('p a#foo', 'h2#h2two', 'h2#h2one')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should support filter block' do
|
|
23
|
+
expect { @session.assert_all_of_selectors(:css, 'h2#h2one', 'h2#h2two') { |n| n[:id] == 'h2one' } }.to raise_error(Capybara::ElementNotFound, /custom filter block/)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context 'should respect scopes' do
|
|
27
|
+
it 'when used with `within`' do
|
|
28
|
+
@session.within "//p[@id='first']" do
|
|
29
|
+
@session.assert_all_of_selectors(".//a[@id='foo']")
|
|
30
|
+
expect { @session.assert_all_of_selectors(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'when called on elements' do
|
|
35
|
+
el = @session.find "//p[@id='first']"
|
|
36
|
+
el.assert_all_of_selectors(".//a[@id='foo']")
|
|
37
|
+
expect { el.assert_all_of_selectors(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context 'with options' do
|
|
42
|
+
it 'should apply options to all locators' do
|
|
43
|
+
@session.assert_all_of_selectors(:field, 'normal', 'additional_newline', type: :textarea)
|
|
44
|
+
expect { @session.assert_all_of_selectors(:field, 'normal', 'test_field', 'additional_newline', type: :textarea) }.to raise_error(Capybara::ElementNotFound)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context 'with wait', requires: [:js] do
|
|
49
|
+
it 'should not raise error if all the elements appear before given wait duration' do
|
|
50
|
+
Capybara.using_wait_time(0.1) do
|
|
51
|
+
@session.visit('/with_js')
|
|
52
|
+
@session.click_link('Click me')
|
|
53
|
+
@session.assert_all_of_selectors(:css, 'a#clickable', 'a#has-been-clicked', '#drag', wait: 1.5)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Capybara::SpecHelper.spec '#assert_none_of_selectors' do
|
|
60
|
+
before do
|
|
61
|
+
@session.visit('/with_html')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should be false if any of the given locators are on the page' do
|
|
65
|
+
expect { @session.assert_none_of_selectors(:xpath, '//p', '//a') }.to raise_error(Capybara::ElementNotFound)
|
|
66
|
+
expect { @session.assert_none_of_selectors(:xpath, '//abbr', '//a') }.to raise_error(Capybara::ElementNotFound)
|
|
67
|
+
expect { @session.assert_none_of_selectors(:css, 'p a#foo') }.to raise_error(Capybara::ElementNotFound)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'should be true if none of the given locators are on the page' do
|
|
71
|
+
@session.assert_none_of_selectors(:xpath, '//abbr', '//td')
|
|
72
|
+
@session.assert_none_of_selectors(:css, 'p a#doesnotexist', 'abbr')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'should use default selector' do
|
|
76
|
+
Capybara.default_selector = :css
|
|
77
|
+
@session.assert_none_of_selectors('p a#doesnotexist', 'abbr')
|
|
78
|
+
expect { @session.assert_none_of_selectors('abbr', 'p a#foo') }.to raise_error(Capybara::ElementNotFound)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context 'should respect scopes' do
|
|
82
|
+
it 'when used with `within`' do
|
|
83
|
+
@session.within "//p[@id='first']" do
|
|
84
|
+
expect { @session.assert_none_of_selectors(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
|
|
85
|
+
@session.assert_none_of_selectors(".//a[@id='red']")
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'when called on an element' do
|
|
90
|
+
el = @session.find "//p[@id='first']"
|
|
91
|
+
expect { el.assert_none_of_selectors(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
|
|
92
|
+
el.assert_none_of_selectors(".//a[@id='red']")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
context 'with options' do
|
|
97
|
+
it 'should apply the options to all locators' do
|
|
98
|
+
expect { @session.assert_none_of_selectors('//p//a', text: 'Redirect') }.to raise_error(Capybara::ElementNotFound)
|
|
99
|
+
@session.assert_none_of_selectors('//p', text: 'Doesnotexist')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'should discard all matches where the given regexp is matched' do
|
|
103
|
+
expect { @session.assert_none_of_selectors('//p//a', text: /re[dab]i/i, count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
104
|
+
@session.assert_none_of_selectors('//p//a', text: /Red$/)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context 'with wait', requires: [:js] do
|
|
109
|
+
it 'should not find elements if they appear after given wait duration' do
|
|
110
|
+
@session.visit('/with_js')
|
|
111
|
+
@session.click_link('Click me')
|
|
112
|
+
@session.assert_none_of_selectors(:css, '#new_field', 'a#has-been-clicked', wait: 0.1)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
Capybara::SpecHelper.spec '#assert_any_of_selectors' do
|
|
118
|
+
before do
|
|
119
|
+
@session.visit('/with_html')
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'should be true if any of the given selectors are on the page' do
|
|
123
|
+
@session.assert_any_of_selectors(:css, 'a#foo', 'h2#h2three')
|
|
124
|
+
@session.assert_any_of_selectors(:css, 'h2#h2three', 'a#foo')
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'should be false if none of the given selectors are on the page' do
|
|
128
|
+
expect { @session.assert_any_of_selectors(:css, 'h2#h2three', 'h4#h4four') }.to raise_error(Capybara::ElementNotFound)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'should use default selector' do
|
|
132
|
+
Capybara.default_selector = :css
|
|
133
|
+
expect { @session.assert_any_of_selectors('h2#h2three', 'h5#h5five') }.to raise_error(Capybara::ElementNotFound)
|
|
134
|
+
@session.assert_any_of_selectors('p a#foo', 'h2#h2two', 'h2#h2one')
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it 'should support filter block' do
|
|
138
|
+
expect { @session.assert_any_of_selectors(:css, 'h2#h2one', 'h2#h2two') { |_n| false } }.to raise_error(Capybara::ElementNotFound, /custom filter block/)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#assert_current_path' do
|
|
4
|
+
before do
|
|
5
|
+
@session.visit('/with_js')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'should not raise if the page has the given current path' do
|
|
9
|
+
expect { @session.assert_current_path('/with_js') }.not_to raise_error
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'should allow regexp matches' do
|
|
13
|
+
expect { @session.assert_current_path(/w[a-z]{3}_js/) }.not_to raise_error
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should wait for current_path', requires: [:js] do
|
|
17
|
+
@session.click_link('Change page')
|
|
18
|
+
expect { @session.assert_current_path('/with_html') }.not_to raise_error
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should raise if the page has not the given current_path' do
|
|
22
|
+
expect { @session.assert_current_path('/with_html') }.to raise_error(Capybara::ExpectationNotMet, 'expected "/with_js" to equal "/with_html"')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should check query options' do
|
|
26
|
+
@session.visit('/with_js?test=test')
|
|
27
|
+
expect { @session.assert_current_path('/with_js?test=test') }.not_to raise_error
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'should compare the full url' do
|
|
31
|
+
expect { @session.assert_current_path(%r{\Ahttp://[^/]*/with_js\Z}, url: true) }.not_to raise_error
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'should ignore the query' do
|
|
35
|
+
@session.visit('/with_js?test=test')
|
|
36
|
+
expect { @session.assert_current_path('/with_js', ignore_query: true) }.not_to raise_error
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should not cause an exception when current_url is nil' do
|
|
40
|
+
allow(@session).to receive(:current_url).and_return(nil)
|
|
41
|
+
allow(@session.page).to receive(:current_url).and_return(nil) if @session.respond_to? :page
|
|
42
|
+
|
|
43
|
+
expect { @session.assert_current_path(nil) }.not_to raise_error
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Capybara::SpecHelper.spec '#assert_no_current_path?' do
|
|
48
|
+
before do
|
|
49
|
+
@session.visit('/with_js')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should raise if the page has the given current_path' do
|
|
53
|
+
expect { @session.assert_no_current_path('/with_js') }.to raise_error(Capybara::ExpectationNotMet)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'should allow regexp matches' do
|
|
57
|
+
expect { @session.assert_no_current_path(/monkey/) }.not_to raise_error
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'should wait for current_path to disappear', requires: [:js] do
|
|
61
|
+
@session.click_link('Change page')
|
|
62
|
+
expect { @session.assert_no_current_path('/with_js') }.not_to raise_error
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'should not raise if the page has not the given current_path' do
|
|
66
|
+
expect { @session.assert_no_current_path('/with_html') }.not_to raise_error
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'should not cause an exception when current_url is nil' do
|
|
70
|
+
allow(@session).to receive(:current_url).and_return(nil)
|
|
71
|
+
allow(@session.page).to receive(:current_url).and_return(nil) if @session.respond_to? :page
|
|
72
|
+
|
|
73
|
+
expect { @session.assert_no_current_path('/with_html') }.not_to raise_error
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#assert_selector' do
|
|
4
|
+
before do
|
|
5
|
+
@session.visit('/with_html')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'should be true if the given selector is on the page' do
|
|
9
|
+
@session.assert_selector(:xpath, '//p')
|
|
10
|
+
@session.assert_selector(:css, 'p a#foo')
|
|
11
|
+
@session.assert_selector("//p[contains(.,'est')]")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'should be false if the given selector is not on the page' do
|
|
15
|
+
expect { @session.assert_selector(:xpath, '//abbr') }.to raise_error(Capybara::ElementNotFound)
|
|
16
|
+
expect { @session.assert_selector(:css, 'p a#doesnotexist') }.to raise_error(Capybara::ElementNotFound)
|
|
17
|
+
expect { @session.assert_selector("//p[contains(.,'thisstringisnotonpage')]") }.to raise_error(Capybara::ElementNotFound)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should use default selector' do
|
|
21
|
+
Capybara.default_selector = :css
|
|
22
|
+
expect { @session.assert_selector('p a#doesnotexist') }.to raise_error(Capybara::ElementNotFound)
|
|
23
|
+
@session.assert_selector('p a#foo')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should respect scopes' do
|
|
27
|
+
@session.within "//p[@id='first']" do
|
|
28
|
+
@session.assert_selector(".//a[@id='foo']")
|
|
29
|
+
expect { @session.assert_selector(".//a[@id='red']") }.to raise_error(Capybara::ElementNotFound)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'with count' do
|
|
34
|
+
it 'should be true if the content is on the page the given number of times' do
|
|
35
|
+
@session.assert_selector('//p', count: 3)
|
|
36
|
+
@session.assert_selector("//p//a[@id='foo']", count: 1)
|
|
37
|
+
@session.assert_selector("//p[contains(.,'est')]", count: 1)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'should be false if the content is on the page the given number of times' do
|
|
41
|
+
expect { @session.assert_selector('//p', count: 6) }.to raise_error(Capybara::ElementNotFound)
|
|
42
|
+
expect { @session.assert_selector("//p//a[@id='foo']", count: 2) }.to raise_error(Capybara::ElementNotFound)
|
|
43
|
+
expect { @session.assert_selector("//p[contains(.,'est')]", count: 5) }.to raise_error(Capybara::ElementNotFound)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should be false if the content isn't on the page at all" do
|
|
47
|
+
expect { @session.assert_selector('//abbr', count: 2) }.to raise_error(Capybara::ElementNotFound)
|
|
48
|
+
expect { @session.assert_selector("//p//a[@id='doesnotexist']", count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context 'with text' do
|
|
53
|
+
it 'should discard all matches where the given string is not contained' do
|
|
54
|
+
@session.assert_selector('//p//a', text: 'Redirect', count: 1)
|
|
55
|
+
expect { @session.assert_selector('//p', text: 'Doesnotexist') }.to raise_error(Capybara::ElementNotFound)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should discard all matches where the given regexp is not matched' do
|
|
59
|
+
@session.assert_selector('//p//a', text: /re[dab]i/i, count: 1)
|
|
60
|
+
expect { @session.assert_selector('//p//a', text: /Red$/) }.to raise_error(Capybara::ElementNotFound)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context 'with wait', requires: [:js] do
|
|
65
|
+
it 'should find element if it appears before given wait duration' do
|
|
66
|
+
Capybara.using_wait_time(0.1) do
|
|
67
|
+
@session.visit('/with_js')
|
|
68
|
+
@session.click_link('Click me')
|
|
69
|
+
@session.assert_selector(:css, 'a#has-been-clicked', text: 'Has been clicked', wait: 2)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
Capybara::SpecHelper.spec '#assert_no_selector' do
|
|
76
|
+
before do
|
|
77
|
+
@session.visit('/with_html')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'should be false if the given selector is on the page' do
|
|
81
|
+
expect { @session.assert_no_selector(:xpath, '//p') }.to raise_error(Capybara::ElementNotFound)
|
|
82
|
+
expect { @session.assert_no_selector(:css, 'p a#foo') }.to raise_error(Capybara::ElementNotFound)
|
|
83
|
+
expect { @session.assert_no_selector("//p[contains(.,'est')]") }.to raise_error(Capybara::ElementNotFound)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'should be true if the given selector is not on the page' do
|
|
87
|
+
@session.assert_no_selector(:xpath, '//abbr')
|
|
88
|
+
@session.assert_no_selector(:css, 'p a#doesnotexist')
|
|
89
|
+
@session.assert_no_selector("//p[contains(.,'thisstringisnotonpage')]")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'should use default selector' do
|
|
93
|
+
Capybara.default_selector = :css
|
|
94
|
+
@session.assert_no_selector('p a#doesnotexist')
|
|
95
|
+
expect { @session.assert_no_selector('p a#foo') }.to raise_error(Capybara::ElementNotFound)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'should respect scopes' do
|
|
99
|
+
@session.within "//p[@id='first']" do
|
|
100
|
+
expect { @session.assert_no_selector(".//a[@id='foo']") }.to raise_error(Capybara::ElementNotFound)
|
|
101
|
+
@session.assert_no_selector(".//a[@id='red']")
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context 'with count' do
|
|
106
|
+
it 'should be false if the content is on the page the given number of times' do
|
|
107
|
+
expect { @session.assert_no_selector('//p', count: 3) }.to raise_error(Capybara::ElementNotFound)
|
|
108
|
+
expect { @session.assert_no_selector("//p//a[@id='foo']", count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
109
|
+
expect { @session.assert_no_selector("//p[contains(.,'est')]", count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it 'should be true if the content is on the page the wrong number of times' do
|
|
113
|
+
@session.assert_no_selector('//p', count: 6)
|
|
114
|
+
@session.assert_no_selector("//p//a[@id='foo']", count: 2)
|
|
115
|
+
@session.assert_no_selector("//p[contains(.,'est')]", count: 5)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "should be true if the content isn't on the page at all" do
|
|
119
|
+
@session.assert_no_selector('//abbr', count: 2)
|
|
120
|
+
@session.assert_no_selector("//p//a[@id='doesnotexist']", count: 1)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
context 'with text' do
|
|
125
|
+
it 'should discard all matches where the given string is contained' do
|
|
126
|
+
expect { @session.assert_no_selector('//p//a', text: 'Redirect', count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
127
|
+
@session.assert_no_selector('//p', text: 'Doesnotexist')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it 'should discard all matches where the given regexp is matched' do
|
|
131
|
+
expect { @session.assert_no_selector('//p//a', text: /re[dab]i/i, count: 1) }.to raise_error(Capybara::ElementNotFound)
|
|
132
|
+
@session.assert_no_selector('//p//a', text: /Red$/)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
context 'with wait', requires: [:js] do
|
|
137
|
+
it 'should not find element if it appears after given wait duration' do
|
|
138
|
+
@session.visit('/with_js')
|
|
139
|
+
@session.click_link('Click me')
|
|
140
|
+
@session.assert_no_selector(:css, 'a#has-been-clicked', text: 'Has been clicked', wait: 0.1)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Capybara::SpecHelper.spec '#assert_matches_style', requires: [:css] do
|
|
4
|
+
it 'should not raise if the elements style contains the given properties' do
|
|
5
|
+
@session.visit('/with_html')
|
|
6
|
+
expect do
|
|
7
|
+
@session.find(:css, '#first').assert_matches_style(display: 'block')
|
|
8
|
+
end.not_to raise_error
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should raise error if the elements style doesn't contain the given properties" do
|
|
12
|
+
@session.visit('/with_html')
|
|
13
|
+
expect do
|
|
14
|
+
@session.find(:css, '#first').assert_matches_style(display: 'inline')
|
|
15
|
+
end.to raise_error(Capybara::ExpectationNotMet, 'Expected node to have styles {"display"=>"inline"}. Actual styles were {"display"=>"block"}')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'should wait for style', requires: %i[css js] do
|
|
19
|
+
@session.visit('/with_js')
|
|
20
|
+
el = @session.find(:css, '#change')
|
|
21
|
+
@session.click_link('Change size')
|
|
22
|
+
expect do
|
|
23
|
+
el.assert_matches_style({ 'font-size': '50px' }, wait: 3)
|
|
24
|
+
end.not_to raise_error
|
|
25
|
+
end
|
|
26
|
+
end
|