capybara 3.31.0 → 3.33.0
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 +51 -0
- data/README.md +10 -3
- data/lib/capybara.rb +17 -7
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/minitest.rb +215 -141
- data/lib/capybara/minitest/spec.rb +153 -97
- data/lib/capybara/node/actions.rb +16 -20
- data/lib/capybara/node/element.rb +2 -0
- data/lib/capybara/node/matchers.rb +4 -6
- data/lib/capybara/queries/selector_query.rb +8 -1
- data/lib/capybara/queries/style_query.rb +1 -1
- data/lib/capybara/queries/text_query.rb +6 -0
- data/lib/capybara/rack_test/browser.rb +3 -1
- data/lib/capybara/registration_container.rb +44 -0
- data/lib/capybara/registrations/servers.rb +1 -1
- data/lib/capybara/result.rb +5 -1
- data/lib/capybara/rspec/matcher_proxies.rb +4 -4
- data/lib/capybara/rspec/matchers/have_text.rb +1 -1
- data/lib/capybara/selector.rb +10 -1
- data/lib/capybara/selector/definition.rb +5 -4
- data/lib/capybara/selector/definition/button.rb +1 -0
- data/lib/capybara/selector/definition/fillable_field.rb +1 -1
- data/lib/capybara/selector/definition/link.rb +8 -0
- data/lib/capybara/selector/definition/table.rb +1 -1
- data/lib/capybara/selector/selector.rb +4 -0
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -1
- data/lib/capybara/selenium/atoms/src/getAttribute.js +1 -1
- data/lib/capybara/selenium/driver.rb +7 -4
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +7 -9
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +7 -9
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +2 -2
- data/lib/capybara/selenium/node.rb +69 -9
- data/lib/capybara/selenium/nodes/chrome_node.rb +0 -9
- data/lib/capybara/selenium/nodes/firefox_node.rb +2 -2
- data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
- data/lib/capybara/selenium/patches/logs.rb +3 -5
- data/lib/capybara/session.rb +3 -3
- data/lib/capybara/session/config.rb +3 -1
- data/lib/capybara/spec/public/test.js +18 -0
- data/lib/capybara/spec/session/click_button_spec.rb +11 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +9 -0
- data/lib/capybara/spec/session/find_spec.rb +11 -8
- data/lib/capybara/spec/session/has_button_spec.rb +16 -0
- data/lib/capybara/spec/session/has_css_spec.rb +9 -6
- data/lib/capybara/spec/session/has_current_path_spec.rb +2 -2
- data/lib/capybara/spec/session/has_field_spec.rb +16 -0
- data/lib/capybara/spec/session/has_select_spec.rb +4 -4
- data/lib/capybara/spec/session/has_selector_spec.rb +4 -4
- data/lib/capybara/spec/session/node_spec.rb +54 -27
- data/lib/capybara/spec/session/window/window_spec.rb +7 -7
- data/lib/capybara/spec/spec_helper.rb +2 -2
- data/lib/capybara/spec/test_app.rb +14 -18
- data/lib/capybara/spec/views/form.erb +7 -1
- data/lib/capybara/spec/views/with_dragula.erb +3 -1
- data/lib/capybara/spec/views/with_html.erb +2 -2
- data/lib/capybara/spec/views/with_js.erb +1 -0
- data/lib/capybara/version.rb +1 -1
- data/spec/capybara_spec.rb +1 -1
- data/spec/dsl_spec.rb +14 -1
- data/spec/minitest_spec.rb +1 -1
- data/spec/rack_test_spec.rb +13 -0
- data/spec/regexp_dissassembler_spec.rb +0 -4
- data/spec/result_spec.rb +38 -31
- data/spec/rspec/shared_spec_matchers.rb +65 -53
- data/spec/selector_spec.rb +1 -1
- data/spec/selenium_spec_chrome.rb +4 -2
- data/spec/selenium_spec_chrome_remote.rb +2 -0
- data/spec/server_spec.rb +41 -49
- data/spec/shared_selenium_node.rb +18 -0
- data/spec/shared_selenium_session.rb +25 -7
- data/spec/spec_helper.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab64d9d47c6374c4f203945be70b868fb9e4c48d3fdca087ba4e66498e40b91c
|
4
|
+
data.tar.gz: 451c97390c148b5b0fad1b06107a4f0de87f17f7b8cef7156fb76ad2ee503f76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0ca3fd8a4535e1df696ddc7f547e066b873d3f4be2b54655fdbb0b6588c5086a87b93500e241e0da031b586c0b6a30cdd8522f209309cf6729c683226bfcf7f
|
7
|
+
data.tar.gz: d295dcd733856816a1c89810f4d54304a52c251d585afcc62b986a66d63e080e03ddc81bdc46cf51a044e29d2849ccce9bb3cb307a0757746e662394f648a717
|
data/History.md
CHANGED
@@ -1,3 +1,54 @@
|
|
1
|
+
# Version 3.33.0
|
2
|
+
Release date: 2020-06-21
|
3
|
+
|
4
|
+
### Added
|
5
|
+
|
6
|
+
* Block passed to `within_session` now receives the new and old session
|
7
|
+
* Support for aria-role button when enabled [Seiei Miyagi]
|
8
|
+
* Support for aria-role link when enabled
|
9
|
+
* Support for `validation_message` filter with :field and :fillable_field selectors
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
|
13
|
+
* Ruby 2.5.0+ is now required
|
14
|
+
* Deprecated direct manupulation of the driver and server registries
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
|
18
|
+
* Ruby 2.7 warning in minitest `assert_text` [Eileen M. Uchitelle]
|
19
|
+
|
20
|
+
|
21
|
+
# Version 3.32.2
|
22
|
+
Release date: 2020-05-16
|
23
|
+
|
24
|
+
### Fixed
|
25
|
+
|
26
|
+
* Don't use lazy enumerator with JRuby due to leaking threads
|
27
|
+
* Ruby 2.7 deprecation warning when registering Webrick [Jon Zeppieri]
|
28
|
+
* `have_text` description [Juan Pablo Rinaldi]
|
29
|
+
|
30
|
+
# Version 3.32.1
|
31
|
+
Release date: 2020-04-05
|
32
|
+
|
33
|
+
### Fixed
|
34
|
+
|
35
|
+
* Rapid set now respects field maxlength (Issue #2332)
|
36
|
+
* Only patch pause into legacy actions in Selenium < 4 (Issue #2334)
|
37
|
+
|
38
|
+
# Version 3.32.0
|
39
|
+
Release date: 2020-03-29
|
40
|
+
|
41
|
+
### Added
|
42
|
+
|
43
|
+
* Support `delay` setting on click with Selenium
|
44
|
+
* Implement rapid set for values longer thn 30 characters in text fields with Selenium
|
45
|
+
|
46
|
+
### Fixed
|
47
|
+
|
48
|
+
* Result#[] and negative max on ranges (Issue #2302/2303) [Jeremy Evans]
|
49
|
+
* RackTest form submission rewrites query string when using GET method
|
50
|
+
* Ruby 2.7 deprecation warnings in RSpec matcher proxies
|
51
|
+
|
1
52
|
# Version 3.31.0
|
2
53
|
Release date: 2020-01-26
|
3
54
|
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@
|
|
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.
|
10
|
+
**Note** You are viewing the README for the 3.33.x release of Capybara.
|
11
11
|
|
12
12
|
Capybara helps you test web applications by simulating how a real user would
|
13
13
|
interact with your app. It is agnostic about the driver running your tests and
|
@@ -76,7 +76,7 @@ GitHub): http://groups.google.com/group/ruby-capybara
|
|
76
76
|
|
77
77
|
## <a name="setup"></a>Setup
|
78
78
|
|
79
|
-
Capybara requires Ruby 2.
|
79
|
+
Capybara requires Ruby 2.5.0 or later. To install, add this line to your
|
80
80
|
`Gemfile` and run `bundle install`:
|
81
81
|
|
82
82
|
```ruby
|
@@ -149,7 +149,7 @@ require 'capybara/rspec'
|
|
149
149
|
|
150
150
|
If you are using Rails, put your Capybara specs in `spec/features` or `spec/system` (only works
|
151
151
|
if [you have it configured in
|
152
|
-
RSpec](https://
|
152
|
+
RSpec](https://relishapp.com/rspec/rspec-rails/v/4-0/docs/directory-structure))
|
153
153
|
and if you have your Capybara specs in a different directory, then tag the
|
154
154
|
example groups with `type: :feature` or `type: :system` depending on which type of test you're writing.
|
155
155
|
|
@@ -1055,6 +1055,13 @@ additional info about how the underlying driver can be configured.
|
|
1055
1055
|
are testing for specific server errors and using multiple sessions make sure to test for the
|
1056
1056
|
errors using the initial session (usually :default)
|
1057
1057
|
|
1058
|
+
* If WebMock is enabled, you may encounter a "Too many open files"
|
1059
|
+
error. A simple `page.find` call may cause thousands of HTTP requests
|
1060
|
+
until the timeout occurs. By default, WebMock will cause each of these
|
1061
|
+
requests to spawn a new connection. To work around this problem, you
|
1062
|
+
may need to [enable WebMock's `net_http_connect_on_start: true`
|
1063
|
+
parameter](https://github.com/bblimke/webmock/blob/master/README.md#connecting-on-nethttpstart).
|
1064
|
+
|
1058
1065
|
## <a name="threadsafe"></a>"Threadsafe" mode
|
1059
1066
|
|
1060
1067
|
In normal mode most of Capybara's configuration options are global settings which can cause issues
|
data/lib/capybara.rb
CHANGED
@@ -5,6 +5,7 @@ require 'nokogiri'
|
|
5
5
|
require 'xpath'
|
6
6
|
require 'forwardable'
|
7
7
|
require 'capybara/config'
|
8
|
+
require 'capybara/registration_container'
|
8
9
|
|
9
10
|
module Capybara
|
10
11
|
class CapybaraError < StandardError; end
|
@@ -81,6 +82,7 @@ module Capybara
|
|
81
82
|
# - **default_selector** (`:css`, `:xpath` = `:css`) - Methods which take a selector use the given type by default. See also {Capybara::Selector}.
|
82
83
|
# - **default_set_options** (Hash = `{}`) - The default options passed to {Capybara::Node::Element#set Element#set}.
|
83
84
|
# - **enable_aria_label** (Boolean = `false`) - Whether fields, links, and buttons will match against `aria-label` attribute.
|
85
|
+
# - **enable_aria_role** (Boolean = `false`) - Selectors will check for relevant aria role (currently only `button`).
|
84
86
|
# - **exact** (Boolean = `false`) - Whether locators are matched exactly or with substrings. Only affects selector conditions
|
85
87
|
# written using the `XPath#is` method.
|
86
88
|
# - **exact_text** (Boolean = `false`) - Whether the text matchers and `:text` filter match exactly or on substrings.
|
@@ -93,6 +95,7 @@ module Capybara
|
|
93
95
|
# - **save_path** (String = `Dir.pwd`) - Where to put pages saved through {Capybara::Session#save_page save_page}, {Capybara::Session#save_screenshot save_screenshot},
|
94
96
|
# {Capybara::Session#save_and_open_page save_and_open_page}, or {Capybara::Session#save_and_open_screenshot save_and_open_screenshot}.
|
95
97
|
# - **server** (Symbol = `:default` (which uses puma)) - The name of the registered server to use when running the app under test.
|
98
|
+
# - **server_port** (Integer) - The port Capybara will run the application server on, if not specified a random port will be used.
|
96
99
|
# - **server_errors** (Array\<Class> = `[Exception]`) - Error classes that should be raised in the tests if they are raised in the server
|
97
100
|
# and {configure raise_server_errors} is `true`.
|
98
101
|
# - **test_id** (Symbol, String, `nil` = `nil`) - Optional attribute to match locator against with built-in selectors along with id.
|
@@ -124,7 +127,7 @@ module Capybara
|
|
124
127
|
# @yieldreturn [Capybara::Driver::Base] A Capybara driver instance
|
125
128
|
#
|
126
129
|
def register_driver(name, &block)
|
127
|
-
drivers
|
130
|
+
drivers.send(:register, name, block)
|
128
131
|
end
|
129
132
|
|
130
133
|
##
|
@@ -143,7 +146,7 @@ module Capybara
|
|
143
146
|
# @yieldparam host The host/ip to bind to
|
144
147
|
#
|
145
148
|
def register_server(name, &block)
|
146
|
-
servers
|
149
|
+
servers.send(:register, name.to_sym, block)
|
147
150
|
end
|
148
151
|
|
149
152
|
##
|
@@ -197,11 +200,11 @@ module Capybara
|
|
197
200
|
end
|
198
201
|
|
199
202
|
def drivers
|
200
|
-
@drivers ||=
|
203
|
+
@drivers ||= RegistrationContainer.new
|
201
204
|
end
|
202
205
|
|
203
206
|
def servers
|
204
|
-
@servers ||=
|
207
|
+
@servers ||= RegistrationContainer.new
|
205
208
|
end
|
206
209
|
|
207
210
|
# Wraps the given string, which should contain an HTML document or fragment
|
@@ -349,7 +352,8 @@ module Capybara
|
|
349
352
|
#
|
350
353
|
# Yield a block using a specific session name or {Capybara::Session} instance.
|
351
354
|
#
|
352
|
-
def using_session(name_or_session)
|
355
|
+
def using_session(name_or_session, &block)
|
356
|
+
previous_session = current_session
|
353
357
|
previous_session_info = {
|
354
358
|
specified_session: specified_session,
|
355
359
|
session_name: session_name,
|
@@ -362,7 +366,12 @@ module Capybara
|
|
362
366
|
else
|
363
367
|
self.session_name = name_or_session
|
364
368
|
end
|
365
|
-
|
369
|
+
|
370
|
+
if block.arity.zero?
|
371
|
+
yield
|
372
|
+
else
|
373
|
+
yield current_session, previous_session
|
374
|
+
end
|
366
375
|
ensure
|
367
376
|
self.session_name, self.specified_session = previous_session_info.values_at(:session_name, :specified_session)
|
368
377
|
self.current_driver, self.app = previous_session_info.values_at(:current_driver, :app) if threadsafe
|
@@ -394,7 +403,7 @@ module Capybara
|
|
394
403
|
template.inner_html = ''
|
395
404
|
end
|
396
405
|
document.xpath('//textarea').each do |textarea|
|
397
|
-
textarea['_capybara_raw_value'] = textarea.content.
|
406
|
+
textarea['_capybara_raw_value'] = textarea.content.delete_prefix("\n")
|
398
407
|
end
|
399
408
|
end
|
400
409
|
end
|
@@ -501,6 +510,7 @@ Capybara.configure do |config|
|
|
501
510
|
config.visible_text_only = false
|
502
511
|
config.automatic_label_click = false
|
503
512
|
config.enable_aria_label = false
|
513
|
+
config.enable_aria_role = false
|
504
514
|
config.reuse_server = true
|
505
515
|
config.default_set_options = {}
|
506
516
|
config.test_id = nil
|
data/lib/capybara/cucumber.rb
CHANGED
@@ -22,6 +22,6 @@ end
|
|
22
22
|
Before do |scenario|
|
23
23
|
scenario.source_tag_names.each do |tag|
|
24
24
|
driver_name = tag.sub(/^@/, '').to_sym
|
25
|
-
Capybara.current_driver = driver_name if Capybara.drivers
|
25
|
+
Capybara.current_driver = driver_name if Capybara.drivers[driver_name]
|
26
26
|
end
|
27
27
|
end
|
data/lib/capybara/minitest.rb
CHANGED
@@ -6,53 +6,58 @@ require 'capybara/dsl'
|
|
6
6
|
module Capybara
|
7
7
|
module Minitest
|
8
8
|
module Assertions
|
9
|
-
##
|
9
|
+
##
|
10
|
+
# Assert text exists
|
10
11
|
#
|
12
|
+
# @!method assert_content
|
11
13
|
# @!method assert_text
|
12
|
-
#
|
14
|
+
# See {Capybara::Node::Matchers#assert_text}
|
13
15
|
|
14
|
-
##
|
16
|
+
##
|
17
|
+
# Assert text does not exist
|
15
18
|
#
|
19
|
+
# @!method refute_content
|
20
|
+
# @!method assert_no_content
|
21
|
+
# @!method refute_text
|
16
22
|
# @!method assert_no_text
|
17
|
-
#
|
23
|
+
# See {Capybara::Node::Matchers#assert_no_text}
|
18
24
|
|
19
25
|
##
|
20
26
|
# Assertion that page title does match
|
21
27
|
#
|
22
28
|
# @!method assert_title
|
23
|
-
#
|
29
|
+
# See {Capybara::Node::DocumentMatchers#assert_title}
|
24
30
|
|
25
31
|
##
|
26
32
|
# Assertion that page title does not match
|
27
33
|
#
|
28
34
|
# @!method refute_title
|
29
35
|
# @!method assert_no_title
|
30
|
-
#
|
36
|
+
# See {Capybara::Node::DocumentMatchers#assert_no_title}
|
31
37
|
|
32
38
|
##
|
33
39
|
# Assertion that current path matches
|
34
40
|
#
|
35
41
|
# @!method assert_current_path
|
36
|
-
#
|
42
|
+
# See {Capybara::SessionMatchers#assert_current_path}
|
37
43
|
|
38
44
|
##
|
39
45
|
# Assertion that current page does not match
|
40
46
|
#
|
41
47
|
# @!method refute_current_path
|
42
48
|
# @!method assert_no_current_path
|
43
|
-
#
|
49
|
+
# See {Capybara::SessionMatchers#assert_no_current_path}
|
44
50
|
|
45
51
|
%w[text no_text title no_title current_path no_current_path].each do |assertion_name|
|
46
52
|
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
47
|
-
def assert_#{assertion_name}
|
53
|
+
def assert_#{assertion_name}(*args, **kwargs)
|
48
54
|
self.assertions +=1
|
49
55
|
subject, args = determine_subject(args)
|
50
|
-
subject.assert_#{assertion_name}(*args)
|
56
|
+
subject.assert_#{assertion_name}(*args, **kwargs)
|
51
57
|
rescue Capybara::ExpectationNotMet => e
|
52
58
|
raise ::Minitest::Assertion, e.message
|
53
59
|
end
|
54
60
|
ASSERTION
|
55
|
-
ruby2_keywords "assert_#{assertion_name}" if respond_to?(:ruby2_keywords)
|
56
61
|
end
|
57
62
|
|
58
63
|
alias_method :refute_title, :assert_no_title
|
@@ -62,40 +67,81 @@ module Capybara
|
|
62
67
|
alias_method :assert_content, :assert_text
|
63
68
|
alias_method :assert_no_content, :refute_text
|
64
69
|
|
65
|
-
##
|
70
|
+
##
|
71
|
+
# Assert selector exists on page
|
66
72
|
#
|
67
73
|
# @!method assert_selector
|
68
|
-
#
|
74
|
+
# See {Capybara::Node::Matchers#assert_selector}
|
69
75
|
|
70
|
-
##
|
76
|
+
##
|
77
|
+
# Assert selector does not exist on page
|
71
78
|
#
|
79
|
+
# @!method refute_selector
|
72
80
|
# @!method assert_no_selector
|
73
|
-
#
|
81
|
+
# See {Capybara::Node::Matchers#assert_no_selector}
|
74
82
|
|
75
|
-
##
|
83
|
+
##
|
84
|
+
# Assert element matches selector
|
76
85
|
#
|
77
86
|
# @!method assert_matches_selector
|
78
|
-
#
|
87
|
+
# See {Capybara::Node::Matchers#assert_matches_selector}
|
79
88
|
|
80
|
-
##
|
89
|
+
##
|
90
|
+
# Assert element does not match selector
|
81
91
|
#
|
82
|
-
# @!method
|
83
|
-
#
|
92
|
+
# @!method refute_matches_selector
|
93
|
+
# @!method assert_not_matches_selector
|
94
|
+
# See {Capybara::Node::Matchers#assert_not_matches_selector}
|
95
|
+
|
96
|
+
##
|
97
|
+
# Assert all of the provided selectors exist on page
|
98
|
+
#
|
99
|
+
# @!method assert_all_of_selectors
|
100
|
+
# See {Capybara::Node::Matchers#assert_all_of_selectors}
|
101
|
+
|
102
|
+
##
|
103
|
+
# Assert none of the provided selectors exist on page
|
104
|
+
#
|
105
|
+
# @!method assert_none_of_selectors
|
106
|
+
# See {Capybara::Node::Matchers#assert_none_of_selectors}
|
107
|
+
|
108
|
+
##
|
109
|
+
# Assert any of the provided selectors exist on page
|
110
|
+
#
|
111
|
+
# @!method assert_any_of_selectors
|
112
|
+
# See {Capybara::Node::Matchers#assert_any_of_selectors}
|
84
113
|
|
85
|
-
##
|
114
|
+
##
|
115
|
+
# Assert element has the provided CSS styles
|
86
116
|
#
|
87
117
|
# @!method assert_matches_style
|
88
|
-
#
|
118
|
+
# See {Capybara::Node::Matchers#assert_matches_style}
|
89
119
|
|
90
|
-
##
|
120
|
+
##
|
121
|
+
# Assert element has a matching sibling
|
91
122
|
#
|
92
123
|
# @!method assert_sibling
|
93
|
-
#
|
124
|
+
# See {Capybara::Node::Matchers#assert_sibling}
|
125
|
+
|
126
|
+
##
|
127
|
+
# Assert element does not have a matching sibling
|
128
|
+
#
|
129
|
+
# @!method refute_sibling
|
130
|
+
# @!method assert_no_sibling
|
131
|
+
# See {Capybara::Node::Matchers#assert_no_sibling}
|
94
132
|
|
95
|
-
##
|
133
|
+
##
|
134
|
+
# Assert element has a matching ancestor
|
96
135
|
#
|
97
136
|
# @!method assert_ancestor
|
98
|
-
#
|
137
|
+
# See {Capybara::Node::Matchers#assert_ancestor}
|
138
|
+
|
139
|
+
##
|
140
|
+
# Assert element does not have a matching ancestor
|
141
|
+
#
|
142
|
+
# @!method refute_ancestor
|
143
|
+
# @!method assert_no_ancestor
|
144
|
+
# See {Capybara::Node::Matchers#assert_no_ancestor}
|
99
145
|
|
100
146
|
%w[selector no_selector matches_style
|
101
147
|
all_of_selectors none_of_selectors any_of_selectors
|
@@ -118,6 +164,123 @@ module Capybara
|
|
118
164
|
alias_method :refute_ancestor, :assert_no_ancestor
|
119
165
|
alias_method :refute_sibling, :assert_no_sibling
|
120
166
|
|
167
|
+
##
|
168
|
+
# Assert that provided xpath exists
|
169
|
+
#
|
170
|
+
# @!method assert_xpath
|
171
|
+
# See {Capybara::Node::Matchers#has_xpath?}
|
172
|
+
|
173
|
+
##
|
174
|
+
# Assert that provide xpath does not exist
|
175
|
+
#
|
176
|
+
# @!method refute_xpath
|
177
|
+
# @!method assert_no_xpath
|
178
|
+
# See {Capybara::Node::Matchers#has_no_xpath?}
|
179
|
+
|
180
|
+
##
|
181
|
+
# Assert that provided css exists
|
182
|
+
#
|
183
|
+
# @!method assert_css
|
184
|
+
# See {Capybara::Node::Matchers#has_css?}
|
185
|
+
|
186
|
+
##
|
187
|
+
# Assert that provided css does not exist
|
188
|
+
#
|
189
|
+
# @!method refute_css
|
190
|
+
# @!method assert_no_css
|
191
|
+
# See {Capybara::Node::Matchers#has_no_css?}
|
192
|
+
|
193
|
+
##
|
194
|
+
# Assert that provided link exists
|
195
|
+
#
|
196
|
+
# @!method assert_link
|
197
|
+
# See {Capybara::Node::Matchers#has_link?}
|
198
|
+
|
199
|
+
##
|
200
|
+
# Assert that provided link does not exist
|
201
|
+
#
|
202
|
+
# @!method assert_no_link
|
203
|
+
# @!method refute_link
|
204
|
+
# See {Capybara::Node::Matchers#has_no_link?}
|
205
|
+
|
206
|
+
##
|
207
|
+
# Assert that provided button exists
|
208
|
+
#
|
209
|
+
# @!method assert_button
|
210
|
+
# See {Capybara::Node::Matchers#has_button?}
|
211
|
+
|
212
|
+
##
|
213
|
+
# Assert that provided button does not exist
|
214
|
+
#
|
215
|
+
# @!method refute_button
|
216
|
+
# @!method assert_no_button
|
217
|
+
# See {Capybara::Node::Matchers#has_no_button?}
|
218
|
+
|
219
|
+
##
|
220
|
+
# Assert that provided field exists
|
221
|
+
#
|
222
|
+
# @!method assert_field
|
223
|
+
# See {Capybara::Node::Matchers#has_field?}
|
224
|
+
|
225
|
+
##
|
226
|
+
# Assert that provided field does not exist
|
227
|
+
#
|
228
|
+
# @!method refute_field
|
229
|
+
# @!method assert_no_field
|
230
|
+
# See {Capybara::Node::Matchers#has_no_field?}
|
231
|
+
|
232
|
+
##
|
233
|
+
# Assert that provided checked field exists
|
234
|
+
#
|
235
|
+
# @!method assert_checked_field
|
236
|
+
# See {Capybara::Node::Matchers#has_checked_field?}
|
237
|
+
|
238
|
+
##
|
239
|
+
# Assert that provided checked_field does not exist
|
240
|
+
#
|
241
|
+
# @!method assert_no_checked_field
|
242
|
+
# @!method refute_checked_field
|
243
|
+
# See {Capybara::Node::Matchers#has_no_checked_field?}
|
244
|
+
|
245
|
+
##
|
246
|
+
# Assert that provided unchecked field exists
|
247
|
+
#
|
248
|
+
# @!method assert_unchecked_field
|
249
|
+
# See {Capybara::Node::Matchers#has_unchecked_field?}
|
250
|
+
|
251
|
+
##
|
252
|
+
# Assert that provided unchecked field does not exist
|
253
|
+
#
|
254
|
+
# @!method assert_no_unchecked_field
|
255
|
+
# @!method refute_unchecked_field
|
256
|
+
# See {Capybara::Node::Matchers#has_no_unchecked_field?}
|
257
|
+
|
258
|
+
##
|
259
|
+
# Assert that provided select exists
|
260
|
+
#
|
261
|
+
# @!method assert_select
|
262
|
+
# See {Capybara::Node::Matchers#has_select?}
|
263
|
+
|
264
|
+
##
|
265
|
+
# Assert that provided select does not exist
|
266
|
+
#
|
267
|
+
# @!method refute_select
|
268
|
+
# @!method assert_no_select
|
269
|
+
# See {Capybara::Node::Matchers#has_no_select?}
|
270
|
+
|
271
|
+
##
|
272
|
+
# Assert that provided table exists
|
273
|
+
#
|
274
|
+
# @!method assert_table
|
275
|
+
# See {Capybara::Node::Matchers#has_table?}
|
276
|
+
|
277
|
+
##
|
278
|
+
# Assert that provided table does not exist
|
279
|
+
#
|
280
|
+
# @!method refute_table
|
281
|
+
# @!method assert_no_table
|
282
|
+
# See {Capybara::Node::Matchers#has_no_table?}
|
283
|
+
|
121
284
|
%w[xpath css link button field select table].each do |selector_type|
|
122
285
|
define_method "assert_#{selector_type}" do |*args, &optional_filter_block|
|
123
286
|
subject, args = determine_subject(args)
|
@@ -158,6 +321,32 @@ module Capybara
|
|
158
321
|
alias_method "refute_#{field_type}_field", "assert_no_#{field_type}_field"
|
159
322
|
end
|
160
323
|
|
324
|
+
##
|
325
|
+
# Assert that element matches xpath
|
326
|
+
#
|
327
|
+
# @!method assert_matches_xpath
|
328
|
+
# See {Capybara::Node::Matchers#matches_xpath?}
|
329
|
+
|
330
|
+
##
|
331
|
+
# Assert that element does not match xpath
|
332
|
+
#
|
333
|
+
# @!method refute_matches_xpath
|
334
|
+
# @!method assert_not_matches_xpath
|
335
|
+
# See {Capybara::Node::Matchers#not_matches_xpath?}
|
336
|
+
|
337
|
+
##
|
338
|
+
# Assert that element matches css
|
339
|
+
#
|
340
|
+
# @!method assert_matches_css
|
341
|
+
# See {Capybara::Node::Matchers#matches_css?}
|
342
|
+
|
343
|
+
##
|
344
|
+
# Assert that element matches css
|
345
|
+
#
|
346
|
+
# @!method refute_matches_css
|
347
|
+
# @!method assert_not_matches_css
|
348
|
+
# See {Capybara::Node::Matchers#not_matches_css?}
|
349
|
+
|
161
350
|
%w[xpath css].each do |selector_type|
|
162
351
|
define_method "assert_matches_#{selector_type}" do |*args, &optional_filter_block|
|
163
352
|
subject, args = determine_subject(args)
|
@@ -173,121 +362,6 @@ module Capybara
|
|
173
362
|
alias_method "refute_matches_#{selector_type}", "assert_not_matches_#{selector_type}"
|
174
363
|
end
|
175
364
|
|
176
|
-
##
|
177
|
-
# Assertion that there is xpath
|
178
|
-
#
|
179
|
-
# @!method assert_xpath
|
180
|
-
# @see Capybara::Node::Matchers#has_xpath?
|
181
|
-
|
182
|
-
##
|
183
|
-
# Assertion that there is no xpath
|
184
|
-
#
|
185
|
-
# @!method refute_xpath
|
186
|
-
# @!method assert_no_xpath
|
187
|
-
# @see Capybara::Node::Matchers#has_no_xpath?
|
188
|
-
|
189
|
-
##
|
190
|
-
# Assertion that there is css
|
191
|
-
#
|
192
|
-
# @!method assert_css
|
193
|
-
# @see Capybara::Node::Matchers#has_css?
|
194
|
-
|
195
|
-
##
|
196
|
-
# Assertion that there is no css
|
197
|
-
#
|
198
|
-
# @!method refute_css
|
199
|
-
# @!method assert_no_css
|
200
|
-
# @see Capybara::Node::Matchers#has_no_css?
|
201
|
-
|
202
|
-
##
|
203
|
-
# Assertion that there is link
|
204
|
-
#
|
205
|
-
# @!method assert_link
|
206
|
-
# @see Capybara::Node::Matchers#has_link?
|
207
|
-
|
208
|
-
##
|
209
|
-
# Assertion that there is no link
|
210
|
-
#
|
211
|
-
# @!method assert_no_link
|
212
|
-
# @!method refute_link
|
213
|
-
# @see Capybara::Node::Matchers#has_no_link?
|
214
|
-
|
215
|
-
##
|
216
|
-
# Assertion that there is button
|
217
|
-
#
|
218
|
-
# @!method assert_button
|
219
|
-
# @see Capybara::Node::Matchers#has_button?
|
220
|
-
|
221
|
-
##
|
222
|
-
# Assertion that there is no button
|
223
|
-
#
|
224
|
-
# @!method refute_button
|
225
|
-
# @!method assert_no_button
|
226
|
-
# @see Capybara::Node::Matchers#has_no_button?
|
227
|
-
|
228
|
-
##
|
229
|
-
# Assertion that there is field
|
230
|
-
#
|
231
|
-
# @!method assert_field
|
232
|
-
# @see Capybara::Node::Matchers#has_field?
|
233
|
-
|
234
|
-
##
|
235
|
-
# Assertion that there is no field
|
236
|
-
#
|
237
|
-
# @!method refute_field
|
238
|
-
# @!method assert_no_field
|
239
|
-
# @see Capybara::Node::Matchers#has_no_field?
|
240
|
-
|
241
|
-
##
|
242
|
-
# Assertion that there is checked_field
|
243
|
-
#
|
244
|
-
# @!method assert_checked_field
|
245
|
-
# @see Capybara::Node::Matchers#has_checked_field?
|
246
|
-
|
247
|
-
##
|
248
|
-
# Assertion that there is no checked_field
|
249
|
-
#
|
250
|
-
# @!method assert_no_checked_field
|
251
|
-
# @!method refute_checked_field
|
252
|
-
|
253
|
-
##
|
254
|
-
# Assertion that there is unchecked_field
|
255
|
-
#
|
256
|
-
# @!method assert_unchecked_field
|
257
|
-
# @see Capybara::Node::Matchers#has_unchecked_field?
|
258
|
-
|
259
|
-
##
|
260
|
-
# Assertion that there is no unchecked_field
|
261
|
-
#
|
262
|
-
# @!method assert_no_unchecked_field
|
263
|
-
# @!method refute_unchecked_field
|
264
|
-
|
265
|
-
##
|
266
|
-
# Assertion that there is select
|
267
|
-
#
|
268
|
-
# @!method assert_select
|
269
|
-
# @see Capybara::Node::Matchers#has_select?
|
270
|
-
|
271
|
-
##
|
272
|
-
# Assertion that there is no select
|
273
|
-
#
|
274
|
-
# @!method refute_select
|
275
|
-
# @!method assert_no_select
|
276
|
-
# @see Capybara::Node::Matchers#has_no_select?
|
277
|
-
|
278
|
-
##
|
279
|
-
# Assertion that there is table
|
280
|
-
#
|
281
|
-
# @!method assert_table
|
282
|
-
# @see Capybara::Node::Matchers#has_table?
|
283
|
-
|
284
|
-
##
|
285
|
-
# Assertion that there is no table
|
286
|
-
#
|
287
|
-
# @!method refute_table
|
288
|
-
# @!method assert_no_table
|
289
|
-
# @see Capybara::Node::Matchers#has_no_table?
|
290
|
-
|
291
365
|
private
|
292
366
|
|
293
367
|
def determine_subject(args)
|