capybara 2.15.0 → 3.0.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 +5 -5
- data/History.md +137 -2
- data/README.md +36 -25
- data/lib/capybara/config.rb +11 -57
- data/lib/capybara/cucumber.rb +2 -3
- data/lib/capybara/driver/base.rb +19 -16
- data/lib/capybara/driver/node.rb +5 -4
- data/lib/capybara/dsl.rb +1 -0
- data/lib/capybara/helpers.rb +19 -29
- data/lib/capybara/minitest/spec.rb +16 -13
- data/lib/capybara/minitest.rb +140 -137
- data/lib/capybara/node/actions.rb +68 -89
- data/lib/capybara/node/base.rb +11 -18
- data/lib/capybara/node/document.rb +2 -2
- data/lib/capybara/node/document_matchers.rb +8 -8
- data/lib/capybara/node/element.rb +32 -42
- data/lib/capybara/node/finders.rb +64 -71
- data/lib/capybara/node/matchers.rb +50 -71
- data/lib/capybara/node/simple.rb +11 -17
- data/lib/capybara/queries/ancestor_query.rb +12 -8
- data/lib/capybara/queries/base_query.rb +22 -18
- data/lib/capybara/queries/current_path_query.rb +12 -25
- data/lib/capybara/queries/match_query.rb +3 -7
- data/lib/capybara/queries/selector_query.rb +100 -96
- data/lib/capybara/queries/sibling_query.rb +5 -5
- data/lib/capybara/queries/text_query.rb +35 -35
- data/lib/capybara/queries/title_query.rb +8 -11
- data/lib/capybara/rack_test/browser.rb +15 -18
- data/lib/capybara/rack_test/css_handlers.rb +6 -4
- data/lib/capybara/rack_test/driver.rb +6 -10
- data/lib/capybara/rack_test/form.rb +52 -39
- data/lib/capybara/rack_test/node.rb +93 -63
- data/lib/capybara/rails.rb +2 -6
- data/lib/capybara/result.rb +22 -22
- data/lib/capybara/rspec/compound.rb +5 -10
- data/lib/capybara/rspec/features.rb +17 -48
- data/lib/capybara/rspec/matcher_proxies.rb +31 -15
- data/lib/capybara/rspec/matchers.rb +116 -58
- data/lib/capybara/rspec.rb +5 -10
- data/lib/capybara/selector/css.rb +6 -11
- data/lib/capybara/selector/filter.rb +1 -17
- data/lib/capybara/selector/filter_set.rb +18 -15
- data/lib/capybara/selector/filters/base.rb +7 -6
- data/lib/capybara/selector/filters/expression_filter.rb +6 -23
- data/lib/capybara/selector/filters/node_filter.rb +2 -12
- data/lib/capybara/selector/selector.rb +28 -34
- data/lib/capybara/selector.rb +129 -117
- data/lib/capybara/selenium/driver.rb +172 -163
- data/lib/capybara/selenium/node.rb +218 -104
- data/lib/capybara/server.rb +3 -2
- data/lib/capybara/session/config.rb +47 -59
- data/lib/capybara/session/matchers.rb +23 -14
- data/lib/capybara/session.rb +175 -229
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/public/test.js +38 -6
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -0
- data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -2
- data/lib/capybara/spec/session/accept_prompt_spec.rb +30 -1
- data/lib/capybara/spec/session/all_spec.rb +31 -18
- data/lib/capybara/spec/session/ancestor_spec.rb +6 -8
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +6 -5
- data/lib/capybara/spec/session/assert_current_path.rb +12 -11
- data/lib/capybara/spec/session/assert_selector.rb +1 -0
- data/lib/capybara/spec/session/assert_text.rb +31 -23
- data/lib/capybara/spec/session/assert_title.rb +13 -3
- data/lib/capybara/spec/session/attach_file_spec.rb +57 -29
- data/lib/capybara/spec/session/body_spec.rb +1 -0
- data/lib/capybara/spec/session/check_spec.rb +7 -6
- data/lib/capybara/spec/session/choose_spec.rb +5 -4
- data/lib/capybara/spec/session/click_button_spec.rb +24 -32
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +8 -7
- data/lib/capybara/spec/session/click_link_spec.rb +8 -7
- data/lib/capybara/spec/session/current_scope_spec.rb +4 -3
- data/lib/capybara/spec/session/current_url_spec.rb +19 -8
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +1 -1
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +1 -0
- data/lib/capybara/spec/session/element/assert_match_selector.rb +1 -1
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +1 -1
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +5 -5
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +23 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +5 -4
- data/lib/capybara/spec/session/execute_script_spec.rb +4 -3
- data/lib/capybara/spec/session/fill_in_spec.rb +30 -5
- data/lib/capybara/spec/session/find_button_spec.rb +4 -3
- data/lib/capybara/spec/session/find_by_id_spec.rb +2 -1
- data/lib/capybara/spec/session/find_field_spec.rb +9 -15
- data/lib/capybara/spec/session/find_link_spec.rb +6 -5
- data/lib/capybara/spec/session/find_spec.rb +37 -31
- data/lib/capybara/spec/session/first_spec.rb +60 -33
- data/lib/capybara/spec/session/frame/frame_title_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/frame_url_spec.rb +23 -0
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +2 -1
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +9 -16
- data/lib/capybara/spec/session/go_back_spec.rb +1 -0
- data/lib/capybara/spec/session/go_forward_spec.rb +1 -0
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_button_spec.rb +2 -1
- data/lib/capybara/spec/session/has_css_spec.rb +3 -2
- data/lib/capybara/spec/session/has_current_path_spec.rb +49 -22
- data/lib/capybara/spec/session/has_field_spec.rb +4 -3
- data/lib/capybara/spec/session/has_link_spec.rb +5 -4
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +76 -0
- data/lib/capybara/spec/session/has_select_spec.rb +32 -31
- data/lib/capybara/spec/session/has_selector_spec.rb +5 -4
- data/lib/capybara/spec/session/has_table_spec.rb +2 -1
- data/lib/capybara/spec/session/has_text_spec.rb +9 -13
- data/lib/capybara/spec/session/has_title_spec.rb +1 -0
- data/lib/capybara/spec/session/has_xpath_spec.rb +1 -0
- data/lib/capybara/spec/session/headers.rb +2 -1
- data/lib/capybara/spec/session/html_spec.rb +1 -0
- data/lib/capybara/spec/session/node_spec.rb +107 -58
- data/lib/capybara/spec/session/node_wrapper_spec.rb +36 -0
- data/lib/capybara/spec/session/refresh_spec.rb +6 -2
- data/lib/capybara/spec/session/reset_session_spec.rb +19 -0
- data/lib/capybara/spec/session/response_code.rb +1 -0
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +1 -0
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +6 -11
- data/lib/capybara/spec/session/save_page_spec.rb +1 -17
- data/lib/capybara/spec/session/save_screenshot_spec.rb +3 -3
- data/lib/capybara/spec/session/select_spec.rb +21 -20
- data/lib/capybara/spec/session/selectors_spec.rb +2 -2
- data/lib/capybara/spec/session/sibling_spec.rb +1 -1
- data/lib/capybara/spec/session/text_spec.rb +17 -3
- data/lib/capybara/spec/session/title_spec.rb +11 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +4 -3
- data/lib/capybara/spec/session/unselect_spec.rb +7 -6
- data/lib/capybara/spec/session/visit_spec.rb +64 -3
- data/lib/capybara/spec/session/window/become_closed_spec.rb +2 -1
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +2 -1
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +2 -1
- data/lib/capybara/spec/session/window/window_spec.rb +12 -12
- data/lib/capybara/spec/session/window/windows_spec.rb +2 -3
- data/lib/capybara/spec/session/window/within_window_spec.rb +15 -71
- data/lib/capybara/spec/session/within_spec.rb +1 -0
- data/lib/capybara/spec/spec_helper.rb +36 -18
- data/lib/capybara/spec/test_app.rb +17 -9
- data/lib/capybara/spec/views/form.erb +7 -0
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +5 -0
- data/lib/capybara/spec/views/with_html.erb +27 -1
- data/lib/capybara/spec/views/with_js.erb +11 -0
- data/lib/capybara/spec/views/within_frames.erb +4 -1
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +6 -10
- data/lib/capybara.rb +29 -26
- data/spec/basic_node_spec.rb +1 -0
- data/spec/capybara_spec.rb +16 -69
- data/spec/dsl_spec.rb +5 -13
- data/spec/filter_set_spec.rb +5 -4
- data/spec/fixtures/selenium_driver_rspec_failure.rb +2 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +3 -2
- data/spec/minitest_spec.rb +13 -4
- data/spec/minitest_spec_spec.rb +12 -3
- data/spec/per_session_config_spec.rb +9 -8
- data/spec/rack_test_spec.rb +21 -20
- data/spec/result_spec.rb +17 -16
- data/spec/rspec/features_spec.rb +17 -14
- data/spec/rspec/scenarios_spec.rb +5 -7
- data/spec/rspec/shared_spec_matchers.rb +96 -99
- data/spec/rspec/views_spec.rb +2 -1
- data/spec/rspec_matchers_spec.rb +18 -2
- data/spec/rspec_spec.rb +11 -15
- data/spec/selector_spec.rb +5 -6
- data/spec/selenium_spec_chrome.rb +20 -11
- data/spec/selenium_spec_edge.rb +27 -0
- data/spec/selenium_spec_ie.rb +31 -0
- data/spec/selenium_spec_marionette.rb +38 -12
- data/spec/server_spec.rb +33 -33
- data/spec/session_spec.rb +2 -1
- data/spec/shared_selenium_session.rb +82 -22
- data/spec/spec_helper.rb +3 -6
- metadata +76 -81
- data/lib/capybara/query.rb +0 -7
- data/spec/selenium_spec_firefox.rb +0 -68
data/lib/capybara/helpers.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module Capybara
|
5
|
-
|
6
4
|
# @api private
|
7
5
|
module Helpers
|
8
6
|
extend self
|
9
7
|
|
10
8
|
##
|
11
|
-
#
|
9
|
+
# @deprecated
|
12
10
|
# Normalizes whitespace space by stripping leading and trailing
|
13
11
|
# whitespace and replacing sequences of whitespace characters
|
14
12
|
# with a single space.
|
@@ -17,6 +15,7 @@ module Capybara
|
|
17
15
|
# @return [String] Normalized text
|
18
16
|
#
|
19
17
|
def normalize_whitespace(text)
|
18
|
+
warn "DEPRECATED: Capybara::Helpers::normalize_whitespace is deprecated, please update your driver"
|
20
19
|
text.to_s.gsub(/[[:space:]]+/, ' ').strip
|
21
20
|
end
|
22
21
|
|
@@ -26,16 +25,17 @@ module Capybara
|
|
26
25
|
# if text is not a regexp
|
27
26
|
#
|
28
27
|
# @param [String] text Text to escape
|
29
|
-
# @
|
28
|
+
# @param [Boolean] exact (false) Whether or not this should be an exact text match
|
29
|
+
# @param [Fixnum, Boolean, nil] options Options passed to Regexp.new when creating the Regexp
|
30
|
+
# @return [Regexp] Regexp to match the passed in text and options
|
30
31
|
#
|
31
|
-
def to_regexp(text,
|
32
|
-
if text.is_a?(Regexp)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
32
|
+
def to_regexp(text, exact: false, all_whitespace: false, options: nil)
|
33
|
+
return text if text.is_a?(Regexp)
|
34
|
+
|
35
|
+
escaped = Regexp.escape(text)
|
36
|
+
escaped = escaped.gsub("\\ ", "[[:blank:]]") if all_whitespace
|
37
|
+
escaped = "\\A#{escaped}\\z" if exact
|
38
|
+
Regexp.new(escaped, options)
|
39
39
|
end
|
40
40
|
|
41
41
|
##
|
@@ -44,16 +44,14 @@ module Capybara
|
|
44
44
|
# `Capybara.asset_host`.
|
45
45
|
#
|
46
46
|
# @param [String] html HTML code to inject into
|
47
|
+
# @param [URL] host (Capybara.asset_host) The host from which assets should be loaded
|
47
48
|
# @return [String] The modified HTML code
|
48
49
|
#
|
49
|
-
def inject_asset_host(html,
|
50
|
-
if
|
50
|
+
def inject_asset_host(html, host: Capybara.asset_host)
|
51
|
+
if host && Nokogiri::HTML(html).css("base").empty?
|
51
52
|
match = html.match(/<head[^<]*?>/)
|
52
|
-
if match
|
53
|
-
return html.clone.insert match.end(0), "<base href='#{asset_host}' />"
|
54
|
-
end
|
53
|
+
return html.clone.insert match.end(0), "<base href='#{host}' />" if match
|
55
54
|
end
|
56
|
-
|
57
55
|
html
|
58
56
|
end
|
59
57
|
|
@@ -68,21 +66,13 @@ module Capybara
|
|
68
66
|
# @param [Integer] count The number of items
|
69
67
|
#
|
70
68
|
def declension(singular, plural, count)
|
71
|
-
|
72
|
-
singular
|
73
|
-
else
|
74
|
-
plural
|
75
|
-
end
|
69
|
+
count == 1 ? singular : plural
|
76
70
|
end
|
77
71
|
|
78
72
|
if defined?(Process::CLOCK_MONOTONIC)
|
79
|
-
def monotonic_time
|
80
|
-
Process.clock_gettime Process::CLOCK_MONOTONIC
|
81
|
-
end
|
73
|
+
def monotonic_time; Process.clock_gettime Process::CLOCK_MONOTONIC; end
|
82
74
|
else
|
83
|
-
def monotonic_time
|
84
|
-
Time.now.to_f
|
85
|
-
end
|
75
|
+
def monotonic_time; Time.now.to_f; end
|
86
76
|
end
|
87
77
|
end
|
88
78
|
end
|
@@ -3,30 +3,34 @@ require 'minitest/spec'
|
|
3
3
|
module Capybara
|
4
4
|
module Minitest
|
5
5
|
module Expectations
|
6
|
-
%w
|
6
|
+
%w[text content title current_path].each do |assertion|
|
7
7
|
infect_an_assertion "assert_#{assertion}", "must_have_#{assertion}", :reverse
|
8
8
|
infect_an_assertion "refute_#{assertion}", "wont_have_#{assertion}", :reverse
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
# rubocop:disable Style/MultilineBlockChain
|
12
|
+
(%w[selector xpath css link button field select table checked_field unchecked_field].flat_map do |assertion|
|
13
|
+
[%W[assert_#{assertion} must_have_#{assertion}],
|
14
|
+
%W[refute_#{assertion} wont_have_#{assertion}]]
|
15
|
+
end + [%w[assert_all_of_selectors must_have_all_of_selectors],
|
16
|
+
%w[assert_none_of_selectors must_have_none_of_selectors]] +
|
17
|
+
%w[selector xpath css].flat_map do |assertion|
|
18
|
+
[%W[assert_matches_#{assertion} must_match_#{assertion}],
|
19
|
+
%W[refute_matches_#{assertion} wont_match_#{assertion}]]
|
20
|
+
end).each do |(meth, new_name)|
|
21
|
+
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
19
22
|
def #{new_name} *args, &block
|
20
23
|
::Minitest::Expectation.new(self, ::Minitest::Spec.current).#{new_name}(*args, &block)
|
21
24
|
end
|
22
|
-
|
25
|
+
ASSERTION
|
23
26
|
|
24
|
-
::Minitest::Expectation.class_eval <<-
|
27
|
+
::Minitest::Expectation.class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
25
28
|
def #{new_name} *args, &block
|
26
29
|
ctx.#{meth}(target, *args, &block)
|
27
30
|
end
|
28
|
-
|
31
|
+
ASSERTION
|
29
32
|
end
|
33
|
+
# rubocop:enable Style/MultilineBlockChain
|
30
34
|
|
31
35
|
##
|
32
36
|
# Expectation that there is xpath
|
@@ -157,7 +161,6 @@ module Capybara
|
|
157
161
|
#
|
158
162
|
# @!method wont_have_current_path
|
159
163
|
# see {Capybara::SessionMatchers#assert_no_current_path}
|
160
|
-
|
161
164
|
end
|
162
165
|
end
|
163
166
|
end
|
data/lib/capybara/minitest.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'minitest'
|
3
4
|
require 'capybara/dsl'
|
4
5
|
|
@@ -41,17 +42,16 @@ module Capybara
|
|
41
42
|
# @!method assert_no_current_path
|
42
43
|
# see {Capybara::SessionMatchers#assert_no_current_path}
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
self.class_eval <<-EOM, __FILE__, __LINE__ + 1
|
45
|
+
%w[assert_text assert_no_text assert_title assert_no_title assert_current_path assert_no_current_path].each do |assertion_name|
|
46
|
+
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
47
47
|
def #{assertion_name} *args
|
48
48
|
self.assertions +=1
|
49
|
-
subject,
|
49
|
+
subject, args = determine_subject(args)
|
50
50
|
subject.#{assertion_name}(*args)
|
51
51
|
rescue Capybara::ExpectationNotMet => e
|
52
52
|
raise ::Minitest::Assertion, e.message
|
53
53
|
end
|
54
|
-
|
54
|
+
ASSERTION
|
55
55
|
end
|
56
56
|
|
57
57
|
alias_method :refute_title, :assert_no_title
|
@@ -81,188 +81,191 @@ module Capybara
|
|
81
81
|
# @!method assert_xpath
|
82
82
|
# see {Capybara::Node::Matchers#assert_not_matches_selector}
|
83
83
|
|
84
|
-
%w
|
85
|
-
|
84
|
+
%w[assert_selector assert_no_selector
|
85
|
+
assert_all_of_selectors assert_none_of_selectors
|
86
|
+
assert_matches_selector assert_not_matches_selector].each do |assertion_name|
|
87
|
+
class_eval <<-ASSERTION, __FILE__, __LINE__ + 1
|
86
88
|
def #{assertion_name} *args, &optional_filter_block
|
87
89
|
self.assertions +=1
|
88
|
-
subject,
|
90
|
+
subject, args = determine_subject(args)
|
89
91
|
subject.#{assertion_name}(*args, &optional_filter_block)
|
90
92
|
rescue Capybara::ExpectationNotMet => e
|
91
93
|
raise ::Minitest::Assertion, e.message
|
92
94
|
end
|
93
|
-
|
95
|
+
ASSERTION
|
94
96
|
end
|
95
97
|
|
96
98
|
alias_method :refute_selector, :assert_no_selector
|
97
99
|
alias_method :refute_matches_selector, :assert_not_matches_selector
|
98
100
|
|
99
|
-
%w
|
101
|
+
%w[xpath css link button field select table].each do |selector_type|
|
100
102
|
define_method "assert_#{selector_type}" do |*args, &optional_filter_block|
|
101
|
-
subject,
|
103
|
+
subject, args = determine_subject(args)
|
102
104
|
locator, options = extract_locator(args)
|
103
105
|
assert_selector(subject, selector_type.to_sym, locator, options, &optional_filter_block)
|
104
106
|
end
|
105
107
|
|
106
108
|
define_method "assert_no_#{selector_type}" do |*args, &optional_filter_block|
|
107
|
-
subject,
|
109
|
+
subject, args = determine_subject(args)
|
108
110
|
locator, options = extract_locator(args)
|
109
111
|
assert_no_selector(subject, selector_type.to_sym, locator, options, &optional_filter_block)
|
110
112
|
end
|
111
113
|
alias_method "refute_#{selector_type}", "assert_no_#{selector_type}"
|
112
114
|
end
|
113
115
|
|
114
|
-
%w
|
116
|
+
%w[checked unchecked].each do |field_type|
|
115
117
|
define_method "assert_#{field_type}_field" do |*args, &optional_filter_block|
|
116
|
-
subject,
|
118
|
+
subject, args = determine_subject(args)
|
117
119
|
locator, options = extract_locator(args)
|
118
120
|
assert_selector(subject, :field, locator, options.merge(field_type.to_sym => true), &optional_filter_block)
|
119
121
|
end
|
120
122
|
|
121
123
|
define_method "assert_no_#{field_type}_field" do |*args, &optional_filter_block|
|
122
|
-
subject,
|
124
|
+
subject, args = determine_subject(args)
|
123
125
|
locator, options = extract_locator(args)
|
124
126
|
assert_no_selector(subject, :field, locator, options.merge(field_type.to_sym => true), &optional_filter_block)
|
125
127
|
end
|
126
128
|
alias_method "refute_#{field_type}_field", "assert_no_#{field_type}_field"
|
127
129
|
end
|
128
130
|
|
129
|
-
%w
|
131
|
+
%w[xpath css].each do |selector_type|
|
130
132
|
define_method "assert_matches_#{selector_type}" do |*args, &optional_filter_block|
|
131
|
-
subject,
|
133
|
+
subject, args = determine_subject(args)
|
132
134
|
assert_matches_selector(subject, selector_type.to_sym, *args, &optional_filter_block)
|
133
135
|
end
|
134
136
|
|
135
137
|
define_method "assert_not_matches_#{selector_type}" do |*args, &optional_filter_block|
|
136
|
-
subject,
|
138
|
+
subject, args = determine_subject(args)
|
137
139
|
assert_not_matches_selector(subject, selector_type.to_sym, *args, &optional_filter_block)
|
138
140
|
end
|
139
141
|
alias_method "refute_matches_#{selector_type}", "assert_not_matches_#{selector_type}"
|
140
142
|
end
|
141
143
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
private
|
144
|
+
##
|
145
|
+
# Assertion that there is xpath
|
146
|
+
#
|
147
|
+
# @!method assert_xpath
|
148
|
+
# see Capybara::Node::Matchers#has_xpath?
|
149
|
+
|
150
|
+
##
|
151
|
+
# Assertion that there is no xpath
|
152
|
+
#
|
153
|
+
# @!method refute_xpath
|
154
|
+
# @!method assert_no_xpath
|
155
|
+
# see Capybara::Node::Matchers#has_no_xpath?
|
156
|
+
|
157
|
+
##
|
158
|
+
# Assertion that there is css
|
159
|
+
#
|
160
|
+
# @!method assert_css
|
161
|
+
# see Capybara::Node::Matchers#has_css?
|
162
|
+
|
163
|
+
##
|
164
|
+
# Assertion that there is no css
|
165
|
+
#
|
166
|
+
# @!method refute_css
|
167
|
+
# @!method assert_no_css
|
168
|
+
# see Capybara::Node::Matchers#has_no_css?
|
169
|
+
|
170
|
+
##
|
171
|
+
# Assertion that there is link
|
172
|
+
#
|
173
|
+
# @!method assert_link
|
174
|
+
# see {Capybara::Node::Matchers#has_link?}
|
175
|
+
|
176
|
+
##
|
177
|
+
# Assertion that there is no link
|
178
|
+
#
|
179
|
+
# @!method assert_no_link
|
180
|
+
# @!method refute_link
|
181
|
+
# see {Capybara::Node::Matchers#has_no_link?}
|
182
|
+
|
183
|
+
##
|
184
|
+
# Assertion that there is button
|
185
|
+
#
|
186
|
+
# @!method assert_button
|
187
|
+
# see {Capybara::Node::Matchers#has_button?}
|
188
|
+
|
189
|
+
##
|
190
|
+
# Assertion that there is no button
|
191
|
+
#
|
192
|
+
# @!method refute_button
|
193
|
+
# @!method assert_no_button
|
194
|
+
# see {Capybara::Node::Matchers#has_no_button?}
|
195
|
+
|
196
|
+
##
|
197
|
+
# Assertion that there is field
|
198
|
+
#
|
199
|
+
# @!method assert_field
|
200
|
+
# see {Capybara::Node::Matchers#has_field?}
|
201
|
+
|
202
|
+
##
|
203
|
+
# Assertion that there is no field
|
204
|
+
#
|
205
|
+
# @!method refute_field
|
206
|
+
# @!method assert_no_field
|
207
|
+
# see {Capybara::Node::Matchers#has_no_field?}
|
208
|
+
|
209
|
+
##
|
210
|
+
# Assertion that there is checked_field
|
211
|
+
#
|
212
|
+
# @!method assert_checked_field
|
213
|
+
# see {Capybara::Node::Matchers#has_checked_field?}
|
214
|
+
|
215
|
+
##
|
216
|
+
# Assertion that there is no checked_field
|
217
|
+
#
|
218
|
+
# @!method assert_no_checked_field
|
219
|
+
# @!method refute_checked_field
|
220
|
+
|
221
|
+
##
|
222
|
+
# Assertion that there is unchecked_field
|
223
|
+
#
|
224
|
+
# @!method assert_unchecked_field
|
225
|
+
# see {Capybara::Node::Matchers#has_unchecked_field?}
|
226
|
+
|
227
|
+
##
|
228
|
+
# Assertion that there is no unchecked_field
|
229
|
+
#
|
230
|
+
# @!method assert_no_unchecked_field
|
231
|
+
# @!method refute_unchecked_field
|
232
|
+
|
233
|
+
##
|
234
|
+
# Assertion that there is select
|
235
|
+
#
|
236
|
+
# @!method assert_select
|
237
|
+
# see {Capybara::Node::Matchers#has_select?}
|
238
|
+
|
239
|
+
##
|
240
|
+
# Assertion that there is no select
|
241
|
+
#
|
242
|
+
# @!method refute_select
|
243
|
+
# @!method assert_no_select
|
244
|
+
# see {Capybara::Node::Matchers#has_no_select?}
|
245
|
+
|
246
|
+
##
|
247
|
+
# Assertion that there is table
|
248
|
+
#
|
249
|
+
# @!method assert_table
|
250
|
+
# see {Capybara::Node::Matchers#has_table?}
|
251
|
+
|
252
|
+
##
|
253
|
+
# Assertion that there is no table
|
254
|
+
#
|
255
|
+
# @!method refute_table
|
256
|
+
# @!method assert_no_table
|
257
|
+
# see {Capybara::Node::Matchers#has_no_table?}
|
258
|
+
|
259
|
+
private
|
259
260
|
|
260
261
|
def determine_subject(args)
|
261
262
|
case args.first
|
262
263
|
when Capybara::Session, Capybara::Node::Base, Capybara::Node::Simple
|
263
|
-
args
|
264
|
+
[args.shift, args]
|
265
|
+
when ->(arg) { arg.respond_to?(:to_capybara_node) }
|
266
|
+
[args.shift.to_capybara_node, args]
|
264
267
|
else
|
265
|
-
[page,
|
268
|
+
[page, args]
|
266
269
|
end
|
267
270
|
end
|
268
271
|
|