capybara 3.33.0 → 3.35.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/History.md +83 -15
- data/README.md +0 -2
- data/lib/capybara.rb +1 -1
- data/lib/capybara/config.rb +4 -6
- data/lib/capybara/driver/base.rb +4 -0
- data/lib/capybara/helpers.rb +25 -1
- data/lib/capybara/minitest.rb +2 -2
- data/lib/capybara/minitest/spec.rb +14 -11
- data/lib/capybara/node/actions.rb +1 -2
- data/lib/capybara/node/base.rb +6 -6
- data/lib/capybara/node/element.rb +1 -5
- data/lib/capybara/node/finders.rb +7 -6
- data/lib/capybara/node/matchers.rb +8 -6
- data/lib/capybara/node/simple.rb +5 -1
- data/lib/capybara/queries/ancestor_query.rb +1 -1
- data/lib/capybara/queries/current_path_query.rb +14 -4
- data/lib/capybara/queries/selector_query.rb +32 -17
- data/lib/capybara/queries/sibling_query.rb +1 -1
- data/lib/capybara/queries/text_query.rb +2 -2
- data/lib/capybara/rack_test/browser.rb +7 -3
- data/lib/capybara/rack_test/driver.rb +1 -0
- data/lib/capybara/rack_test/form.rb +1 -1
- data/lib/capybara/rack_test/node.rb +1 -1
- data/lib/capybara/registration_container.rb +3 -3
- data/lib/capybara/registrations/drivers.rb +18 -12
- data/lib/capybara/registrations/patches/puma_ssl.rb +3 -1
- data/lib/capybara/registrations/servers.rb +2 -1
- data/lib/capybara/result.rb +6 -10
- data/lib/capybara/rspec.rb +2 -0
- data/lib/capybara/rspec/matcher_proxies.rb +1 -1
- data/lib/capybara/rspec/matchers.rb +7 -6
- data/lib/capybara/rspec/matchers/have_current_path.rb +2 -2
- data/lib/capybara/rspec/matchers/match_style.rb +5 -0
- data/lib/capybara/selector.rb +2 -2
- data/lib/capybara/selector/builders/css_builder.rb +1 -1
- data/lib/capybara/selector/builders/xpath_builder.rb +3 -1
- data/lib/capybara/selector/definition.rb +6 -5
- data/lib/capybara/selector/definition/button.rb +26 -15
- data/lib/capybara/selector/definition/css.rb +1 -1
- data/lib/capybara/selector/definition/datalist_input.rb +1 -1
- data/lib/capybara/selector/definition/element.rb +2 -1
- data/lib/capybara/selector/definition/label.rb +1 -1
- data/lib/capybara/selector/definition/select.rb +1 -1
- data/lib/capybara/selector/definition/table_row.rb +2 -2
- data/lib/capybara/selector/filter_set.rb +2 -2
- data/lib/capybara/selector/selector.rb +5 -1
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +1 -1
- data/lib/capybara/selenium/driver.rb +47 -5
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +3 -3
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +3 -3
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +1 -1
- data/lib/capybara/selenium/extensions/find.rb +4 -4
- data/lib/capybara/selenium/extensions/scroll.rb +8 -10
- data/lib/capybara/selenium/logger_suppressor.rb +8 -2
- data/lib/capybara/selenium/node.rb +6 -3
- data/lib/capybara/selenium/nodes/chrome_node.rb +23 -5
- data/lib/capybara/selenium/nodes/firefox_node.rb +6 -1
- data/lib/capybara/selenium/nodes/safari_node.rb +1 -1
- data/lib/capybara/selenium/patches/atoms.rb +4 -4
- data/lib/capybara/selenium/patches/logs.rb +4 -4
- data/lib/capybara/server/animation_disabler.rb +8 -3
- data/lib/capybara/server/middleware.rb +4 -2
- data/lib/capybara/session.rb +20 -11
- data/lib/capybara/session/matchers.rb +11 -11
- data/lib/capybara/spec/public/test.js +6 -1
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -1
- data/lib/capybara/spec/session/check_spec.rb +6 -0
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +9 -0
- data/lib/capybara/spec/session/current_url_spec.rb +11 -1
- data/lib/capybara/spec/session/has_button_spec.rb +35 -0
- data/lib/capybara/spec/session/has_css_spec.rb +2 -1
- data/lib/capybara/spec/session/has_current_path_spec.rb +13 -0
- data/lib/capybara/spec/session/has_text_spec.rb +0 -11
- data/lib/capybara/spec/session/html_spec.rb +1 -1
- data/lib/capybara/spec/session/matches_style_spec.rb +2 -2
- data/lib/capybara/spec/session/node_spec.rb +23 -3
- data/lib/capybara/spec/session/refresh_spec.rb +2 -1
- data/lib/capybara/spec/session/save_page_spec.rb +4 -4
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +1 -1
- data/lib/capybara/spec/session/window/window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/windows_spec.rb +1 -1
- data/lib/capybara/spec/spec_helper.rb +11 -12
- data/lib/capybara/spec/test_app.rb +9 -3
- data/lib/capybara/spec/views/form.erb +23 -1
- data/lib/capybara/spec/views/with_animation.erb +8 -0
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +2 -0
- data/lib/capybara/spec/views/with_sortable_js.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +3 -7
- data/spec/basic_node_spec.rb +9 -8
- data/spec/dsl_spec.rb +1 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +1 -1
- data/spec/minitest_spec.rb +2 -1
- data/spec/rack_test_spec.rb +15 -5
- data/spec/rspec/features_spec.rb +3 -1
- data/spec/rspec/scenarios_spec.rb +4 -0
- data/spec/rspec/shared_spec_matchers.rb +2 -2
- data/spec/rspec_spec.rb +4 -0
- data/spec/selector_spec.rb +16 -1
- data/spec/selenium_spec_chrome.rb +39 -18
- data/spec/selenium_spec_chrome_remote.rb +5 -1
- data/spec/selenium_spec_firefox.rb +15 -13
- data/spec/server_spec.rb +19 -0
- data/spec/shared_selenium_session.rb +74 -1
- metadata +47 -13
- data/lib/capybara/spec/session/source_spec.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 516861530f59d3d9713daba7379838146575b920f787ac2c3f5c4bbffc6bf44d
|
|
4
|
+
data.tar.gz: 85b3fb81bf05e43122c2eef320a7a2dbd500033723ebbc04ebc414b0a42d0881
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7f745dac92b73afa56f43a2a509052c7fc5d1efa458863b0b3f05507c664847d6f67720a2c2a680e21126888e63a6eaf6a0e9be7d1a4df9d6aaa9ec61d832e29
|
|
7
|
+
data.tar.gz: 53532156dd31631879a0a8fda93126f259a5cd856a6cec82e6283f9f96e1cc2d98b788e4414ffee5756024d14819450d358529aa90d4c948618e82b878342ebd
|
data/History.md
CHANGED
|
@@ -1,3 +1,70 @@
|
|
|
1
|
+
# Version 3.35.3
|
|
2
|
+
Release date: 2021-01-29
|
|
3
|
+
|
|
4
|
+
### Fixed
|
|
5
|
+
* Just a release to have the correct dates in the History.md in released gem
|
|
6
|
+
|
|
7
|
+
# Version 3.35.2
|
|
8
|
+
Release date: 2021-01-29
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
* Selenium deprecation suppressor with Selenium 3.x
|
|
13
|
+
|
|
14
|
+
# Version 3.35.1
|
|
15
|
+
Release date: 2021-01-26
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
* Default chrome driver registrations use chrome - Issue #2442 [Yuriy Alekseyev]
|
|
20
|
+
* 'Capybara.test_id' usage with the :button selector - Issue #2443
|
|
21
|
+
|
|
22
|
+
# Version 3.35.0
|
|
23
|
+
Release date: 2021-01-25
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
* Support Regexp matching for individual class names in :class filter passed an Array
|
|
28
|
+
* Animation disabler now supports JQuery animation disabling when JQuery loaded from body [Chien-Wei Huang]
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
* :button selector type use with `enable_aria_role` [Sean Doyle]
|
|
33
|
+
* <label> elements don't associate with aria-role buttons
|
|
34
|
+
* Ignore Selenium::WebDriver::Error::InvalidSessionIdError when quitting driver [Robin Daugherty]
|
|
35
|
+
* Firefox: Don't click input when sending keys if already focused
|
|
36
|
+
* Miscellaneous issues with selenium-webdriver 4.0.0.alphas
|
|
37
|
+
* Nil return error in node details optimizations
|
|
38
|
+
* Animation disabler now inserts XHTML compliant content [Dale Morgan]
|
|
39
|
+
|
|
40
|
+
# Version 3.34.0
|
|
41
|
+
Release date: 2020-11-26
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
* Ability to fill in with emoji when using Chrome with selenium driver (Firefox already worked)
|
|
46
|
+
* Current path assertions/expectations accept optional filter block
|
|
47
|
+
* Animation disabler now specifies `scroll-behavior: auto;` [Nathan Broadbent]
|
|
48
|
+
* :button selector can now find elements by label text [Sean Doyle]
|
|
49
|
+
* `Session#send_keys` to send keys to the current element with focus in drivers that support the
|
|
50
|
+
concept of a current element [Sean Doyle]
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
* Text query validates the type parameter to prevent undefined behavior
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
* racktest driver better handles fragments and redirection to urls that include fragments
|
|
59
|
+
* Don't error when attempting to get XPath location of a shadow element
|
|
60
|
+
* Missing `readonly?` added to Node::Simple
|
|
61
|
+
* Selenium version detection when loaded via alternate method [Joel Hawksley]
|
|
62
|
+
* Connection count issue if REQUEST_URI value changed by app [Blake Williams]
|
|
63
|
+
* Maintain URI fragment when redirecting in rack-test driver
|
|
64
|
+
* Text query error message [Wojciech Wnętrzak]
|
|
65
|
+
* Checking a checkbox/radio button with `allow_label_click` now works if there are multiple labels (Issue #2421)
|
|
66
|
+
* `drop` with `Pathname` (Issue #2424)[Máximo Mussini]
|
|
67
|
+
|
|
1
68
|
# Version 3.33.0
|
|
2
69
|
Release date: 2020-06-21
|
|
3
70
|
|
|
@@ -7,11 +74,12 @@ Release date: 2020-06-21
|
|
|
7
74
|
* Support for aria-role button when enabled [Seiei Miyagi]
|
|
8
75
|
* Support for aria-role link when enabled
|
|
9
76
|
* Support for `validation_message` filter with :field and :fillable_field selectors
|
|
77
|
+
* Deprecation warnings show source location [Koichi ITO]
|
|
10
78
|
|
|
11
79
|
### Changed
|
|
12
80
|
|
|
13
81
|
* Ruby 2.5.0+ is now required
|
|
14
|
-
* Deprecated direct
|
|
82
|
+
* Deprecated direct manipulation of the driver and server registries
|
|
15
83
|
|
|
16
84
|
### Fixed
|
|
17
85
|
|
|
@@ -41,7 +109,7 @@ Release date: 2020-03-29
|
|
|
41
109
|
### Added
|
|
42
110
|
|
|
43
111
|
* Support `delay` setting on click with Selenium
|
|
44
|
-
* Implement rapid set for values longer
|
|
112
|
+
* Implement rapid set for values longer than 30 characters in text fields with Selenium
|
|
45
113
|
|
|
46
114
|
### Fixed
|
|
47
115
|
|
|
@@ -162,8 +230,8 @@ Release date: 2019-06-27
|
|
|
162
230
|
|
|
163
231
|
### Fixed
|
|
164
232
|
|
|
165
|
-
*
|
|
166
|
-
both source and target are
|
|
233
|
+
* Work around issue with chromedriver 76/77 in W3C mode losing mouse state during legacy drag. Only fixed if
|
|
234
|
+
both source and target are simultaneously inside the viewport - Issue #2223
|
|
167
235
|
* Negative ancestor expectations/predicates were incorrectly checking siblings rather than ancestors
|
|
168
236
|
|
|
169
237
|
# Version 3.24.0
|
|
@@ -442,7 +510,7 @@ Release date: 2018-10-23
|
|
|
442
510
|
|
|
443
511
|
### Fixed
|
|
444
512
|
|
|
445
|
-
* Selector `css` expression
|
|
513
|
+
* Selector `css` expression definition declared filters now work again
|
|
446
514
|
* Cleaned up warnings [Yuji Yaginuma]
|
|
447
515
|
* Workaround installation of rspec matcher proxies under jruby by reverting to the old solution not using prepend, so jruby bugs are not hit - Issue #2115
|
|
448
516
|
|
|
@@ -559,7 +627,7 @@ Release date: 2018-07-19
|
|
|
559
627
|
|
|
560
628
|
### Fixed
|
|
561
629
|
|
|
562
|
-
* Make selenium driver :backspace clear
|
|
630
|
+
* Make selenium driver :backspace clear strategy work even if caret location is in middle of field content [Champier Cyril]
|
|
563
631
|
* Selenium issue with fieldset nested in disabled fieldset not being considered disabled
|
|
564
632
|
* `Session#evaluate_script` and `Element#evaluate_script` now strip leading/trailing whitespace from scripts [Ian Lesperance]
|
|
565
633
|
|
|
@@ -658,7 +726,7 @@ Release date: 2018-04-13
|
|
|
658
726
|
### Fixes
|
|
659
727
|
|
|
660
728
|
* Fix expression filter descriptions in some selector failure messages
|
|
661
|
-
* Fix compounding of negated
|
|
729
|
+
* Fix compounding of negated matchers - Issue #2010
|
|
662
730
|
|
|
663
731
|
# Version 3.0.1
|
|
664
732
|
Release date: 2018-04-06
|
|
@@ -932,7 +1000,7 @@ Release date: 2016-12-05
|
|
|
932
1000
|
* Options for clearing session/local storage on reset added to the Selenium driver
|
|
933
1001
|
* Window size changes wait for the size to stabilize
|
|
934
1002
|
* Defined return value for most actions
|
|
935
|
-
* Ignore specific error when
|
|
1003
|
+
* Ignore specific error when quitting selenium driver instance - Issue #1773 [Dylan Reichstadt, Thomas Walpole]
|
|
936
1004
|
* Warn on selenium unknown errors rather than raising when quitting driver [Adam Pohorecki, Thomas Walpole]
|
|
937
1005
|
* Capybara::Result#each now returns an `Enumerator` when called without a block - Issue #1777 [Thomas Walpole]
|
|
938
1006
|
|
|
@@ -994,7 +1062,7 @@ Release date: 2016-09-19
|
|
|
994
1062
|
|
|
995
1063
|
### Fixed
|
|
996
1064
|
|
|
997
|
-
* Issue with rack-test driver and
|
|
1065
|
+
* Issue with rack-test driver and obsolete mime-types when using `#attach_file` - Issue #1756 [Thomas Walpole]
|
|
998
1066
|
|
|
999
1067
|
### Added
|
|
1000
1068
|
|
|
@@ -1061,7 +1129,7 @@ Release date: 2016-04-07
|
|
|
1061
1129
|
|
|
1062
1130
|
### Added
|
|
1063
1131
|
|
|
1064
|
-
* Capybara now waits for requests to Capybaras server to complete while
|
|
1132
|
+
* Capybara now waits for requests to Capybaras server to complete while resetting the session [John Hawthorn, Thomas Walpole]
|
|
1065
1133
|
* Capybara.reuse_server option to allow disabling of sharing server instance between sessions [Thomas Walpole]
|
|
1066
1134
|
* :multiple filter added to relevant selectors [Thomas Walpole]
|
|
1067
1135
|
* Provided server registrations for :webrick and :puma. Capybara.server = :puma for testing with Rails 5 [Thomas Walpole]
|
|
@@ -1075,7 +1143,7 @@ Release date: 2016-04-07
|
|
|
1075
1143
|
|
|
1076
1144
|
# Version 2.6.2
|
|
1077
1145
|
|
|
1078
|
-
|
|
1146
|
+
Release date: 2016-01-27
|
|
1079
1147
|
|
|
1080
1148
|
### Fixed
|
|
1081
1149
|
|
|
@@ -1621,8 +1689,8 @@ Release date: 2011-06-14
|
|
|
1621
1689
|
* Rack::Test driver honours maxlength on input fields [Guilherme Carvalho]
|
|
1622
1690
|
* Rack::Test now works as expected with domains and subdomains [Jonas Nicklas]
|
|
1623
1691
|
* Session is reset more thoroughly between tests. [Jonas Nicklas]
|
|
1624
|
-
* Raise error when uploading non-
|
|
1625
|
-
* Rack
|
|
1692
|
+
* Raise error when uploading non-existent file [Jonas Nicklas]
|
|
1693
|
+
* Rack response body should respond to #each [Piotr Sarnacki]
|
|
1626
1694
|
* Deprecation warnings with selenium webdriver 0.2.0 [Aaron Gibraltar]
|
|
1627
1695
|
* Selenium Chrome no longer YELLS tagname [Carl Jackson & David W. Frank]
|
|
1628
1696
|
* Capybara no longer strips encoding before sending to Rack [Jonas Nicklas]
|
|
@@ -1764,7 +1832,7 @@ Release date: 2010-05-12
|
|
|
1764
1832
|
|
|
1765
1833
|
Release date: 2010-04-09
|
|
1766
1834
|
|
|
1767
|
-
This is a drop in compatible
|
|
1835
|
+
This is a drop in compatible maintenance release. It's mostly
|
|
1768
1836
|
important for driver authors.
|
|
1769
1837
|
|
|
1770
1838
|
### Added
|
|
@@ -1783,7 +1851,7 @@ important for driver authors.
|
|
|
1783
1851
|
|
|
1784
1852
|
Release date: 2010-03-22
|
|
1785
1853
|
|
|
1786
|
-
This is a
|
|
1854
|
+
This is a maintenance release with minor bug fixes, should be
|
|
1787
1855
|
drop in compatible.
|
|
1788
1856
|
|
|
1789
1857
|
### Added
|
data/README.md
CHANGED
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
[](https://gitter.im/jnicklas/capybara?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
8
8
|
[](https://dependabot.com/compatibility-score.html?dependency-name=capybara&package-manager=bundler&version-scheme=semver)
|
|
9
9
|
|
|
10
|
-
**Note** You are viewing the README for the 3.33.x release of Capybara.
|
|
11
|
-
|
|
12
10
|
Capybara helps you test web applications by simulating how a real user would
|
|
13
11
|
interact with your app. It is agnostic about the driver running your tests and
|
|
14
12
|
comes with Rack::Test and Selenium support built in. WebKit is supported
|
data/lib/capybara.rb
CHANGED
|
@@ -484,7 +484,7 @@ module Capybara
|
|
|
484
484
|
require 'capybara/rack_test/node'
|
|
485
485
|
require 'capybara/rack_test/form'
|
|
486
486
|
require 'capybara/rack_test/browser'
|
|
487
|
-
require 'capybara/rack_test/css_handlers
|
|
487
|
+
require 'capybara/rack_test/css_handlers'
|
|
488
488
|
|
|
489
489
|
require 'capybara/selenium/node'
|
|
490
490
|
require 'capybara/selenium/driver'
|
data/lib/capybara/config.rb
CHANGED
|
@@ -9,11 +9,9 @@ module Capybara
|
|
|
9
9
|
|
|
10
10
|
OPTIONS = %i[app reuse_server threadsafe server default_driver javascript_driver allow_gumbo].freeze
|
|
11
11
|
|
|
12
|
-
attr_accessor :app
|
|
13
|
-
attr_reader :reuse_server, :threadsafe
|
|
14
|
-
attr_reader :session_options
|
|
12
|
+
attr_accessor :app, :allow_gumbo
|
|
13
|
+
attr_reader :reuse_server, :threadsafe, :session_options
|
|
15
14
|
attr_writer :default_driver, :javascript_driver
|
|
16
|
-
attr_accessor :allow_gumbo
|
|
17
15
|
|
|
18
16
|
SessionConfig::OPTIONS.each do |method|
|
|
19
17
|
def_delegators :session_options, method, "#{method}="
|
|
@@ -83,10 +81,10 @@ module Capybara
|
|
|
83
81
|
@javascript_driver || :selenium
|
|
84
82
|
end
|
|
85
83
|
|
|
86
|
-
def deprecate(method, alternate_method, once
|
|
84
|
+
def deprecate(method, alternate_method, once: false)
|
|
87
85
|
@deprecation_notified ||= {}
|
|
88
86
|
unless once && @deprecation_notified[method]
|
|
89
|
-
warn "DEPRECATED: ##{method} is deprecated, please use ##{alternate_method} instead"
|
|
87
|
+
Capybara::Helpers.warn "DEPRECATED: ##{method} is deprecated, please use ##{alternate_method} instead: #{Capybara::Helpers.filter_backtrace(caller)}"
|
|
90
88
|
end
|
|
91
89
|
@deprecation_notified[method] = true
|
|
92
90
|
end
|
data/lib/capybara/driver/base.rb
CHANGED
|
@@ -59,6 +59,10 @@ class Capybara::Driver::Base
|
|
|
59
59
|
raise Capybara::NotSupportedByDriverError, 'Capybara::Driver::Base#status_code'
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
+
def send_keys(*)
|
|
63
|
+
raise Capybara::NotSupportedByDriverError, 'Capybara::Driver::Base#send_keys'
|
|
64
|
+
end
|
|
65
|
+
|
|
62
66
|
##
|
|
63
67
|
#
|
|
64
68
|
# @param frame [Capybara::Node::Element, :parent, :top] The iframe element to switch to
|
data/lib/capybara/helpers.rb
CHANGED
|
@@ -15,7 +15,7 @@ module Capybara
|
|
|
15
15
|
# @return [String] Normalized text
|
|
16
16
|
#
|
|
17
17
|
def normalize_whitespace(text)
|
|
18
|
-
warn 'DEPRECATED: Capybara::Helpers::normalize_whitespace is deprecated, please update your driver'
|
|
18
|
+
Capybara::Helpers.warn 'DEPRECATED: Capybara::Helpers::normalize_whitespace is deprecated, please update your driver'
|
|
19
19
|
text.to_s.gsub(/[[:space:]]+/, ' ').strip
|
|
20
20
|
end
|
|
21
21
|
|
|
@@ -70,6 +70,30 @@ module Capybara
|
|
|
70
70
|
count == 1 ? singular : plural
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
+
def filter_backtrace(trace)
|
|
74
|
+
return 'No backtrace' unless trace
|
|
75
|
+
|
|
76
|
+
filter = %r{lib/capybara/|lib/rspec/|lib/minitest/}
|
|
77
|
+
new_trace = trace.take_while { |line| line !~ filter }
|
|
78
|
+
new_trace = trace.reject { |line| line =~ filter } if new_trace.empty?
|
|
79
|
+
new_trace = trace.dup if new_trace.empty?
|
|
80
|
+
|
|
81
|
+
new_trace.first.split(/:in /, 2).first
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def warn(message, uplevel: 1)
|
|
85
|
+
return Kernel.warn(message, uplevel: uplevel) if RUBY_VERSION >= '2.6'
|
|
86
|
+
|
|
87
|
+
# TODO: Remove when we drop support for Ruby 2.5
|
|
88
|
+
# Workaround for emulating `warn '...', uplevel: n` in Ruby 2.5 or lower.
|
|
89
|
+
if (match = /^(?<file>.+?):(?<line>\d+)(?::in `.*')?/.match(caller[uplevel]))
|
|
90
|
+
location = [match[:file], match[:line]].join(':')
|
|
91
|
+
Kernel.warn "#{location}: #{message}"
|
|
92
|
+
else
|
|
93
|
+
Kernel.warn message
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
73
97
|
if defined?(Process::CLOCK_MONOTONIC)
|
|
74
98
|
def monotonic_time; Process.clock_gettime Process::CLOCK_MONOTONIC; end
|
|
75
99
|
else
|
data/lib/capybara/minitest.rb
CHANGED
|
@@ -50,10 +50,10 @@ module Capybara
|
|
|
50
50
|
|
|
51
51
|
%w[text no_text title no_title current_path no_current_path].each do |assertion_name|
|
|
52
52
|
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
|
53
|
-
def assert_#{assertion_name}(*args, **kwargs)
|
|
53
|
+
def assert_#{assertion_name}(*args, **kwargs, &optional_filter_block)
|
|
54
54
|
self.assertions +=1
|
|
55
55
|
subject, args = determine_subject(args)
|
|
56
|
-
subject.assert_#{assertion_name}(*args, **kwargs)
|
|
56
|
+
subject.assert_#{assertion_name}(*args, **kwargs, &optional_filter_block)
|
|
57
57
|
rescue Capybara::ExpectationNotMet => e
|
|
58
58
|
raise ::Minitest::Assertion, e.message
|
|
59
59
|
end
|
|
@@ -209,13 +209,15 @@ module Capybara
|
|
|
209
209
|
# @!method wont_have_xpath
|
|
210
210
|
# See {Capybara::Node::Matchers#has_no_xpath?}
|
|
211
211
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
212
|
+
# This currently doesn't work for Ruby 2.8 due to Minitest not forwarding keyword args separately
|
|
213
|
+
# %w[text content title current_path].each do |assertion|
|
|
214
|
+
# infect_an_assertion "assert_#{assertion}", "must_have_#{assertion}", :reverse
|
|
215
|
+
# infect_an_assertion "refute_#{assertion}", "wont_have_#{assertion}", :reverse
|
|
216
|
+
# end
|
|
216
217
|
|
|
217
218
|
# rubocop:disable Style/MultilineBlockChain
|
|
218
|
-
(%w[
|
|
219
|
+
(%w[text content title current_path
|
|
220
|
+
selector xpath css link button field select table checked_field unchecked_field
|
|
219
221
|
ancestor sibling].flat_map do |assertion|
|
|
220
222
|
[%W[assert_#{assertion} must_have_#{assertion}],
|
|
221
223
|
%W[refute_#{assertion} wont_have_#{assertion}]]
|
|
@@ -228,14 +230,15 @@ module Capybara
|
|
|
228
230
|
%W[refute_matches_#{assertion} wont_match_#{assertion}]]
|
|
229
231
|
end).each do |(meth, new_name)|
|
|
230
232
|
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
|
231
|
-
def #{new_name} *args, &block
|
|
232
|
-
::Minitest::Expectation.new(self, ::Minitest::Spec.current).#{new_name}(*args, &block)
|
|
233
|
+
def #{new_name} *args, **kw_args, &block
|
|
234
|
+
::Minitest::Expectation.new(self, ::Minitest::Spec.current).#{new_name}(*args, **kw_args, &block)
|
|
233
235
|
end
|
|
234
236
|
ASSERTION
|
|
235
237
|
|
|
236
238
|
::Minitest::Expectation.class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
|
237
|
-
def #{new_name} *args, &block
|
|
238
|
-
|
|
239
|
+
def #{new_name} *args, **kw_args, &block
|
|
240
|
+
raise "Calling ##{new_name} outside of test." unless ctx
|
|
241
|
+
ctx.#{meth}(target, *args, **kw_args, &block)
|
|
239
242
|
end
|
|
240
243
|
ASSERTION
|
|
241
244
|
end
|
|
@@ -243,9 +246,9 @@ module Capybara
|
|
|
243
246
|
|
|
244
247
|
##
|
|
245
248
|
# @deprecated
|
|
246
|
-
def must_have_style(*args, &block)
|
|
249
|
+
def must_have_style(*args, **kw_args, &block)
|
|
247
250
|
warn 'must_have_style is deprecated, please use must_match_style'
|
|
248
|
-
must_match_style(*args, &block)
|
|
251
|
+
must_match_style(*args, **kw_args, &block)
|
|
249
252
|
end
|
|
250
253
|
end
|
|
251
254
|
end
|
|
@@ -363,7 +363,6 @@ module Capybara
|
|
|
363
363
|
def _check_with_label(selector, checked, locator,
|
|
364
364
|
allow_label_click: session_options.automatic_label_click, **options)
|
|
365
365
|
options[:allow_self] = true if locator.nil?
|
|
366
|
-
|
|
367
366
|
synchronize(Capybara::Queries::BaseQuery.wait(options, session_options.default_max_wait_time)) do
|
|
368
367
|
el = find(selector, locator, **options)
|
|
369
368
|
el.set(checked)
|
|
@@ -372,7 +371,7 @@ module Capybara
|
|
|
372
371
|
|
|
373
372
|
begin
|
|
374
373
|
el ||= find(selector, locator, **options.merge(visible: :all))
|
|
375
|
-
el.session.find(:label, for: el, visible: true).click unless el.checked? == checked
|
|
374
|
+
el.session.find(:label, for: el, visible: true, match: :first).click unless el.checked? == checked
|
|
376
375
|
rescue StandardError # swallow extra errors - raise original
|
|
377
376
|
raise e
|
|
378
377
|
end
|
data/lib/capybara/node/base.rb
CHANGED
|
@@ -103,19 +103,19 @@ module Capybara
|
|
|
103
103
|
|
|
104
104
|
# @api private
|
|
105
105
|
def find_css(css, **options)
|
|
106
|
-
if base.method(:find_css).arity
|
|
107
|
-
base.find_css(css, **options)
|
|
108
|
-
else
|
|
106
|
+
if base.method(:find_css).arity == 1
|
|
109
107
|
base.find_css(css)
|
|
108
|
+
else
|
|
109
|
+
base.find_css(css, **options)
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
# @api private
|
|
114
114
|
def find_xpath(xpath, **options)
|
|
115
|
-
if base.method(:find_xpath).arity
|
|
116
|
-
base.find_xpath(xpath, **options)
|
|
117
|
-
else
|
|
115
|
+
if base.method(:find_xpath).arity == 1
|
|
118
116
|
base.find_xpath(xpath)
|
|
117
|
+
else
|
|
118
|
+
base.find_xpath(xpath, **options)
|
|
119
119
|
end
|
|
120
120
|
end
|
|
121
121
|
|
|
@@ -435,11 +435,7 @@ module Capybara
|
|
|
435
435
|
#
|
|
436
436
|
# @return [Capybara::Node::Element] The element
|
|
437
437
|
def drop(*args)
|
|
438
|
-
options = args.map
|
|
439
|
-
return arg.to_path if arg.respond_to?(:to_path)
|
|
440
|
-
|
|
441
|
-
arg
|
|
442
|
-
end
|
|
438
|
+
options = args.map { |arg| arg.respond_to?(:to_path) ? arg.to_path : arg }
|
|
443
439
|
synchronize { base.drop(*options) }
|
|
444
440
|
self
|
|
445
441
|
end
|
|
@@ -24,12 +24,13 @@ module Capybara
|
|
|
24
24
|
# @option options [Boolean] normalize_ws
|
|
25
25
|
# Whether the `text`/`exact_text` options are compared against elment text with whitespace normalized or as returned by the driver.
|
|
26
26
|
# Defaults to {Capybara.configure default_normalize_ws}.
|
|
27
|
-
# @option options [Boolean, Symbol] visible
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
27
|
+
# @option options [Boolean, Symbol] visible
|
|
28
|
+
# Only find elements with the specified visibility. Defaults to behavior indicated by {Capybara.configure ignore_hidden_elements}.
|
|
29
|
+
# * true - only finds visible elements.
|
|
30
|
+
# * false - finds invisible _and_ visible elements.
|
|
31
|
+
# * :all - same as false; finds visible and invisible elements.
|
|
32
|
+
# * :hidden - only finds invisible elements.
|
|
33
|
+
# * :visible - same as true; only finds visible elements.
|
|
33
34
|
# @option options [Boolean] obscured Only find elements with the specified obscured state:
|
|
34
35
|
# * true - only find elements whose centerpoint is not in the viewport or is obscured by another non-descendant element.
|
|
35
36
|
# * false - only find elements whose centerpoint is in the viewport and is not obscured by other non-descendant elements.
|
|
@@ -60,15 +60,16 @@ module Capybara
|
|
|
60
60
|
# @param styles [Hash]
|
|
61
61
|
# @return [Boolean] If the styles match
|
|
62
62
|
#
|
|
63
|
-
def matches_style?(styles, **options)
|
|
63
|
+
def matches_style?(styles = nil, **options)
|
|
64
|
+
styles, options = options, {} if styles.nil?
|
|
64
65
|
make_predicate(options) { assert_matches_style(styles, **options) }
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
##
|
|
68
69
|
# @deprecated Use {#matches_style?} instead.
|
|
69
70
|
#
|
|
70
|
-
def has_style?(styles, **options)
|
|
71
|
-
warn
|
|
71
|
+
def has_style?(styles = nil, **options)
|
|
72
|
+
Capybara::Helpers.warn "DEPRECATED: has_style? is deprecated, please use matches_style? : #{Capybara::Helpers.filter_backtrace(caller)}"
|
|
72
73
|
matches_style?(styles, **options)
|
|
73
74
|
end
|
|
74
75
|
|
|
@@ -122,7 +123,8 @@ module Capybara
|
|
|
122
123
|
# @param styles [Hash]
|
|
123
124
|
# @raise [Capybara::ExpectationNotMet] If the element doesn't have the specified styles
|
|
124
125
|
#
|
|
125
|
-
def assert_matches_style(styles, **options)
|
|
126
|
+
def assert_matches_style(styles = nil, **options)
|
|
127
|
+
styles, options = options, {} if styles.nil?
|
|
126
128
|
query_args, query_opts = _set_query_session_options(styles, options)
|
|
127
129
|
query = Capybara::Queries::StyleQuery.new(*query_args, **query_opts)
|
|
128
130
|
synchronize(query.wait) do
|
|
@@ -134,7 +136,7 @@ module Capybara
|
|
|
134
136
|
##
|
|
135
137
|
# @deprecated Use {#assert_matches_style} instead.
|
|
136
138
|
#
|
|
137
|
-
def assert_style(styles, **options)
|
|
139
|
+
def assert_style(styles = nil, **options)
|
|
138
140
|
warn 'assert_style is deprecated, please use assert_matches_style instead'
|
|
139
141
|
assert_matches_style(styles, **options)
|
|
140
142
|
end
|
|
@@ -384,7 +386,7 @@ module Capybara
|
|
|
384
386
|
#
|
|
385
387
|
# page.has_field?('Email', type: 'email')
|
|
386
388
|
#
|
|
387
|
-
#
|
|
389
|
+
# NOTE: 'textarea' and 'select' are valid type values, matching the associated tag names.
|
|
388
390
|
#
|
|
389
391
|
# @param [String] locator The label, name or id of a field to check for
|
|
390
392
|
# @option options [String, Regexp] :with The text content of the field or a Regexp to match
|