capybara 3.12.0 → 3.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +13 -0
  3. data/README.md +13 -3
  4. data/lib/capybara.rb +8 -4
  5. data/lib/capybara/config.rb +3 -1
  6. data/lib/capybara/driver/base.rb +2 -2
  7. data/lib/capybara/driver/node.rb +11 -2
  8. data/lib/capybara/minitest.rb +3 -3
  9. data/lib/capybara/minitest/spec.rb +10 -3
  10. data/lib/capybara/node/actions.rb +4 -0
  11. data/lib/capybara/node/base.rb +13 -5
  12. data/lib/capybara/node/document.rb +12 -0
  13. data/lib/capybara/node/element.rb +37 -0
  14. data/lib/capybara/node/finders.rb +1 -0
  15. data/lib/capybara/node/matchers.rb +19 -4
  16. data/lib/capybara/node/simple.rb +7 -2
  17. data/lib/capybara/queries/selector_query.rb +93 -9
  18. data/lib/capybara/rspec/matchers.rb +11 -3
  19. data/lib/capybara/rspec/matchers/become_closed.rb +1 -1
  20. data/lib/capybara/rspec/matchers/match_style.rb +38 -0
  21. data/lib/capybara/selector.rb +30 -30
  22. data/lib/capybara/selector/selector.rb +47 -3
  23. data/lib/capybara/selenium/driver.rb +12 -11
  24. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +3 -3
  25. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +2 -2
  26. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +13 -0
  27. data/lib/capybara/selenium/extensions/find.rb +81 -0
  28. data/lib/capybara/selenium/extensions/scroll.rb +78 -0
  29. data/lib/capybara/selenium/node.rb +52 -28
  30. data/lib/capybara/session.rb +13 -1
  31. data/lib/capybara/spec/public/test.js +1 -0
  32. data/lib/capybara/spec/session/assert_style_spec.rb +4 -4
  33. data/lib/capybara/spec/session/attach_file_spec.rb +6 -6
  34. data/lib/capybara/spec/session/click_button_spec.rb +1 -1
  35. data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -0
  36. data/lib/capybara/spec/session/execute_script_spec.rb +1 -0
  37. data/lib/capybara/spec/session/fill_in_spec.rb +7 -1
  38. data/lib/capybara/spec/session/find_field_spec.rb +1 -1
  39. data/lib/capybara/spec/session/find_spec.rb +11 -0
  40. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +0 -1
  41. data/lib/capybara/spec/session/has_css_spec.rb +32 -0
  42. data/lib/capybara/spec/session/has_select_spec.rb +2 -2
  43. data/lib/capybara/spec/session/has_selector_spec.rb +7 -0
  44. data/lib/capybara/spec/session/has_text_spec.rb +1 -1
  45. data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
  46. data/lib/capybara/spec/session/scroll_spec.rb +117 -0
  47. data/lib/capybara/spec/session/select_spec.rb +5 -0
  48. data/lib/capybara/spec/spec_helper.rb +1 -0
  49. data/lib/capybara/spec/views/obscured.erb +1 -1
  50. data/lib/capybara/spec/views/scroll.erb +20 -0
  51. data/lib/capybara/spec/views/with_html.erb +1 -1
  52. data/lib/capybara/version.rb +1 -1
  53. data/lib/capybara/window.rb +1 -1
  54. data/spec/basic_node_spec.rb +11 -0
  55. data/spec/dsl_spec.rb +1 -1
  56. data/spec/minitest_spec.rb +2 -2
  57. data/spec/minitest_spec_spec.rb +1 -1
  58. data/spec/rack_test_spec.rb +1 -0
  59. data/spec/result_spec.rb +2 -2
  60. data/spec/selector_spec.rb +11 -1
  61. data/spec/selenium_spec_firefox.rb +1 -1
  62. data/spec/selenium_spec_ie.rb +70 -9
  63. data/spec/session_spec.rb +9 -0
  64. data/spec/shared_selenium_session.rb +4 -3
  65. data/spec/spec_helper.rb +2 -0
  66. metadata +38 -6
  67. data/lib/capybara/rspec/matchers/have_style.rb +0 -23
  68. data/lib/capybara/spec/session/has_style_spec.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b3b4d3a612269d9ee165e7ed94e1e62f91c6fd85bcc5c5ae614c25d0c22bd32
4
- data.tar.gz: a2bdfa0c2398789bd15d791e3b2d0d03d9c3371033e4f4e4d21e302db845c93f
3
+ metadata.gz: da79991ce86301cce84e97c31e9c46424309edfaaef6c1f52316d78408673340
4
+ data.tar.gz: 0dbf02750a107ebc011c9899a60e5958099444f897cca384607919b58554dc9b
5
5
  SHA512:
6
- metadata.gz: f4815632f5bc14c932e9b5181d68584ac3088f11241e8ee3c19f3ee0a27190f8ad1544b88a532f901eaf79f9ae3c2f721dfca1d2d6d20d098a40438042b9f64a
7
- data.tar.gz: eb2765462cdbdda76a4ca5d100b93688029d1ca727c00579c5e9e5d77f26fc4a0fe64bbe3616bb3f89b34e730c337e242b319b2ea606b5287a780f8219ee5b08
6
+ metadata.gz: 3718591ef61c25cadb6de5048b73095340b2fa983d0f978e016ec3da1348ea88bcac5797e717b2c8053e2804b7b94aa27b46e3b57ce40fcdfa33cf70fca43d52
7
+ data.tar.gz: 5cf850913d7c0624002f969bfc3c87661a30b475b9a35decb2d607a7be82456f406f1c3490a803d30cd3f573dccdece7ad66ef8d46be36a347476af01f9ce7b8
data/History.md CHANGED
@@ -1,3 +1,16 @@
1
+ # Version 3.13.0
2
+ Release date: 2019-01-23
3
+
4
+ ### Added
5
+
6
+ * Session#quit added
7
+ * #scroll_to added to allow scrolling page/elements to specified locations
8
+ * Speed optimizations around multiple element location and path generation when using the Selenium driver
9
+ * Support for locator type checking in custom selectors
10
+ * Allow configuration of gumbo use - defaults to off
11
+ * `assert_style`/`has_style`/`have_style` depreacted in favor of `assert_matches_style`/`matches_styles?`/`match_style`
12
+ * :style filter added to selectors
13
+
1
14
  # Version 3.12.0
2
15
  Release date: 2018-11-28
3
16
 
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jnicklas/capybara?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
7
7
  [![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=capybara&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score.html?dependency-name=capybara&package-manager=bundler&version-scheme=semver)
8
8
 
9
- **Note** You are viewing the README for the 3.12.x version of Capybara.
9
+ **Note** You are viewing the README for the version 3.13.x of Capybara.
10
10
 
11
11
  Capybara helps you test web applications by simulating how a real user would
12
12
  interact with your app. It is agnostic about the driver running your tests and
@@ -35,6 +35,7 @@ GitHub): http://groups.google.com/group/ruby-capybara
35
35
  - [Selecting the Driver](#selecting-the-driver)
36
36
  - [RackTest](#racktest)
37
37
  - [Selenium](#selenium)
38
+ - [Apparition](#apparition)
38
39
  - [Capybara-webkit](#capybara-webkit)
39
40
  - [Poltergeist](#poltergeist)
40
41
  - [The DSL](#the-dsl)
@@ -217,7 +218,7 @@ feature "Signing in" do
217
218
  end
218
219
  ```
219
220
 
220
- `feature` is in fact just an alias for `describe ..., type:> :feature`,
221
+ `feature` is in fact just an alias for `describe ..., type: :feature`,
221
222
  `background` is an alias for `before`, `scenario` for `it`, and
222
223
  `given`/`given!` aliases for `let`/`let!`, respectively.
223
224
 
@@ -406,6 +407,15 @@ to the browsers. See the section on adding and configuring drivers.
406
407
  same transaction as your tests, causing data not to be shared between your test
407
408
  and test server, see [Transactions and database setup](#transactions-and-database-setup) below.
408
409
 
410
+ ### <a name="apparition"></a>Apparition
411
+
412
+ The [apparition driver](https://github.com/twalpole/apparition) in a new driver thatallows you to run tests using Chrome in a headless
413
+ or headed configuration. It attempts to provide backwards compatibility with the [Poltergeist driver API](https://github.com/teampoltergeist/poltergeist)
414
+ while allowing for the use of modern JS/CSS. It uses CDP to communicate with Chrome, thereby obviating the need for chromedriver.
415
+ A compatibility layer for capybara-webkit is planned, although has not yet been started. This driver is being developed by the
416
+ maintainer of Capybara and will attempt to keep up to date with new Capybara releases. It will probably be moved into the
417
+ teamcapybara repo once completely stable.
418
+
409
419
  ### <a name="capybara-webkit"></a>Capybara-webkit
410
420
 
411
421
  Note: `capybara-webkit` depends on QtWebkit which went EOL quite some time ago. There has been an attempt to revive the project but `capybara-webkit` is not yet (AFAIK) compatible with the revived version of QtWebKit (could be a good OSS project for someone) and as such is still limited to an old version of QtWebKit. This means its support for modern JS and CSS is severely limited.
@@ -428,7 +438,7 @@ Capybara.javascript_driver = :webkit
428
438
 
429
439
  ### <a name="poltergeist"></a>Poltergeist
430
440
 
431
- Note: `poltergeist` depends on PhantomJS for which active development ended quite some time ago (2.1.1). As such it is roughly equivalent to a 6-7 year old version of Safari, meaning lack of support for modern JS And CSS. If any effort to update PhantomJS succeeds in the future this situation could change.
441
+ Note: `poltergeist` depends on PhantomJS for which active development ended quite some time ago (2.1.1). As such it is roughly equivalent to a 6-7 year old version of Safari, meaning lack of support for modern JS and CSS. If any effort to update PhantomJS succeeds in the future this situation could change.
432
442
 
433
443
  [Poltergeist](https://github.com/teampoltergeist/poltergeist) is another
434
444
  headless driver which integrates Capybara with
@@ -38,6 +38,8 @@ module Capybara
38
38
  # See {Capybara.configure}
39
39
  # @!method javascript_driver
40
40
  # See {Capybara.configure}
41
+ # @!method allow_gumbo
42
+ # See {Capybara.configure}
41
43
  Config::OPTIONS.each do |method|
42
44
  def_delegators :config, method, "#{method}="
43
45
  end
@@ -86,6 +88,7 @@ module Capybara
86
88
  # [test_id = Symbol/String/nil] Optional attribute to match locator aginst with builtin selectors along with id (Default: nil)
87
89
  # [predicates_wait = Boolean] Whether Capybaras predicate matchers use waiting behavior by default (Default: true)
88
90
  # [default_normalize_ws = Boolean] Whether text predicates and matchers use normalize whitespace behaviour (Default: false)
91
+ # [allow_gumbo = Boolean] When `nokogumbo` is available, whether it will be used to parse HTML strings (Default: false)
89
92
  #
90
93
  # === DSL Options
91
94
  #
@@ -162,8 +165,8 @@ module Capybara
162
165
  # @param [Symbol] name The name of the selector to add
163
166
  # @yield A block executed in the context of the new {Capybara::Selector}
164
167
  #
165
- def add_selector(name, &block)
166
- Capybara::Selector.add(name, &block)
168
+ def add_selector(name, **options, &block)
169
+ Capybara::Selector.add(name, **options, &block)
167
170
  end
168
171
 
169
172
  ##
@@ -173,7 +176,7 @@ module Capybara
173
176
  # button style (a class) might look like this
174
177
  #
175
178
  # Capybara.modify_selector(:button) do
176
- # filter (:style, valid_values: [:primary, :secondary]) { |node, style| node[:class].split.include? "btn-#{style}" }
179
+ # filter (:btn_style, valid_values: [:primary, :secondary]) { |node, style| node[:class].split.include? "btn-#{style}" }
177
180
  # end
178
181
  #
179
182
  #
@@ -366,7 +369,7 @@ module Capybara
366
369
  # @return [Nokogiri::HTML::Document] HTML document
367
370
  #
368
371
  def HTML(html) # rubocop:disable Naming/MethodName
369
- if Nokogiri.respond_to?(:HTML5) # Nokogumbo installed
372
+ if Nokogiri.respond_to?(:HTML5) && Capybara.allow_gumbo # Nokogumbo installed and allowed for use
370
373
  Nokogiri::HTML5(html).tap do |document|
371
374
  document.xpath('//textarea').each do |textarea|
372
375
  # The Nokogumbo HTML5 parser already returns spec compliant contents
@@ -522,6 +525,7 @@ Capybara.configure do |config|
522
525
  config.test_id = nil
523
526
  config.predicates_wait = true
524
527
  config.default_normalize_ws = false
528
+ config.allow_gumbo = false
525
529
  end
526
530
 
527
531
  Capybara.register_driver :rack_test do |app|
@@ -7,12 +7,14 @@ module Capybara
7
7
  class Config
8
8
  extend Forwardable
9
9
 
10
- OPTIONS = %i[app reuse_server threadsafe default_wait_time server default_driver javascript_driver].freeze
10
+ OPTIONS = %i[app reuse_server threadsafe default_wait_time server
11
+ default_driver javascript_driver allow_gumbo].freeze
11
12
 
12
13
  attr_accessor :app
13
14
  attr_reader :reuse_server, :threadsafe
14
15
  attr_reader :session_options
15
16
  attr_writer :default_driver, :javascript_driver
17
+ attr_accessor :allow_gumbo
16
18
 
17
19
  SessionConfig::OPTIONS.each do |method|
18
20
  def_delegators :session_options, method, "#{method}="
@@ -15,11 +15,11 @@ class Capybara::Driver::Base
15
15
  raise NotImplementedError
16
16
  end
17
17
 
18
- def find_xpath(query)
18
+ def find_xpath(query, **options)
19
19
  raise NotImplementedError
20
20
  end
21
21
 
22
- def find_css(query)
22
+ def find_css(query, **options)
23
23
  raise NotImplementedError
24
24
  end
25
25
 
@@ -3,11 +3,12 @@
3
3
  module Capybara
4
4
  module Driver
5
5
  class Node
6
- attr_reader :driver, :native
6
+ attr_reader :driver, :native, :initial_cache
7
7
 
8
- def initialize(driver, native)
8
+ def initialize(driver, native, initial_cache = {})
9
9
  @driver = driver
10
10
  @native = native
11
+ @initial_cache = initial_cache
11
12
  end
12
13
 
13
14
  def all_text
@@ -68,6 +69,14 @@ module Capybara
68
69
  raise NotImplementedError
69
70
  end
70
71
 
72
+ def scroll_by(x, y)
73
+ raise NotImplementedError
74
+ end
75
+
76
+ def scroll_to(element, alignment, position = nil)
77
+ raise NotImplementedError
78
+ end
79
+
71
80
  def tag_name
72
81
  raise NotImplementedError
73
82
  end
@@ -83,10 +83,10 @@ module Capybara
83
83
 
84
84
  ## Assert element has the provided CSS styles
85
85
  #
86
- # @!method assert_style
87
- # see {Capybara::Node::Matchers#assert_style}
86
+ # @!method assert_matches_style
87
+ # see {Capybara::Node::Matchers#assert_matches_style}
88
88
 
89
- %w[selector no_selector style
89
+ %w[selector no_selector matches_style
90
90
  all_of_selectors none_of_selectors any_of_selectors
91
91
  matches_selector not_matches_selector].each do |assertion_name|
92
92
  class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
@@ -17,7 +17,7 @@ module Capybara
17
17
  end + [%w[assert_all_of_selectors must_have_all_of_selectors],
18
18
  %w[assert_none_of_selectors must_have_none_of_selectors],
19
19
  %w[assert_any_of_selectors must_have_any_of_selectors],
20
- %w[assert_style must_have_style]] +
20
+ %w[assert_matches_style must_match_style]] +
21
21
  %w[selector xpath css].flat_map do |assertion|
22
22
  [%W[assert_matches_#{assertion} must_match_#{assertion}],
23
23
  %W[refute_matches_#{assertion} wont_match_#{assertion}]]
@@ -36,6 +36,13 @@ module Capybara
36
36
  end
37
37
  # rubocop:enable Style/MultilineBlockChain
38
38
 
39
+ ##
40
+ # @deprecated
41
+ def must_have_style(*args, &block)
42
+ warn 'must_have_style is deprecated, please use must_match_style'
43
+ must_match_style(*args, &block)
44
+ end
45
+
39
46
  ##
40
47
  # Expectation that there is xpath
41
48
  #
@@ -169,8 +176,8 @@ module Capybara
169
176
  ##
170
177
  # Expectation that element has style
171
178
  #
172
- # @!method must_have_style
173
- # see {Capybara::Node::Matchers#assert_style}
179
+ # @!method must_match_style
180
+ # see {Capybara::Node::Matchers#assert_matches_style}
174
181
  end
175
182
  end
176
183
  end
@@ -195,6 +195,8 @@ module Capybara
195
195
  #
196
196
  # @return [Capybara::Node::Element] The option element selected
197
197
  def select(value = nil, from: nil, **options)
198
+ raise ArgumentError, 'The :from option does not take an element' if from.is_a? Capybara::Node::Element
199
+
198
200
  el = from ? find_select_or_datalist_input(from, options) : self
199
201
 
200
202
  if el.respond_to?(:tag_name) && (el.tag_name == 'input')
@@ -221,6 +223,8 @@ module Capybara
221
223
  #
222
224
  # @return [Capybara::Node::Element] The option element unselected
223
225
  def unselect(value = nil, from: nil, **options)
226
+ raise ArgumentError, 'The :from option does not take an element' if from.is_a? Capybara::Node::Element
227
+
224
228
  scope = from ? find(:select, from, options) : self
225
229
  scope.find(:option, value, options).unselect_option
226
230
  end
@@ -86,7 +86,7 @@ module Capybara
86
86
  raise err unless driver.wait? && catch_error?(err, errors)
87
87
  raise err if timer.expired?
88
88
 
89
- sleep(0.05)
89
+ sleep(0.01)
90
90
  reload if session_options.automatic_reload
91
91
  retry
92
92
  ensure
@@ -95,13 +95,21 @@ module Capybara
95
95
  end
96
96
 
97
97
  # @api private
98
- def find_css(css)
99
- base.find_css(css)
98
+ def find_css(css, **options)
99
+ if base.method(:find_css).arity != 1
100
+ base.find_css(css, **options)
101
+ else
102
+ base.find_css(css)
103
+ end
100
104
  end
101
105
 
102
106
  # @api private
103
- def find_xpath(xpath)
104
- base.find_xpath(xpath)
107
+ def find_xpath(xpath, **options)
108
+ if base.method(:find_xpath).arity != 1
109
+ base.find_xpath(xpath, **options)
110
+ else
111
+ base.find_xpath(xpath)
112
+ end
105
113
  end
106
114
 
107
115
  # @api private
@@ -31,6 +31,18 @@ module Capybara
31
31
  def title
32
32
  session.driver.title
33
33
  end
34
+
35
+ def execute_script(*args)
36
+ find(:xpath, '/html').execute_script(*args)
37
+ end
38
+
39
+ def evaluate_script(*args)
40
+ find(:xpath, '/html').evaluate_script(*args)
41
+ end
42
+
43
+ def scroll_to(*args)
44
+ find(:xpath, '//body').scroll_to(*args)
45
+ end
34
46
  end
35
47
  end
36
48
  end
@@ -381,6 +381,38 @@ module Capybara
381
381
  self
382
382
  end
383
383
 
384
+ ##
385
+ #
386
+ # Scroll the page or element
387
+ #
388
+ # Scroll the page or element to its top, bottom or middle
389
+ # @overload scroll_to(position, offset: [0,0])
390
+ # @param [:top, :bottom, :center, :current] position
391
+ # @param :offset
392
+ #
393
+ # Scroll the page or current element until the given element is aligned at the top, bottom, or center of it
394
+ # @overload scroll_to(element, align: :top)
395
+ # @param [Capybara::Node::Element] element The element to be scrolled into view
396
+ # @param [:top, :bottom, :center] :align Where to align the element being scrolled into view with relation to the current page/element if possible
397
+ #
398
+ # @overload scroll_to(x,y)
399
+ # @param [Integer] x Horizontal scroll offset
400
+ # @param [Integer] y Vertical scroll offset
401
+ #
402
+ # @return [Capybara::Node::Element] The element
403
+ def scroll_to(pos_or_el_or_x, y = nil, align: :top, offset: nil)
404
+ case pos_or_el_or_x
405
+ when Symbol
406
+ synchronize { base.scroll_to(nil, pos_or_el_or_x) } unless pos_or_el_or_x == :current
407
+ when Capybara::Node::Element
408
+ synchronize { base.scroll_to(pos_or_el_or_x.base, align) }
409
+ else
410
+ synchronize { base.scroll_to(nil, nil, [pos_or_el_or_x, y]) }
411
+ end
412
+ synchronize { base.scroll_by(*offset) } unless offset.nil?
413
+ self
414
+ end
415
+
384
416
  ##
385
417
  #
386
418
  # Execute the given JS in the context of the element not returning a result. This is useful for scripts that return
@@ -454,6 +486,11 @@ module Capybara
454
486
  %(Obsolete #<Capybara::Node::Element>)
455
487
  end
456
488
 
489
+ # @api private
490
+ def initial_cache
491
+ base.respond_to?(:initial_cache) ? base.initial_cache : {}
492
+ end
493
+
457
494
  STYLE_SCRIPT = <<~JS
458
495
  (function(){
459
496
  var s = window.getComputedStyle(this);
@@ -36,6 +36,7 @@ module Capybara
36
36
  # + Absence of a class can be checked by prefixing the class name with !
37
37
  # + If you need to check for existence of a class name that starts with ! then prefix with !!
38
38
  # + ```class:['a', '!b', '!!!c'] # limit to elements with class 'a' and '!c' but not class 'b'```
39
+ # @option options [String, Regexp, Hash] style Only find elements with matching style. String and Regexp will be checked against text of the elements `style` attribute, while a Hash will be compared against the elements full style
39
40
  # @option options [Boolean] exact Control whether `is` expressions in the given XPath match exactly or partially
40
41
  # @option options [Symbol] match The matching strategy to use.
41
42
  #
@@ -56,13 +56,21 @@ module Capybara
56
56
  #
57
57
  # Checks if a an element has the specified CSS styles
58
58
  #
59
- # element.has_style?( 'color' => 'rgb(0,0,255)', 'font-size' => /px/ )
59
+ # element.matches_style?( 'color' => 'rgb(0,0,255)', 'font-size' => /px/ )
60
60
  #
61
61
  # @param styles [Hash]
62
62
  # @return [Boolean] If the styles match
63
63
  #
64
+ def matches_style?(styles, **options)
65
+ make_predicate(options) { assert_matches_style(styles, options) }
66
+ end
67
+
68
+ ##
69
+ # @deprecated
70
+ #
64
71
  def has_style?(styles, **options)
65
- make_predicate(options) { assert_style(styles, options) }
72
+ warn 'DEPRECATED: has_style? is deprecated, please use matches_style?'
73
+ matches_style?(styles, **options)
66
74
  end
67
75
 
68
76
  ##
@@ -108,12 +116,12 @@ module Capybara
108
116
  #
109
117
  # Asserts that an element has the specified CSS styles
110
118
  #
111
- # element.assert_style( 'color' => 'rgb(0,0,255)', 'font-size' => /px/ )
119
+ # element.assert_matches_style( 'color' => 'rgb(0,0,255)', 'font-size' => /px/ )
112
120
  #
113
121
  # @param styles [Hash]
114
122
  # @raise [Capybara::ExpectationNotMet] If the element doesn't have the specified styles
115
123
  #
116
- def assert_style(styles, **options)
124
+ def assert_matches_style(styles, **options)
117
125
  query_args = _set_query_session_options(styles, options)
118
126
  query = Capybara::Queries::StyleQuery.new(*query_args)
119
127
  synchronize(query.wait) do
@@ -122,6 +130,13 @@ module Capybara
122
130
  true
123
131
  end
124
132
 
133
+ ##
134
+ # @deprecated
135
+ def assert_style(styles, **options)
136
+ warn 'assert_style is deprecated, please use assert_matches_style instead'
137
+ assert_matches_style(styles, **options)
138
+ end
139
+
125
140
  # Asserts that all of the provided selectors are present on the given page
126
141
  # or descendants of the current node. If options are provided, the assertion
127
142
  # will check that each locator is present with those options as well (other than :wait).
@@ -164,12 +164,12 @@ module Capybara
164
164
  end
165
165
 
166
166
  # @api private
167
- def find_css(css)
167
+ def find_css(css, **_options)
168
168
  native.css(css)
169
169
  end
170
170
 
171
171
  # @api private
172
- def find_xpath(xpath)
172
+ def find_xpath(xpath, **_options)
173
173
  native.xpath(xpath)
174
174
  end
175
175
 
@@ -178,6 +178,11 @@ module Capybara
178
178
  Capybara.session_options
179
179
  end
180
180
 
181
+ # @api private
182
+ def initial_cache
183
+ {}
184
+ end
185
+
181
186
  private
182
187
 
183
188
  def option_value(option)