Skip to content

Upgrading capybara 2 to 3

Breaking2.18.0 → 3.40.0Breaking1Platform1New24Changed7Fixed30

Fetching 74 releases from GitHub…9 / 74
BreakingUpgrade verdict

1 breaking change and a platform requirement change.

  • References to non-w3c mode in drivers/tests.
  • This version no longer works on Ruby 2.7. You need Ruby 3.0 or later.
2 items need code or config changes

Ruby requirement changed in 3.40.0: >= 1.9.3 → >= 3.0.0.

Breaking1
References to non-w3c mode in drivers/tests.
Platform1
Drops support for Ruby 2.7; Ruby 3.0 or newer is now required.

Generated by DepDelta from published Ruby source. Not mixed with prose notes.

  • removed: const Capybara.Query
  • changed: static method Capybara.add_selector(_) → static method Capybara.add_selector(_, **)
  • added: class NodeWrapper
  • added: constructor NodeWrapper(_)
  • added: method NodeWrapper.to_capybara_node()
  • added: method PauseDurationFix.encode()
  • added: module CapybaraAtoms
  • added: module PauseDurationFix
  • added: module Puma
  • added: static property TestApp.form_post_count: accessor
  • removed: class ConfigureDeprecator
  • removed: constructor ConfigureDeprecator(_)
  • removed: method Config.default_wait_time()
  • removed: method Config.server()
  • removed: method RSpecMatchers.have_button(_ = …, _ = …)
  • removed: method RSpecMatchers.have_checked_field(_ = …, _ = …)
  • removed: method RSpecMatchers.have_css(_, _ = …)
  • removed: method RSpecMatchers.have_field(_ = …, _ = …)
  • removed: method RSpecMatchers.have_link(_ = …, _ = …)
  • removed: method RSpecMatchers.have_select(_ = …, _ = …)
  • removed: method RSpecMatchers.have_table(_ = …, _ = …)
  • removed: method RSpecMatchers.have_unchecked_field(_ = …, _ = …)
  • removed: method RSpecMatchers.have_xpath(_, _ = …)
  • removed: method RSpecMatchers.match_css(_, _ = …)
  • removed: method RSpecMatchers.match_xpath(_, _ = …)
  • removed: method Selector.css(*)
  • removed: method Selector.custom_filters()
  • removed: method Selector.default_visibility(_ = …)
  • removed: method Selector.describe()
  • removed: method Selector.description(_ = …)
  • removed: method Selector.expression_filter(_, *)
  • removed: method Selector.expression_filters()
  • removed: method Selector.filter(_, *)
  • removed: method Selector.filter_set(_, _ = …)
  • removed: method Selector.label(_ = …)
  • removed: method Selector.match()
  • removed: method Selector.match?(_)
  • removed: method Selector.node_filters()
  • removed: method Selector.visible(_)
  • removed: method Selector.xpath(*)
  • removed: method SpecHelper.marionette?(_)
  • removed: method SpecHelper.rspec2?()
  • removed: module Features
  • removed: property Selector.format: reader
  • removed: property Selector.name: reader
  • removed: set Config.default_wait_time(_)
  • removed: set Config.reuse_server(_)
  • removed: set SessionConfig.exact_options(_)
  • removed: set SessionConfig.save_and_open_page_path(_)
  • removed: static method Selector.const_missing(_)
  • changed: class Selector → class Selector < SimpleDelegator
  • changed: constructor Selector(_) → constructor Selector(_, config:, format:)
  • changed: constructor Server(_, _ = …, _ = …, _ = …) → constructor Server(_, *, port: …, host: …, reportable_errors: …, extra_middleware: …)
  • changed: method Config.deprecate(_, _, _ = …) → method Config.deprecate(_, _, once: …)
  • changed: method Helpers.declension(_, _, _) → static method Helpers.declension(_, _, _)
  • changed: method Helpers.inject_asset_host(_, _ = …) → static method Helpers.inject_asset_host(_, host: …)
  • changed: method Helpers.monotonic_time() → static method Helpers.monotonic_time()
  • changed: method Helpers.normalize_whitespace(_) → static method Helpers.normalize_whitespace(_)
  • changed: method Helpers.to_regexp(_, _ = …, _ = …) → static method Helpers.to_regexp(_, exact: …, all_whitespace: …, options: …)
  • changed: method RSpecMatcherProxies.all(*) → method RSpecMatcherProxies.all(*, **)
  • changed: method RSpecMatcherProxies.within(*) → method RSpecMatcherProxies.within(*, **)
  • changed: method RSpecMatchers.become_closed(_ = …) → method RSpecMatchers.become_closed(**)
  • changed: method RSpecMatchers.have_all_of_selectors(*) → method RSpecMatchers.have_all_of_selectors(...)
  • changed: method RSpecMatchers.have_content(*) → method RSpecMatchers.have_content(_, *, **)
  • changed: method RSpecMatchers.have_current_path(_, _ = …) → method RSpecMatchers.have_current_path(_, **)
  • changed: method RSpecMatchers.have_none_of_selectors(*) → method RSpecMatchers.have_none_of_selectors(...)
  • changed: method RSpecMatchers.have_selector(*) → method RSpecMatchers.have_selector(...)
  • changed: method RSpecMatchers.have_text(*) → method RSpecMatchers.have_text(_, *, **)
  • changed: method RSpecMatchers.have_title(_, _ = …) → method RSpecMatchers.have_title(_, **)
  • changed: method RSpecMatchers.match_selector(*) → method RSpecMatchers.match_selector(...)
  • changed: method Selector.call(_, _ = …) → method Selector.call(_, **)
  • changed: method Session.accept_alert(_ = …, _ = …) → method Session.accept_alert(_ = …, **)
  • changed: method Session.accept_confirm(_ = …, _ = …) → method Session.accept_confirm(_ = …, **)
  • changed: method Session.accept_prompt(_ = …, _ = …) → method Session.accept_prompt(_ = …, **)
  • changed: method Session.dismiss_confirm(_ = …, _ = …) → method Session.dismiss_confirm(_ = …, **)
  • changed: method Session.dismiss_prompt(_ = …, _ = …) → method Session.dismiss_prompt(_ = …, **)
  • changed: method Session.open_new_window() → method Session.open_new_window(_ = …)
  • changed: method Session.save_and_open_screenshot(_ = …, _ = …) → method Session.save_and_open_screenshot(_ = …, **)
  • changed: method Session.save_screenshot(_ = …, _ = …) → method Session.save_screenshot(_ = …, **)
  • changed: method Session.switch_to_window(_ = …, _ = …) → method Session.switch_to_window(_ = …, **)
  • changed: method Session.window_opened_by(_ = …) → method Session.window_opened_by(**)
  • changed: method Session.within(*) → method Session.within(*, **)
  • changed: method Session.within_element(*) → method Session.within_element(*, **)
  • changed: method Session.within_frame(*) → method Session.within_frame(*, **)
  • changed: method SessionMatchers.assert_current_path(_, _ = …) → method SessionMatchers.assert_current_path(_, **)
  • changed: method SessionMatchers.assert_no_current_path(_, _ = …) → method SessionMatchers.assert_no_current_path(_, **)
  • changed: method SessionMatchers.has_current_path?(_, _ = …) → method SessionMatchers.has_current_path?(_, **)
  • changed: method SessionMatchers.has_no_current_path?(_, _ = …) → method SessionMatchers.has_no_current_path?(_, **)
  • changed: static method Selector.add(_) → static method Selector.add(_, **)
  • changed: static method SpecHelper.reset_threadsafe(_ = …, _ = …) → static method SpecHelper.reset_threadsafe(bool: …, session: …)
  • changed: static method SpecHelper.run_specs(_, _, _ = …) → static method SpecHelper.run_specs(_, _, **)
  • added: class RegistrationContainer
  • added: constructor RegistrationContainer()
  • added: method Config.allow_gumbo()
  • added: method RSpecMatchers.have_ancestor(...)
  • added: method RSpecMatchers.have_any_of_selectors(...)
  • added: method RSpecMatchers.have_no_content()
  • added: method RSpecMatchers.have_sibling(...)
  • added: method RSpecMatchers.have_style(_ = …, **)
  • added: method RSpecMatchers.match_style(_ = …, **)
  • added: method RegistrationContainer.[](_)
  • added: method RegistrationContainer.[]=(_, _)
  • added: method RegistrationContainer.names()
  • added: method Result.allow_reload!()
  • added: method Result.compare_count()
  • added: method Result.unfiltered_size()
  • added: method Selector.add_error(_)
  • added: method Selector.builder(_ = …)
  • added: method Selector.current_format()
  • added: method Selector.enable_aria_label()
  • added: method Selector.enable_aria_role()
  • added: method Selector.expression_for(_, _, config: …, format: …, **)
  • added: method Selector.format()
  • added: method Selector.test_id()
  • added: method Selector.with_filter_errors(_)
  • added: method Server.base_url()
  • added: method Server.using_ssl?()
  • added: method Session.active_element()
  • added: method Session.quit()
  • added: method Session.send_keys(...)
  • added: method Session.server_url()
  • added: method SpecHelper.be_an_invalid_element_error(_)
  • added: method SpecHelper.extract_content_type(_)
  • added: method SpecHelper.with_os_path_separators(_)
  • added: method Window.fullscreen()
  • added: module DSLRSpecProxyInstaller
  • added: module RSpecMatcherProxyInstaller
  • added: property Config.reuse_server: writer
  • added: property Config.server: reader
  • added: property Config.use_html5_parsing: accessor
  • added: property Selector.errors: reader
  • added: set Config.allow_gumbo(_)
  • added: set SessionConfig.test_id(_)
  • added: static method Helpers.filter_backtrace(_)
  • added: static method Helpers.timer(expire_in:)
  • added: static method Helpers.warn(_, uplevel: …)
  • added: static method Selector.[](_)
  • added: static method Selector.for(_)
  • added: module ClassMethods
  • removed: method Base.browser_initialized?()
  • removed: method Base.within_window(_)
  • changed: constructor Node(_, _) → constructor Node(_, _, _ = …)
  • changed: method Base.accept_modal(_, _ = …) → method Base.accept_modal(_, **)
  • changed: method Base.dismiss_modal(_, _ = …) → method Base.dismiss_modal(_, **)
  • changed: method Base.find_css(_) → method Base.find_css(_, **)
  • changed: method Base.find_xpath(_) → method Base.find_xpath(_, **)
  • changed: method Base.save_screenshot(_, _ = …) → method Base.save_screenshot(_, **)
  • changed: method Node.click() → method Node.click(_ = …, **)
  • changed: method Node.double_click() → method Node.double_click(_ = …, **)
  • changed: method Node.drag_to(_) → method Node.drag_to(_, **)
  • changed: method Node.right_click() → method Node.right_click(_ = …, **)
  • changed: method Node.set(_, _ = …) → method Node.set(_, **)
  • added: method Base.active_element()
  • added: method Base.frame_title()
  • added: method Base.frame_url()
  • added: method Base.fullscreen_window(_)
  • added: method Base.send_keys(*)
  • added: method Node.drop(*)
  • added: method Node.obscured?()
  • added: method Node.rect()
  • added: method Node.scroll_by(_, _)
  • added: method Node.scroll_to(_, _, _ = …)
  • added: method Node.shadow_root()
  • added: method Node.style(_)
  • added: property Node.initial_cache: reader
  • added: class Timer
  • added: constructor Timer(_)
  • added: method Timer.expired?()
  • added: method Timer.stalled?()
  • added: method Assertions.refute_ancestor()
  • added: method Assertions.refute_sibling()
  • added: method Expectations.must_have_style(...)
  • removed: method Base.parent()
  • removed: method Finders.field_labeled(_ = …, _ = …)
  • removed: method Matchers.refute_matches_selector(*)
  • removed: method Matchers.refute_selector(*)
  • changed: method Actions.attach_file(_, _, _ = …) → method Actions.attach_file(_ = …, _, make_visible: …, **)
  • changed: method Actions.check(_, _ = …) → method Actions.check(_ = …, **)
  • changed: method Actions.choose(_, _ = …) → method Actions.choose(_ = …, **)
  • changed: method Actions.click_button(_ = …, _ = …) → method Actions.click_button(_ = …, **)
  • changed: method Actions.click_link(_ = …, _ = …) → method Actions.click_link(_ = …, **)
  • changed: method Actions.click_link_or_button(_ = …, _ = …) → method Actions.click_link_or_button(_ = …, **)
  • changed: method Actions.click_on(_ = …, _ = …) → method Actions.click_on(_ = …, **)
  • changed: method Actions.fill_in(_, _ = …) → method Actions.fill_in(_ = …, with:, currently_with: …, fill_options: …, **)
  • changed: method Actions.select(_, _ = …) → method Actions.select(_ = …, from: …, **)
  • changed: method Actions.uncheck(_, _ = …) → method Actions.uncheck(_ = …, **)
  • changed: method Actions.unselect(_, _ = …) → method Actions.unselect(_ = …, from: …, **)
  • changed: method Base.find_css(_) → method Base.find_css(_, **)
  • changed: method Base.find_xpath(_) → method Base.find_xpath(_, **)
  • changed: method Base.synchronize(_ = …, _ = …) → method Base.synchronize(_ = …, errors: …)
  • changed: method Document.text(_ = …) → method Document.text(_ = …, normalize_ws: …)
  • changed: method DocumentMatchers.assert_no_title(_, _ = …) → method DocumentMatchers.assert_no_title(_, **)
  • changed: method DocumentMatchers.assert_title(_, _ = …) → method DocumentMatchers.assert_title(_, **)
  • changed: method DocumentMatchers.has_no_title?(_, _ = …) → method DocumentMatchers.has_no_title?(_, **)
  • changed: method DocumentMatchers.has_title?(_, _ = …) → method DocumentMatchers.has_title?(_, **)
  • changed: method Element.allow_reload!() → method Element.allow_reload!(_ = …)
  • changed: method Element.click() → method Element.click(*, **)
  • changed: method Element.double_click() → method Element.double_click(*, **)
  • changed: method Element.drag_to(_) → method Element.drag_to(_, **)
  • changed: method Element.right_click() → method Element.right_click(*, **)
  • changed: method Element.select_option() → method Element.select_option(wait: …)
  • changed: method Element.set(_, _ = …) → method Element.set(_, **)
  • changed: method Element.text(_ = …) → method Element.text(_ = …, normalize_ws: …)
  • changed: method Element.unselect_option() → method Element.unselect_option(wait: …)
  • changed: method Finders.all(*) → method Finders.all(*, allow_reload: …, **)
  • changed: method Finders.ancestor(*) → method Finders.ancestor(*, **)
  • changed: method Finders.find(*) → method Finders.find(*, **)
  • changed: method Finders.find_all(*) → method Finders.find_all(*, allow_reload: …, **)
  • changed: method Finders.find_button(_ = …, _ = …) → method Finders.find_button(_ = …, **)
  • changed: method Finders.find_by_id(_, _ = …) → method Finders.find_by_id(_, **)
  • changed: method Finders.find_field(_ = …, _ = …) → method Finders.find_field(_ = …, **)
  • changed: method Finders.find_link(_ = …, _ = …) → method Finders.find_link(_ = …, **)
  • changed: method Finders.first(*) → method Finders.first(*, **)
  • changed: method Finders.sibling(*) → method Finders.sibling(*, **)
  • changed: method Matchers.assert_all_of_selectors(*) → method Matchers.assert_all_of_selectors(*, **)
  • changed: method Matchers.assert_no_text(*) → method Matchers.assert_no_text(_, *, **)
  • changed: method Matchers.assert_none_of_selectors(*) → method Matchers.assert_none_of_selectors(*, **)
  • changed: method Matchers.assert_text(*) → method Matchers.assert_text(_, *, **)
  • changed: method Matchers.has_button?(_ = …, _ = …) → method Matchers.has_button?(_ = …, **)
  • changed: method Matchers.has_checked_field?(_ = …, _ = …) → method Matchers.has_checked_field?(_ = …, **)
  • changed: method Matchers.has_content?(*) → method Matchers.has_content?(*, **)
  • changed: method Matchers.has_css?(_, _ = …) → method Matchers.has_css?(_, **)
  • changed: method Matchers.has_field?(_ = …, _ = …) → method Matchers.has_field?(_ = …, **)
  • changed: method Matchers.has_link?(_ = …, _ = …) → method Matchers.has_link?(_ = …, **)
  • changed: method Matchers.has_no_button?(_ = …, _ = …) → method Matchers.has_no_button?(_ = …, **)
  • changed: method Matchers.has_no_checked_field?(_ = …, _ = …) → method Matchers.has_no_checked_field?(_ = …, **)
  • changed: method Matchers.has_no_content?(*) → method Matchers.has_no_content?(*, **)
  • changed: method Matchers.has_no_css?(_, _ = …) → method Matchers.has_no_css?(_, **)
  • changed: method Matchers.has_no_field?(_ = …, _ = …) → method Matchers.has_no_field?(_ = …, **)
  • changed: method Matchers.has_no_link?(_ = …, _ = …) → method Matchers.has_no_link?(_ = …, **)
  • changed: method Matchers.has_no_select?(_ = …, _ = …) → method Matchers.has_no_select?(_ = …, **)
  • changed: method Matchers.has_no_selector?(*) → method Matchers.has_no_selector?(*, **)
  • changed: method Matchers.has_no_table?(_ = …, _ = …) → method Matchers.has_no_table?(_ = …, **)
  • changed: method Matchers.has_no_text?(*) → method Matchers.has_no_text?(*, **)
  • changed: method Matchers.has_no_unchecked_field?(_ = …, _ = …) → method Matchers.has_no_unchecked_field?(_ = …, **)
  • changed: method Matchers.has_no_xpath?(_, _ = …) → method Matchers.has_no_xpath?(_, **)
  • changed: method Matchers.has_select?(_ = …, _ = …) → method Matchers.has_select?(_ = …, **)
  • changed: method Matchers.has_selector?(*) → method Matchers.has_selector?(*, **)
  • changed: method Matchers.has_table?(_ = …, _ = …) → method Matchers.has_table?(_ = …, **)
  • changed: method Matchers.has_text?(*) → method Matchers.has_text?(*, **)
  • changed: method Matchers.has_unchecked_field?(_ = …, _ = …) → method Matchers.has_unchecked_field?(_ = …, **)
  • changed: method Matchers.has_xpath?(_, _ = …) → method Matchers.has_xpath?(_, **)
  • changed: method Matchers.matches_css?(_, _ = …) → method Matchers.matches_css?(_, **)
  • changed: method Matchers.matches_selector?(*) → method Matchers.matches_selector?(*, **)
  • changed: method Matchers.matches_xpath?(_, _ = …) → method Matchers.matches_xpath?(_, **)
  • changed: method Matchers.not_matches_css?(_, _ = …) → method Matchers.not_matches_css?(_, **)
  • changed: method Matchers.not_matches_selector?(*) → method Matchers.not_matches_selector?(*, **)
  • changed: method Matchers.not_matches_xpath?(_, _ = …) → method Matchers.not_matches_xpath?(_, **)
  • changed: method Simple.allow_reload!() → method Simple.allow_reload!(*)
  • changed: method Simple.find_css(_) → method Simple.find_css(_, **)
  • changed: method Simple.find_xpath(_) → method Simple.find_xpath(_, **)
  • changed: method Simple.text(_ = …) → method Simple.text(_ = …, normalize_ws: …)
  • added: const Actions.CAPTURE_FILE_ELEMENT_SCRIPT
  • added: const Actions.DATALIST_OPTIONS_SCRIPT
  • added: const Actions.RESET_STYLE_SCRIPT
  • added: const Actions.UPDATE_STYLE_SCRIPT
  • added: const Element.STYLE_SCRIPT
  • added: const Simple.VISIBILITY_XPATH
  • added: const WhitespaceNormalizer.BREAKING_SPACES
  • added: const WhitespaceNormalizer.EMPTY_LINES
  • added: const WhitespaceNormalizer.LEADING_SPACES
  • added: const WhitespaceNormalizer.LEFT_TO_RIGHT_MARK
  • added: const WhitespaceNormalizer.LINE_SEPERATOR
  • added: const WhitespaceNormalizer.NON_BREAKING_SPACE
  • added: const WhitespaceNormalizer.PARAGRAPH_SEPERATOR
  • added: const WhitespaceNormalizer.REMOVED_CHARACTERS
  • added: const WhitespaceNormalizer.RIGHT_TO_LEFT_MARK
  • added: const WhitespaceNormalizer.SQUEEZED_SPACES
  • added: const WhitespaceNormalizer.TRAILING_SPACES
  • added: const WhitespaceNormalizer.ZERO_WIDTH_SPACE
  • added: method Base.to_capybara_node()
  • added: method Document.evaluate_script(*)
  • added: method Document.execute_script(*)
  • added: method Document.scroll_to(*, quirks: …, **)
  • added: method Element.drop(*)
  • added: method Element.evaluate_async_script(_, *)
  • added: method Element.evaluate_script(_, *)
  • added: method Element.execute_script(_, *)
  • added: method Element.flash()
  • added: method Element.initial_cache()
  • added: method Element.obscured?()
  • added: method Element.rect()
  • added: method Element.scroll_to(_, _ = …, align: …, offset: …)
  • added: method Element.shadow_root()
  • added: method Element.style(*)
  • added: method Matchers.assert_ancestor(*)
  • added: method Matchers.assert_any_of_selectors(*, wait: …, **)
  • added: method Matchers.assert_matches_style(_ = …, **)
  • added: method Matchers.assert_no_ancestor(*)
  • added: method Matchers.assert_no_sibling(*)
  • added: method Matchers.assert_sibling(*)
  • added: method Matchers.assert_style(_ = …, **)
  • added: method Matchers.has_ancestor?(*, **)
  • added: method Matchers.has_element?(_ = …, **)
  • added: method Matchers.has_no_ancestor?(*, **)
  • added: method Matchers.has_no_element?(_ = …, **)
  • added: method Matchers.has_no_sibling?(*, **)
  • added: method Matchers.has_sibling?(*, **)
  • added: method Matchers.has_style?(_ = …, **)
  • added: method Matchers.matches_style?(_ = …, **)
  • added: method Simple.==(_)
  • added: method Simple.initial_cache()
  • added: method Simple.multiple?()
  • added: method Simple.readonly?()
  • added: method WhitespaceNormalizer.normalize_spacing(_)
  • added: method WhitespaceNormalizer.normalize_visible_spacing(_)
  • added: module WhitespaceNormalizer
  • removed: property SelectorQuery.find: accessor
  • removed: property SelectorQuery.negative: accessor
  • changed: class AncestorQuery < MatchQuery → class AncestorQuery < Capybara::Queries::SelectorQuery
  • changed: class SiblingQuery < MatchQuery → class SiblingQuery < SelectorQuery
  • changed: constructor CurrentPathQuery(_, _ = …) → constructor CurrentPathQuery(_, **)
  • changed: constructor SelectorQuery(*) → constructor SelectorQuery(*, session_options:, enable_aria_label: …, enable_aria_role: …, test_id: …, selector_format: …, order: …, **)
  • changed: constructor TextQuery(*) → constructor TextQuery(_ = …, _, session_options:, **)
  • changed: constructor TitleQuery(_, _ = …) → constructor TitleQuery(_, **)
  • changed: method AncestorQuery.description() → method AncestorQuery.description(_ = …)
  • changed: method SelectorQuery.description() → method SelectorQuery.description(_ = …)
  • changed: method SelectorQuery.matches_filters?(_) → method SelectorQuery.matches_filters?(_, _ = …)
  • changed: method SiblingQuery.description() → method SiblingQuery.description(_ = …)
  • changed: property SelectorQuery.expression: accessor → property SelectorQuery.expression: reader
  • changed: property SelectorQuery.locator: accessor → property SelectorQuery.locator: reader
  • changed: property SelectorQuery.options: accessor → property SelectorQuery.options: reader
  • changed: property SelectorQuery.selector: accessor → property SelectorQuery.selector: reader
  • added: class ActiveElementQuery < BaseQuery
  • added: class StyleQuery < BaseQuery
  • added: const SelectorQuery.SPATIAL_KEYS
  • added: constructor ActiveElementQuery(**)
  • added: constructor StyleQuery(_, session_options:, **)
  • added: method ActiveElementQuery.resolve_for(_)
  • added: method SelectorQuery.applied_description()
  • added: method SelectorQuery.failure_message()
  • added: method SelectorQuery.negative_failure_message()
  • added: method StyleQuery.failure_message()
  • added: method StyleQuery.resolves_for?(_)
  • added: module ClassMethods
  • removed: class BecomeClosed
  • removed: class HaveAllSelectors < Matcher
  • removed: class HaveCurrentPath < Matcher
  • removed: class HaveNoSelectors < Matcher
  • removed: class HaveSelector < Matcher
  • removed: class HaveText < Matcher
  • removed: class HaveTitle < Matcher
  • removed: class MatchSelector < HaveSelector
  • removed: class Matcher
  • removed: constructor BecomeClosed(_)
  • removed: constructor HaveAllSelectors(*)
  • removed: constructor HaveCurrentPath(*)
  • removed: constructor HaveNoSelectors(*)
  • removed: constructor HaveSelector(*)
  • removed: constructor HaveText(*)
  • removed: constructor HaveTitle(*)
  • removed: method BecomeClosed.failure_message()
  • removed: method BecomeClosed.failure_message_for_should()
  • removed: method BecomeClosed.failure_message_for_should_not()
  • removed: method BecomeClosed.failure_message_when_negated()
  • removed: method BecomeClosed.matches?(_)
  • removed: method Compound.and(_)
  • removed: method Compound.and_then(_)
  • removed: method Compound.or(_)
  • removed: method HaveAllSelectors.description()
  • removed: method HaveAllSelectors.does_not_match?(_)
  • removed: method HaveAllSelectors.matches?(_)
  • removed: method HaveCurrentPath.description()
  • removed: method HaveCurrentPath.does_not_match?(_)
  • removed: method HaveCurrentPath.matches?(_)
  • removed: method HaveNoSelectors.description()
  • removed: method HaveNoSelectors.does_not_match?(_)
  • removed: method HaveNoSelectors.matches?(_)
  • removed: method HaveSelector.description()
  • removed: method HaveSelector.does_not_match?(_)
  • removed: method HaveSelector.matches?(_)
  • removed: method HaveSelector.query()
  • removed: method HaveText.description()
  • removed: method HaveText.does_not_match?(_)
  • removed: method HaveText.format(_)
  • removed: method HaveText.matches?(_)
  • removed: method HaveTitle.description()
  • removed: method HaveTitle.does_not_match?(_)
  • removed: method HaveTitle.matches?(_)
  • removed: method MatchSelector.description()
  • removed: method MatchSelector.does_not_match?(_)
  • removed: method MatchSelector.matches?(_)
  • removed: method MatchSelector.query()
  • removed: method Matcher.failure_message_for_should()
  • removed: method Matcher.failure_message_for_should_not()
  • removed: method Matcher.wrap(_)
  • removed: module Compound
  • removed: property HaveCurrentPath.current_path: reader
  • removed: property HaveText.content: reader
  • removed: property HaveText.options: reader
  • removed: property HaveText.type: reader
  • removed: property HaveTitle.title: reader
  • removed: property Matcher.failure_message: reader
  • removed: property Matcher.failure_message_when_negated: reader
  • added: method CountSugar.at_least(_)
  • added: method CountSugar.at_most(_)
  • added: method CountSugar.exactly(_)
  • added: method CountSugar.once()
  • added: method CountSugar.thrice()
  • added: method CountSugar.times()
  • added: method CountSugar.twice()
  • added: method SpatialSugar.above(_)
  • added: method SpatialSugar.below(_)
  • added: method SpatialSugar.left_of(_)
  • added: method SpatialSugar.near(_)
  • added: method SpatialSugar.right_of(_)
  • added: module CountSugar
  • added: module Matchers
  • added: module SpatialSugar
  • removed: class And < ::RSpec::Matchers::BuiltIn::Compound::And
  • removed: class CapybaraEvaluator
  • removed: class Or < ::RSpec::Matchers::BuiltIn::Compound::Or
  • removed: constructor CapybaraEvaluator(_, _, _)
  • removed: method CapybaraEvaluator.matcher_matches?(_)
  • removed: method CapybaraEvaluator.reset()
  • added: class Base
  • added: class BecomeClosed
  • added: class CountableWrappedElementMatcher < WrappedElementMatcher
  • added: class HaveAllSelectors < WrappedElementMatcher
  • added: class HaveAncestor < CountableWrappedElementMatcher
  • added: class HaveAnySelectors < WrappedElementMatcher
  • added: class HaveCurrentPath < WrappedElementMatcher
  • added: class HaveNoSelectors < WrappedElementMatcher
  • added: class HaveSelector < CountableWrappedElementMatcher
  • added: class HaveSibling < CountableWrappedElementMatcher
  • added: class HaveStyle < MatchStyle
  • added: class HaveText < CountableWrappedElementMatcher
  • added: class HaveTitle < WrappedElementMatcher
  • added: class MatchSelector < HaveSelector
  • added: class MatchStyle < WrappedElementMatcher
  • added: class NegatedMatcher
  • added: class WrappedElementMatcher < Base
  • added: constructor Base(*, **)
  • added: constructor BecomeClosed(_)
  • added: constructor HaveSelector(*, **)
  • added: constructor HaveStyle(*, **)
  • added: constructor MatchStyle(_ = …, **)
  • added: constructor NegatedMatcher(_)
  • added: method BecomeClosed.failure_message()
  • added: method BecomeClosed.failure_message_when_negated()
  • added: method BecomeClosed.matches?(_)
  • added: method Compound.and(_)
  • added: method Compound.and_then(_)
  • added: method Compound.or(_)
  • added: method HaveAllSelectors.description()
  • added: method HaveAllSelectors.does_not_match?(_)
  • added: method HaveAllSelectors.element_matches?(_)
  • added: method HaveAncestor.description()
  • added: method HaveAncestor.element_does_not_match?(_)
  • added: method HaveAncestor.element_matches?(_)
  • added: method HaveAncestor.query()
  • added: method HaveAnySelectors.description()
  • added: method HaveAnySelectors.does_not_match?(_)
  • added: method HaveAnySelectors.element_matches?(_)
  • added: method HaveCurrentPath.description()
  • added: method HaveCurrentPath.element_does_not_match?(_)
  • added: method HaveCurrentPath.element_matches?(_)
  • added: method HaveNoSelectors.description()
  • added: method HaveNoSelectors.does_not_match?(_)
  • added: method HaveNoSelectors.element_matches?(_)
  • added: method HaveSelector.description()
  • added: method HaveSelector.element_does_not_match?(_)
  • added: method HaveSelector.element_matches?(_)
  • added: method HaveSelector.query()
  • added: method HaveSibling.description()
  • added: method HaveSibling.element_does_not_match?(_)
  • added: method HaveSibling.element_matches?(_)
  • added: method HaveSibling.query()
  • added: method HaveText.description()
  • added: method HaveText.element_does_not_match?(_)
  • added: method HaveText.element_matches?(_)
  • added: method HaveText.format(_)
  • added: method HaveTitle.description()
  • added: method HaveTitle.element_does_not_match?(_)
  • added: method HaveTitle.element_matches?(_)
  • added: method MatchSelector.description()
  • added: method MatchSelector.element_does_not_match?(_)
  • added: method MatchSelector.element_matches?(_)
  • added: method MatchSelector.query()
  • added: method MatchStyle.description()
  • added: method MatchStyle.does_not_match?(_)
  • added: method MatchStyle.element_matches?(_)
  • added: method NegatedMatcher.description()
  • added: method NegatedMatcher.does_not_match?(_)
  • added: method NegatedMatcher.failure_message()
  • added: method NegatedMatcher.failure_message_when_negated()
  • added: method NegatedMatcher.matches?(_)
  • added: method WrappedElementMatcher.does_not_match?(_)
  • added: method WrappedElementMatcher.matches?(_)
  • added: module Compound
  • added: property Base.failure_message: reader
  • added: property Base.failure_message_when_negated: reader
  • added: class And < ::RSpec::Matchers::BuiltIn::Compound::And
  • added: class CapybaraEvaluator
  • added: class Or < ::RSpec::Matchers::BuiltIn::Compound::Or
  • added: constructor CapybaraEvaluator(_)
  • added: method CapybaraEvaluator.matcher_matches?(_)
  • added: method CapybaraEvaluator.reset()
  • added: method Synchronizer.match(_, _)
  • added: method Synchronizer.sync_element(_)
  • added: module Synchronizer
  • removed: method Driver.browser_initialized?()
  • removed: method Node.==(_)
  • removed: protected method Node.unnormalized_text(_ = …)
  • changed: constructor Driver(_, _ = …) → constructor Driver(_, **)
  • changed: method Browser.follow(_, _, _ = …) → method Browser.follow(_, _, **)
  • changed: method Browser.submit(_, _, _) → method Browser.submit(_, _, _, content_type: …)
  • changed: method Browser.visit(_, _ = …) → method Browser.visit(_, **)
  • changed: method Driver.delete(*) → method Driver.delete(...)
  • changed: method Driver.follow(_, _, _ = …) → method Driver.follow(_, _, **)
  • changed: method Driver.get(*) → method Driver.get(...)
  • changed: method Driver.post(*) → method Driver.post(...)
  • changed: method Driver.put(*) → method Driver.put(...)
  • changed: method Driver.visit(_, _ = …) → method Driver.visit(_, **)
  • changed: method Node.click() → method Node.click(_ = …, **)
  • changed: method Node.find_css(_) → method Node.find_css(_, **)
  • changed: method Node.find_xpath(_) → method Node.find_xpath(_, **)
  • changed: method Node.set(_) → method Node.set(_, **)
  • added: const Node.BLOCK_ELEMENTS
  • added: const Node.DISABLED_BY_FIELDSET_XPATH
  • added: const Node.OPTION_OWNER_XPATH
  • added: method Browser.build_uri(_)
  • added: method Browser.last_request()
  • added: method Browser.last_response()
  • added: method Driver.invalid_element_errors()
  • added: method Node.readonly?()
  • added: method Node.style(_)
  • added: module Errors
  • added: protected method Browser.base_href()
  • added: protected method Browser.base_relative_uri_for(_)
  • added: protected method Browser.safe_last_request()
  • added: protected method Node.checkbox_or_radio?(_ = …)
  • added: protected method Node.displayed_text(check_ancestor: …)
  • added: protected method Node.range?()
  • added: class StaleElementReferenceError < StandardError
  • added: method NilUploadedFile.append_to(_)
  • added: method NilUploadedFile.set_encoding(_)
  • removed: method FilterSet.expression_filters()
  • removed: method FilterSet.filters()
  • removed: method FilterSet.node_filters()
  • removed: property FilterSet.descriptions: reader
  • changed: method FilterSet.describe() → method FilterSet.describe(_ = …)
  • changed: method FilterSet.description(_ = …) → method FilterSet.description(node_filters: …, expression_filters: …, **)
  • changed: method FilterSet.expression_filter(_, *) → method FilterSet.expression_filter(_, *, **)
  • changed: method FilterSet.filter(_, *) → method FilterSet.filter(_, *, **)
  • added: class CSSBuilder
  • added: class Definition
  • added: class RegexpDisassembler
  • added: class XPathBuilder
  • added: constructor CSSBuilder(_)
  • added: constructor Definition(_, locator_type: …, raw_locator: …, supports_exact: …)
  • added: constructor RegexpDisassembler(_)
  • added: constructor XPathBuilder(_)
  • added: method CSSBuilder.add_attribute_conditions(**)
  • added: method Definition.css(*)
  • added: method Definition.custom_filters()
  • added: method Definition.default_format()
  • added: method Definition.default_visibility(_ = …, _ = …)
  • added: method Definition.describe_all_expression_filters(**)
  • added: method Definition.describe_expression_filters()
  • added: method Definition.describe_node_filters()
  • added: method Definition.expression_filters()
  • added: method Definition.filter_set(_, _ = …)
  • added: method Definition.label(_ = …)
  • added: method Definition.locator_filter(*, **)
  • added: method Definition.locator_types()
  • added: method Definition.match()
  • added: method Definition.match?(_)
  • added: method Definition.node_filters()
  • added: method Definition.raw_locator?()
  • added: method Definition.supports_exact?()
  • added: method Definition.visible(_ = …)
  • added: method Definition.xpath(*)
  • added: method FilterSet.descriptions()
  • added: method FilterSet.import(_, _ = …)
  • added: method FilterSet.node_filter(_, *, **)
  • added: method RegexpDisassembler.alternated_substrings()
  • added: method RegexpDisassembler.substrings()
  • added: method XPathBuilder.add_attribute_conditions(**)
  • added: property CSSBuilder.expression: reader
  • added: property Definition.expressions: reader
  • added: property Definition.name: reader
  • added: property FilterSet.expression_filters: reader
  • added: property FilterSet.node_filters: reader
  • added: property XPathBuilder.expression: reader
  • added: protected method FilterSet.expression_filter_descriptions()
  • added: protected method FilterSet.node_filter_descriptions()
  • added: protected method FilterSet.undeclared_descriptions()
  • added: static method CSS.split(_)
  • added: static method FilterSet.[](_)
  • added: class Splitter
  • added: method Splitter.split(_)
  • changed: constructor Base(_, _, _ = …) → constructor Base(_, _, _, **)
  • changed: constructor IdentityExpressionFilter() → constructor IdentityExpressionFilter(_)
  • changed: method ExpressionFilter.apply_filter(_, _) → method ExpressionFilter.apply_filter(_, _, _, _)
  • changed: method IdentityExpressionFilter.apply_filter(_, _) → method IdentityExpressionFilter.apply_filter(_, _, _, _)
  • changed: method NodeFilter.matches?(_, _) → method NodeFilter.matches?(_, _, _, _ = …)
  • added: class LocatorFilter < NodeFilter
  • added: constructor LocatorFilter(_, **)
  • added: constructor NodeFilter(_, _, _, **)
  • added: method Base.boolean?()
  • added: method Base.format()
  • added: method Base.handles_option?(_)
  • added: method Base.matcher?()
  • added: method IdentityExpressionFilter.matcher?()
  • added: method LocatorFilter.matches?(_, _, _ = …, exact:)
  • removed: method Driver.browser_initialized?()
  • removed: method Driver.chrome?()
  • removed: method Driver.find_css(_)
  • removed: method Driver.find_xpath(_)
  • removed: method Driver.firefox?()
  • removed: method Driver.marionette?()
  • removed: method Driver.within_window(_)
  • removed: method Node.==(_)
  • removed: method Node.find_css(_)
  • removed: method Node.find_xpath(_)
  • changed: constructor Driver(_, _ = …) → constructor Driver(_, **)
  • changed: method Driver.accept_modal(_, _ = …) → method Driver.accept_modal(_, **)
  • changed: method Driver.dismiss_modal(_, _ = …) → method Driver.dismiss_modal(_, **)
  • changed: method Driver.open_new_window() → method Driver.open_new_window(_ = …)
  • changed: method Driver.save_screenshot(_, _ = …) → method Driver.save_screenshot(_, **)
  • changed: method Node.click() → method Node.click(_ = …, **)
  • changed: method Node.double_click() → method Node.double_click(_ = …, **)
  • changed: method Node.drag_to(_) → method Node.drag_to(_, drop_modifiers: …, **)
  • changed: method Node.right_click() → method Node.right_click(_ = …, **)
  • changed: method Node.set(_, _ = …) → method Node.set(_, **)
  • added: class ChromeNode < Capybara::Selenium::Node
  • added: class EdgeNode < Capybara::Selenium::Node
  • added: class FirefoxNode < Capybara::Selenium::Node
  • added: class IENode < Capybara::Selenium::Node
  • added: class PersistentClient < ::Selenium::WebDriver::Remote::Http::Default
  • added: class SafariNode < Capybara::Selenium::Node
  • added: const ChromeLogs.COMMANDS
  • added: const ChromeLogs.LOG_MSG
  • added: const Node.GET_XPATH_SCRIPT
  • added: const Node.OBSCURED_OR_OFFSET_SCRIPT
  • added: const Node.RAPID_APPEND_TEXT
  • added: const SafariNode.MODIFIER_KEYS
  • added: const Scroll.SCROLL_POSITIONS
  • added: method ChromeLogs.available_log_types()
  • added: method ChromeLogs.commands(_)
  • added: method ChromeLogs.log(_)
  • added: method ChromeNode.click(*, **)
  • added: method ChromeNode.disabled?()
  • added: method ChromeNode.drop(*)
  • added: method ChromeNode.select_option()
  • added: method ChromeNode.send_keys(*)
  • added: method ChromeNode.set_file(_)
  • added: method ChromeNode.set_text(_, clear: …, **)
  • added: method ChromeNode.visible?()
  • added: method Driver.active_element()
  • added: method Driver.frame_obscured_at?(x:, y:)
  • added: method Driver.fullscreen_window(_)
  • added: method Driver.send_keys(*)
  • added: method EdgeNode.click(*, **)
  • added: method EdgeNode.disabled?()
  • added: method EdgeNode.drop(*)
  • added: method EdgeNode.select_option()
  • added: method EdgeNode.send_keys(*)
  • added: method EdgeNode.set_file(_)
  • added: method EdgeNode.set_text(_, clear: …, **)
  • added: method EdgeNode.visible?()
  • added: method Find.find_css(_, uses_visibility: …, texts: …, styles: …, position: …, **)
  • added: method Find.find_xpath(_, uses_visibility: …, styles: …, position: …, **)
  • added: method FirefoxNode.click(_ = …, **)
  • added: method FirefoxNode.disabled?()
  • added: method FirefoxNode.drop(*)
  • added: method FirefoxNode.focused?()
  • added: method FirefoxNode.hover()
  • added: method FirefoxNode.select_option()
  • added: method FirefoxNode.send_keys(*)
  • added: method FirefoxNode.set_file(_)
  • added: method FirefoxNode.visible?()
  • added: method IENode.disabled?()
  • added: method IsDisplayed.commands(_)
  • added: method Node.drop(*)
  • added: method Node.obscured?(x: …, y: …)
  • added: method Node.rect()
  • added: method Node.shadow_root()
  • added: method Node.style(_)
  • added: method PersistentClient.close()
  • added: method SafariNode.click(_ = …, **)
  • added: method SafariNode.disabled?()
  • added: method SafariNode.hover()
  • added: method SafariNode.select_option()
  • added: method SafariNode.send_keys(*)
  • added: method SafariNode.set_file(_)
  • added: method SafariNode.set_text(_, clear: …, **)
  • added: method SafariNode.unselect_option()
  • added: method SafariNode.visible_text()
  • added: method Scroll.scroll_by(_, _)
  • added: method Scroll.scroll_to(_, _, _ = …)
  • added: module ChromeLogs
  • added: module Find
  • added: module IsDisplayed
  • added: module Scroll
  • added: protected method Node.scroll_if_needed()
  • added: protected method Node.scroll_to_center()
  • added: static method Driver.load_selenium()
  • added: static method Driver.register_specialization(_, _)
  • added: static property Driver.selenium_webdriver_version: reader
  • added: static property Driver.specializations: reader
  • added: class CAPS_VERSION < Gem::Requirement.new('< 4.8.0')
  • added: method ChromeDriver.fullscreen_window(_)
  • added: method ChromeDriver.reset!()
  • added: method ChromeDriver.resize_window_to(_, _, _)
  • added: method EdgeDriver.fullscreen_window(_)
  • added: method EdgeDriver.reset!()
  • added: method EdgeDriver.resize_window_to(_, _, _)
  • added: method InternetExplorerDriver.switch_to_frame(_)
  • added: method SafariDriver.switch_to_frame(_)
  • added: method W3CFirefoxDriver.refresh()
  • added: method W3CFirefoxDriver.reset!()
  • added: method W3CFirefoxDriver.resize_window_to(_, _, _)
  • added: method W3CFirefoxDriver.switch_to_frame(_)
  • added: module ChromeDriver
  • added: module EdgeDriver
  • added: module FirefoxDriver
  • added: module InternetExplorerDriver
  • added: module SafariDriver
  • added: module W3CFirefoxDriver
  • added: set EdgeDriver.download_path(_)
  • added: static method W3CFirefoxDriver.pause_broken?(_)
  • added: class ModifierKeysStack
  • added: const Html5Drag.ATTACH_FILE
  • added: const Html5Drag.DROP_FILE
  • added: const Html5Drag.DROP_STRING
  • added: const Html5Drag.HTML5_DRAG_DROP_SCRIPT
  • added: const Html5Drag.LEGACY_DRAG_CHECK
  • added: const Html5Drag.MOUSEDOWN_TRACKER
  • added: constructor ModifierKeysStack()
  • added: method FileInputClickEmulation.click(_ = …, **)
  • added: method Html5Drag.drag_to(_, html5: …, delay: …, drop_modifiers: …)
  • added: method ModifierKeysStack.include?(_)
  • added: method ModifierKeysStack.pop()
  • added: method ModifierKeysStack.press(_)
  • added: method ModifierKeysStack.push()
  • added: module FileInputClickEmulation
  • added: module Html5Drag
  • changed: constructor Middleware(_, _) → constructor Middleware(_, _, _ = …)
  • changed: property Middleware.error: accessor → property Middleware.error: reader
  • added: class AnimationDisabler
  • added: class Checker
  • added: const AnimationDisabler.DISABLE_CSS_MARKUP_TEMPLATE
  • added: const AnimationDisabler.DISABLE_JS_MARKUP_TEMPLATE
  • added: const Checker.TRY_HTTPS_ERRORS
  • added: constructor AnimationDisabler(_)
  • added: constructor Checker(_, _)
  • added: method AnimationDisabler.call(_)
  • added: method Checker.request()
  • added: method Checker.ssl?()
  • added: method Middleware.clear_error()
  • added: method Middleware.pending_requests()
  • added: static method AnimationDisabler.selector_for(_)
  • removed: property Counter.value: reader
  • changed: method Counter.decrement() → method Counter.decrement(_)
  • changed: method Counter.increment() → method Counter.increment(_)
  • added: method Counter.positive?()
  • added: method Counter.value()
  • added: module MiniSSL
  • added: class Socket
  • added: method Socket.read_nonblock(_, *)
  • changed: class TestAppError < StandardError → class TestAppError < Exception
  • changed: class TestAppOtherError < StandardError → class TestAppOtherError < Exception
  • removed: method Renderer.where(_, _)
  • added: method DSL.join(*)
  • added: method Renderer.join(*)
  • added: module DSL