Module: Capybara::Node::Matchers
Instance Method Summary collapse
-
#has_button?(locator) ⇒ Boolean
Checks if the page or current node has a button with the given text, value or id.
-
#has_checked_field?(locator) ⇒ Boolean
Checks if the page or current node has a radio button or checkbox with the given label, value or id, that is currently checked.
-
#has_css?(path, options = {}) ⇒ Boolean
Checks if a given CSS selector is on the page or current node.
-
#has_field?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a form field with the given label, name or id.
-
#has_link?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a link with the given text or id.
-
#has_no_button?(locator) ⇒ Boolean
Checks if the page or current node has no button with the given text, value or id.
-
#has_no_checked_field?(locator) ⇒ Boolean
Checks if the page or current node has no radio button or checkbox with the given label, value or id, that is currently checked.
-
#has_no_css?(path, options = {}) ⇒ Boolean
Checks if a given CSS selector is not on the page or current node.
-
#has_no_field?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no form field with the given label, name or id.
-
#has_no_link?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no link with the given text or id.
-
#has_no_select?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no select field with the given label, name or id.
-
#has_no_selector?(*args) ⇒ Boolean
Checks if a given selector is not on the page or current node.
-
#has_no_table?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no table with the given id or caption.
-
#has_no_text?(content) ⇒ Boolean
(also: #has_no_content?)
Checks if the page or current node does not have the given text content, ignoring any HTML tags and normalizing whitespace.
-
#has_no_unchecked_field?(locator) ⇒ Boolean
Checks if the page or current node has no radio button or checkbox with the given label, value or id, that is currently unchecked.
-
#has_no_xpath?(path, options = {}) ⇒ Boolean
Checks if a given XPath expression is not on the page or current node.
-
#has_select?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a select field with the given label, name or id.
-
#has_selector?(*args) ⇒ Boolean
Checks if a given selector is on the page or current node.
-
#has_table?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a table with the given id or caption.
-
#has_text?(content) ⇒ Boolean
(also: #has_content?)
Checks if the page or current node has the given text content, ignoring any HTML tags and normalizing whitespace.
-
#has_unchecked_field?(locator) ⇒ Boolean
Checks if the page or current node has a radio button or checkbox with the given label, value or id, that is currently unchecked.
-
#has_xpath?(path, options = {}) ⇒ Boolean
Checks if a given XPath expression is on the page or current node.
Instance Method Details
#has_button?(locator) ⇒ Boolean
Checks if the page or current node has a button with the given text, value or id.
255 256 257 |
# File 'lib/capybara/node/matchers.rb', line 255 def (locator) has_selector?(:button, locator) end |
#has_checked_field?(locator) ⇒ Boolean
Checks if the page or current node has a radio button or checkbox with the given label, value or id, that is currently checked.
312 313 314 |
# File 'lib/capybara/node/matchers.rb', line 312 def has_checked_field?(locator) has_selector?(:field, locator, :checked => true) end |
#has_css?(path, options = {}) ⇒ Boolean
Checks if a given CSS selector is on the page or current node.
page.has_css?('p#foo')
By default it will check if the selector occurs at least once, but a different number can be specified.
page.has_css?('p#foo', :count => 4)
This will check if the selector occurs exactly 4 times.
It also accepts all options that Finders#all accepts, such as :text and :visible.
page.has_css?('li', :text => 'Horse', :visible => true)
159 160 161 |
# File 'lib/capybara/node/matchers.rb', line 159 def has_css?(path, ={}) has_selector?(:css, path, ) end |
#has_field?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a form field with the given label, name or id.
For text fields and other textual fields, such as textareas and HTML5 email/url/etc. fields, it’s possible to specify a :with option to specify the text the field should contain:
page.has_field?('Name', :with => 'Jonas')
286 287 288 |
# File 'lib/capybara/node/matchers.rb', line 286 def has_field?(locator, ={}) has_selector?(:field, locator, ) end |
#has_link?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a link with the given text or id.
231 232 233 |
# File 'lib/capybara/node/matchers.rb', line 231 def has_link?(locator, ={}) has_selector?(:link, locator, ) end |
#has_no_button?(locator) ⇒ Boolean
Checks if the page or current node has no button with the given text, value or id.
267 268 269 |
# File 'lib/capybara/node/matchers.rb', line 267 def (locator) has_no_selector?(:button, locator) end |
#has_no_checked_field?(locator) ⇒ Boolean
Checks if the page or current node has no radio button or checkbox with the given label, value or id, that is currently checked.
325 326 327 |
# File 'lib/capybara/node/matchers.rb', line 325 def has_no_checked_field?(locator) has_no_selector?(:field, locator, :checked => true) end |
#has_no_css?(path, options = {}) ⇒ Boolean
Checks if a given CSS selector is not on the page or current node. Usage is identical to Capybara::Node::Matchers#has_css?
171 172 173 |
# File 'lib/capybara/node/matchers.rb', line 171 def has_no_css?(path, ={}) has_no_selector?(:css, path, ) end |
#has_no_field?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no form field with the given label, name or id. See #has_field?.
299 300 301 |
# File 'lib/capybara/node/matchers.rb', line 299 def has_no_field?(locator, ={}) has_no_selector?(:field, locator, ) end |
#has_no_link?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no link with the given text or id.
243 244 245 |
# File 'lib/capybara/node/matchers.rb', line 243 def has_no_link?(locator, ={}) has_no_selector?(:link, locator, ) end |
#has_no_select?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no select field with the given label, name or id. See #has_select?.
390 391 392 |
# File 'lib/capybara/node/matchers.rb', line 390 def has_no_select?(locator, ={}) has_no_selector?(:select, locator, ) end |
#has_no_selector?(*args) ⇒ Boolean
Checks if a given selector is not on the page or current node. Usage is identical to Capybara::Node::Matchers#has_selector?
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/capybara/node/matchers.rb', line 67 def has_no_selector?(*args) = if args.last.is_a?(Hash) then args.last else {} end wait_until do results = all(*args) case when results.empty? true when [:between] not([:between] === results.size) when [:count] not([:count].to_i == results.size) when [:maximum] not([:maximum].to_i >= results.size) when [:minimum] not([:minimum].to_i <= results.size) else results.empty? end or raise ExpectationNotMet end rescue Capybara::ExpectationNotMet return false end |
#has_no_table?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has no table with the given id or caption. See #has_table?.
422 423 424 |
# File 'lib/capybara/node/matchers.rb', line 422 def has_no_table?(locator, ={}) has_no_selector?(:table, locator, ) end |
#has_no_text?(content) ⇒ Boolean Also known as: has_no_content?
Checks if the page or current node does not have the given text content, ignoring any HTML tags and normalizing whitespace.
Unlike has_content this only matches displayable text and specifically excludes text contained within non-display nodes such as script or head tags.
209 210 211 212 213 214 215 216 217 218 |
# File 'lib/capybara/node/matchers.rb', line 209 def has_no_text?(content) normalized_content = normalize_whitespace(content) wait_until do !normalize_whitespace(text).include?(normalized_content) or raise ExpectationNotMet end rescue Capybara::ExpectationNotMet return false end |
#has_no_unchecked_field?(locator) ⇒ Boolean
Checks if the page or current node has no radio button or checkbox with the given label, value or id, that is currently unchecked.
351 352 353 |
# File 'lib/capybara/node/matchers.rb', line 351 def has_no_unchecked_field?(locator) has_no_selector?(:field, locator, :unchecked => true) end |
#has_no_xpath?(path, options = {}) ⇒ Boolean
Checks if a given XPath expression is not on the page or current node. Usage is identical to Capybara::Node::Matchers#has_xpath?
132 133 134 |
# File 'lib/capybara/node/matchers.rb', line 132 def has_no_xpath?(path, ={}) has_no_selector?(:xpath, path, ) end |
#has_select?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a select field with the given label, name or id.
It can be specified which option should currently be selected:
page.has_select?('Language', :selected => 'German')
For multiple select boxes, several options may be specified:
page.has_select?('Language', :selected => ['English', 'German'])
It’s also possible to check if a given set of options exists for this select box:
page.has_select?('Language', :options => ['English', 'German'])
378 379 380 |
# File 'lib/capybara/node/matchers.rb', line 378 def has_select?(locator, ={}) has_selector?(:select, locator, ) end |
#has_selector?(*args) ⇒ Boolean
Checks if a given selector is on the page or current node.
page.has_selector?('p#foo')
page.has_selector?(:xpath, './/p[@id="foo"]')
page.has_selector?(:foo)
By default it will check if the expression occurs at least once, but a different number can be specified.
page.has_selector?('p#foo', :count => 4)
This will check if the expression occurs exactly 4 times.
It also accepts all options that Finders#all accepts, such as :text and :visible.
page.has_selector?('li', :text => 'Horse', :visible => true)
has_selector? can also accept XPath expressions generated by the XPath gem:
xpath = XPath.generate { |x| x.descendant(:p) }
page.has_selector?(:xpath, xpath)
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/capybara/node/matchers.rb', line 35 def has_selector?(*args) = if args.last.is_a?(Hash) then args.last else {} end wait_until do results = all(*args) case when results.empty? false when [:between] [:between] === results.size when [:count] [:count].to_i == results.size when [:maximum] [:maximum].to_i >= results.size when [:minimum] [:minimum].to_i <= results.size else results.size > 0 end or raise ExpectationNotMet end rescue Capybara::ExpectationNotMet return false end |
#has_table?(locator, options = {}) ⇒ Boolean
Checks if the page or current node has a table with the given id or caption.
If the options :rows is given, it will check that the table contains the rows and columns given:
page.has_table?('People', :rows => [['Jonas', '24'], ['Peter', '32']])
Note that this option is quite strict, the order needs to be correct and the text needs to match exactly.
410 411 412 |
# File 'lib/capybara/node/matchers.rb', line 410 def has_table?(locator, ={}) has_selector?(:table, locator, ) end |
#has_text?(content) ⇒ Boolean Also known as: has_content?
Checks if the page or current node has the given text content, ignoring any HTML tags and normalizing whitespace.
Unlike has_content this only matches displayable text and specifically excludes text contained within non-display nodes such as script or head tags.
186 187 188 189 190 191 192 193 194 195 |
# File 'lib/capybara/node/matchers.rb', line 186 def has_text?(content) normalized_content = normalize_whitespace(content) wait_until do normalize_whitespace(text).include?(normalized_content) or raise ExpectationNotMet end rescue Capybara::ExpectationNotMet return false end |
#has_unchecked_field?(locator) ⇒ Boolean
Checks if the page or current node has a radio button or checkbox with the given label, value or id, that is currently unchecked.
338 339 340 |
# File 'lib/capybara/node/matchers.rb', line 338 def has_unchecked_field?(locator) has_selector?(:field, locator, :unchecked => true) end |
#has_xpath?(path, options = {}) ⇒ Boolean
Checks if a given XPath expression is on the page or current node.
page.has_xpath?('.//p[@id="foo"]')
By default it will check if the expression occurs at least once, but a different number can be specified.
page.has_xpath?('.//p[@id="foo"]', :count => 4)
This will check if the expression occurs exactly 4 times.
It also accepts all options that Finders#all accepts, such as :text and :visible.
page.has_xpath?('.//li', :text => 'Horse', :visible => true)
has_xpath? can also accept XPath expressions generate by the XPath gem:
xpath = XPath.generate { |x| x.descendant(:p) }
page.has_xpath?(xpath)
120 121 122 |
# File 'lib/capybara/node/matchers.rb', line 120 def has_xpath?(path, ={}) has_selector?(:xpath, path, ) end |