capybara 2.18.0 → 3.0.0.rc1

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