2010-07-09 20:20:32 -04:00
|
|
|
module Capybara
|
2010-11-21 08:37:36 -05:00
|
|
|
module Node
|
2010-07-09 20:20:32 -04:00
|
|
|
module Matchers
|
2010-08-24 06:37:35 -04:00
|
|
|
|
|
|
|
##
|
|
|
|
#
|
2010-10-12 07:26:24 -04:00
|
|
|
# Checks if a given selector is on the page or current node.
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
2010-10-12 07:26:24 -04:00
|
|
|
# page.has_selector?('p#foo')
|
|
|
|
# page.has_selector?(:xpath, './/p[@id="foo"]')
|
|
|
|
# page.has_selector?(:foo)
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
|
|
|
# By default it will check if the expression occurs at least once,
|
|
|
|
# but a different number can be specified.
|
|
|
|
#
|
2013-02-09 01:29:15 -05:00
|
|
|
# page.has_selector?('p.foo', :count => 4)
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
|
|
|
# This will check if the expression occurs exactly 4 times.
|
|
|
|
#
|
|
|
|
# It also accepts all options that {Capybara::Node::Finders#all} accepts,
|
|
|
|
# such as :text and :visible.
|
|
|
|
#
|
2010-10-12 07:26:24 -04:00
|
|
|
# page.has_selector?('li', :text => 'Horse', :visible => true)
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
2010-10-12 07:26:24 -04:00
|
|
|
# has_selector? can also accept XPath expressions generated by the
|
2010-08-24 06:37:35 -04:00
|
|
|
# XPath gem:
|
|
|
|
#
|
2012-07-13 14:33:14 -04:00
|
|
|
# page.has_selector?(:xpath, XPath.descendant(:p))
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
2010-10-12 07:26:24 -04:00
|
|
|
# @param (see Capybara::Node::Finders#all)
|
2013-03-28 22:15:07 -04:00
|
|
|
# @param args
|
|
|
|
# @option args [Integer] :count (nil) Number of times the text should occur
|
|
|
|
# @option args [Integer] :minimum (nil) Minimum number of times the text should occur
|
|
|
|
# @option args [Integer] :maximum (nil) Maximum number of times the text should occur
|
|
|
|
# @option args [Range] :between (nil) Range of times that should contain number of times text occurs
|
|
|
|
# @return [Boolean] If the expression exists
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
2010-10-12 07:26:24 -04:00
|
|
|
def has_selector?(*args)
|
2012-07-09 07:39:57 -04:00
|
|
|
assert_selector(*args)
|
2011-08-12 08:38:42 -04:00
|
|
|
rescue Capybara::ExpectationNotMet
|
2010-07-09 20:20:32 -04:00
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
2012-07-13 14:34:56 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if a given selector is not on the page or current node.
|
|
|
|
# Usage is identical to Capybara::Node::Matchers#has_selector?
|
|
|
|
#
|
|
|
|
# @param (see Capybara::Node::Finders#has_selector?)
|
|
|
|
# @return [Boolean]
|
|
|
|
#
|
|
|
|
def has_no_selector?(*args)
|
|
|
|
assert_no_selector(*args)
|
|
|
|
rescue Capybara::ExpectationNotMet
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
2012-07-13 14:33:14 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Asserts that a given selector is on the page or current node.
|
|
|
|
#
|
|
|
|
# page.assert_selector('p#foo')
|
|
|
|
# page.assert_selector(:xpath, './/p[@id="foo"]')
|
|
|
|
# page.assert_selector(:foo)
|
|
|
|
#
|
|
|
|
# By default it will check if the expression occurs at least once,
|
|
|
|
# but a different number can be specified.
|
|
|
|
#
|
|
|
|
# page.assert_selector('p#foo', :count => 4)
|
|
|
|
#
|
2014-01-17 14:00:45 -05:00
|
|
|
# This will check if the expression occurs exactly 4 times. See
|
|
|
|
# {Capybara::Node::Finders#all} for other available result size options.
|
|
|
|
#
|
|
|
|
# If a :count of 0 is specified, it will behave like {#assert_no_selector};
|
|
|
|
# however, use of that method is preferred over this one.
|
2012-07-13 14:33:14 -04:00
|
|
|
#
|
|
|
|
# It also accepts all options that {Capybara::Node::Finders#all} accepts,
|
|
|
|
# such as :text and :visible.
|
|
|
|
#
|
|
|
|
# page.assert_selector('li', :text => 'Horse', :visible => true)
|
|
|
|
#
|
2013-03-04 16:35:11 -05:00
|
|
|
# `assert_selector` can also accept XPath expressions generated by the
|
2012-07-13 14:33:14 -04:00
|
|
|
# XPath gem:
|
|
|
|
#
|
|
|
|
# page.assert_selector(:xpath, XPath.descendant(:p))
|
|
|
|
#
|
|
|
|
# @param (see Capybara::Node::Finders#all)
|
|
|
|
# @option options [Integer] :count (nil) Number of times the expression should occur
|
|
|
|
# @raise [Capybara::ExpectationNotMet] If the selector does not exist
|
|
|
|
#
|
2012-07-09 07:39:57 -04:00
|
|
|
def assert_selector(*args)
|
2013-07-03 08:05:45 -04:00
|
|
|
query = Capybara::Query.new(*args)
|
|
|
|
synchronize(query.wait) do
|
2012-06-08 10:47:01 -04:00
|
|
|
result = all(*args)
|
2014-02-03 09:10:58 -05:00
|
|
|
raise Capybara::ExpectationNotMet, result.failure_message if result.size == 0 && !Capybara::Helpers.expects_none?(query.options)
|
2012-06-08 10:47:01 -04:00
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2012-07-13 14:33:14 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Asserts that a given selector is not on the page or current node.
|
|
|
|
# Usage is identical to Capybara::Node::Matchers#assert_selector
|
|
|
|
#
|
2014-01-17 14:00:45 -05:00
|
|
|
# Query options such as :count, :minimum, :maximum, and :between are
|
|
|
|
# considered to be an integral part of the selector. This will return
|
|
|
|
# true, for example, if a page contains 4 anchors but the query expects 5:
|
|
|
|
#
|
|
|
|
# page.assert_no_selector('a', :minimum => 1) # Found, raises Capybara::ExpectationNotMet
|
|
|
|
# page.assert_no_selector('a', :count => 4) # Found, raises Capybara::ExpectationNotMet
|
|
|
|
# page.assert_no_selector('a', :count => 5) # Not Found, returns true
|
|
|
|
#
|
2012-07-13 14:33:14 -04:00
|
|
|
# @param (see Capybara::Node::Finders#assert_selector)
|
|
|
|
# @raise [Capybara::ExpectationNotMet] If the selector exists
|
|
|
|
#
|
2012-07-09 07:39:57 -04:00
|
|
|
def assert_no_selector(*args)
|
2013-07-03 08:05:45 -04:00
|
|
|
query = Capybara::Query.new(*args)
|
|
|
|
synchronize(query.wait) do
|
2014-01-17 14:00:45 -05:00
|
|
|
begin
|
|
|
|
result = all(*args)
|
|
|
|
rescue Capybara::ExpectationNotMet => e
|
|
|
|
return true
|
|
|
|
else
|
2014-02-03 09:10:58 -05:00
|
|
|
if result.size > 0 || (result.size == 0 && Capybara::Helpers.expects_none?(query.options))
|
2014-01-17 15:48:18 -05:00
|
|
|
raise(Capybara::ExpectationNotMet, result.negative_failure_message)
|
|
|
|
end
|
2014-01-17 14:00:45 -05:00
|
|
|
end
|
2012-06-08 10:47:01 -04:00
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2014-01-29 06:45:18 -05:00
|
|
|
alias_method :refute_selector, :assert_no_selector
|
|
|
|
|
2010-10-12 07:26:24 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# 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 {Capybara::Node::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)
|
|
|
|
#
|
|
|
|
# @param [String] path An XPath expression
|
|
|
|
# @param options (see Capybara::Node::Finders#all)
|
|
|
|
# @option options [Integer] :count (nil) Number of times the expression should occur
|
|
|
|
# @return [Boolean] If the expression exists
|
|
|
|
#
|
|
|
|
def has_xpath?(path, options={})
|
|
|
|
has_selector?(:xpath, path, options)
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if a given XPath expression is not on the page or current node.
|
|
|
|
# Usage is identical to Capybara::Node::Matchers#has_xpath?
|
|
|
|
#
|
|
|
|
# @param (see Capybara::Node::Finders#has_xpath?)
|
|
|
|
# @return [Boolean]
|
|
|
|
#
|
|
|
|
def has_no_xpath?(path, options={})
|
|
|
|
has_no_selector?(:xpath, path, options)
|
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# 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 {Capybara::Node::Finders#all} accepts,
|
|
|
|
# such as :text and :visible.
|
|
|
|
#
|
|
|
|
# page.has_css?('li', :text => 'Horse', :visible => true)
|
|
|
|
#
|
|
|
|
# @param [String] path A CSS selector
|
|
|
|
# @param options (see Capybara::Node::Finders#all)
|
|
|
|
# @option options [Integer] :count (nil) Number of times the selector should occur
|
|
|
|
# @return [Boolean] If the selector exists
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_css?(path, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_selector?(:css, path, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if a given CSS selector is not on the page or current node.
|
|
|
|
# Usage is identical to Capybara::Node::Matchers#has_css?
|
|
|
|
#
|
|
|
|
# @param (see Capybara::Node::Finders#has_css?)
|
|
|
|
# @return [Boolean]
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_no_css?(path, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_no_selector?(:css, path, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2011-10-15 05:06:44 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has the given text content,
|
2011-11-15 09:56:53 -05:00
|
|
|
# ignoring any HTML tags and normalizing whitespace.
|
2011-10-15 05:06:44 -04:00
|
|
|
#
|
2013-03-03 18:04:23 -05:00
|
|
|
# By default it will check if the text occurs at least once,
|
|
|
|
# but a different number can be specified.
|
|
|
|
#
|
|
|
|
# page.has_text?('lorem ipsum', between: 2..4)
|
2011-10-15 05:06:44 -04:00
|
|
|
#
|
2013-03-03 18:04:23 -05:00
|
|
|
# This will check if the text occurs from 2 to 4 times.
|
2011-10-15 05:06:44 -04:00
|
|
|
#
|
2013-03-04 16:35:11 -05:00
|
|
|
# @overload has_text?([type], text, [options])
|
|
|
|
# @param [:all, :visible] type Whether to check for only visible or all text
|
|
|
|
# @param [String, Regexp] text The text/regexp to check for
|
|
|
|
# @param [Hash] options additional options
|
|
|
|
# @option options [Integer] :count (nil) Number of times the text should occur
|
|
|
|
# @option options [Integer] :minimum (nil) Minimum number of times the text should occur
|
|
|
|
# @option options [Integer] :maximum (nil) Maximum number of times the text should occur
|
|
|
|
# @option options [Range] :between (nil) Range of times that should contain number of times text occurs
|
|
|
|
# @return [Boolean] Whether it exists
|
2013-03-03 18:04:23 -05:00
|
|
|
#
|
|
|
|
def has_text?(*args)
|
2013-07-03 08:05:45 -04:00
|
|
|
query = Capybara::Query.new(*args)
|
|
|
|
synchronize(query.wait) do
|
2013-03-03 18:04:23 -05:00
|
|
|
raise ExpectationNotMet unless text_found?(*args)
|
2011-10-16 19:46:19 -04:00
|
|
|
end
|
2012-06-08 10:47:01 -04:00
|
|
|
return true
|
2011-10-16 19:46:19 -04:00
|
|
|
rescue Capybara::ExpectationNotMet
|
|
|
|
return false
|
2011-10-15 05:06:44 -04:00
|
|
|
end
|
2012-01-03 08:24:04 -05:00
|
|
|
alias_method :has_content?, :has_text?
|
2011-10-15 05:06:44 -04:00
|
|
|
|
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node does not have the given text
|
|
|
|
# content, ignoring any HTML tags and normalizing whitespace.
|
|
|
|
#
|
2013-03-03 18:04:23 -05:00
|
|
|
# @param (see #has_text?)
|
|
|
|
# @return [Boolean] Whether it doesn't exist
|
2011-10-15 05:06:44 -04:00
|
|
|
#
|
2013-03-03 18:04:23 -05:00
|
|
|
def has_no_text?(*args)
|
2013-07-03 08:05:45 -04:00
|
|
|
query = Capybara::Query.new(*args)
|
|
|
|
synchronize(query.wait) do
|
2013-03-03 18:04:23 -05:00
|
|
|
raise ExpectationNotMet if text_found?(*args)
|
2011-10-16 19:46:19 -04:00
|
|
|
end
|
2012-06-08 10:47:01 -04:00
|
|
|
return true
|
2011-10-16 19:46:19 -04:00
|
|
|
rescue Capybara::ExpectationNotMet
|
|
|
|
return false
|
2011-10-15 05:06:44 -04:00
|
|
|
end
|
2012-01-03 08:24:04 -05:00
|
|
|
alias_method :has_no_content?, :has_no_text?
|
2011-10-15 05:06:44 -04:00
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has a link with the given
|
|
|
|
# text or id.
|
|
|
|
#
|
2010-11-18 18:08:26 -05:00
|
|
|
# @param [String] locator The text or id of a link to check for
|
|
|
|
# @param options
|
|
|
|
# @option options [String] :href The value the href attribute must be
|
|
|
|
# @return [Boolean] Whether it exists
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
2010-11-18 18:08:26 -05:00
|
|
|
def has_link?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_selector?(:link, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has no link with the given
|
|
|
|
# text or id.
|
|
|
|
#
|
2010-11-18 18:08:26 -05:00
|
|
|
# @param (see Capybara::Node::Finders#has_link?)
|
2010-08-24 06:37:35 -04:00
|
|
|
# @return [Boolean] Whether it doesn't exist
|
|
|
|
#
|
2010-11-18 18:08:26 -05:00
|
|
|
def has_no_link?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_no_selector?(:link, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has a button with the given
|
|
|
|
# text, value or id.
|
|
|
|
#
|
|
|
|
# @param [String] locator The text, value or id of a button to check for
|
|
|
|
# @return [Boolean] Whether it exists
|
|
|
|
#
|
2013-08-08 19:05:38 -04:00
|
|
|
def has_button?(locator, options={})
|
|
|
|
has_selector?(:button, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has no button with the given
|
|
|
|
# text, value or id.
|
|
|
|
#
|
|
|
|
# @param [String] locator The text, value or id of a button to check for
|
|
|
|
# @return [Boolean] Whether it doesn't exist
|
|
|
|
#
|
2013-08-08 19:05:38 -04:00
|
|
|
def has_no_button?(locator, options={})
|
|
|
|
has_no_selector?(:button, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# 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')
|
|
|
|
#
|
2012-02-29 21:57:05 -05:00
|
|
|
# It is also possible to filter by the field type attribute:
|
|
|
|
#
|
|
|
|
# page.has_field?('Email', :type => 'email')
|
|
|
|
#
|
2013-03-07 12:59:16 -05:00
|
|
|
# Note: 'textarea' and 'select' are valid type values, matching the associated tag names.
|
|
|
|
#
|
2010-08-24 06:37:35 -04:00
|
|
|
# @param [String] locator The label, name or id of a field to check for
|
|
|
|
# @option options [String] :with The text content of the field
|
2012-02-29 21:57:05 -05:00
|
|
|
# @option options [String] :type The type attribute of the field
|
2010-08-24 06:37:35 -04:00
|
|
|
# @return [Boolean] Whether it exists
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_field?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_selector?(:field, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has no form field with the given
|
|
|
|
# label, name or id. See {Capybara::Node::Matchers#has_field?}.
|
|
|
|
#
|
|
|
|
# @param [String] locator The label, name or id of a field to check for
|
|
|
|
# @option options [String] :with The text content of the field
|
2012-02-29 21:57:05 -05:00
|
|
|
# @option options [String] :type The type attribute of the field
|
2010-08-24 06:37:35 -04:00
|
|
|
# @return [Boolean] Whether it doesn't exist
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_no_field?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_no_selector?(:field, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has a radio button or
|
|
|
|
# checkbox with the given label, value or id, that is currently
|
|
|
|
# checked.
|
|
|
|
#
|
|
|
|
# @param [String] locator The label, name or id of a checked field
|
|
|
|
# @return [Boolean] Whether it exists
|
|
|
|
#
|
2013-08-08 21:36:33 -04:00
|
|
|
def has_checked_field?(locator, options={})
|
|
|
|
has_selector?(:field, locator, options.merge(:checked => true))
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2011-03-25 06:35:59 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has no radio button or
|
|
|
|
# checkbox with the given label, value or id, that is currently
|
|
|
|
# checked.
|
|
|
|
#
|
|
|
|
# @param [String] locator The label, name or id of a checked field
|
2013-07-23 17:24:44 -04:00
|
|
|
# @return [Boolean] Whether it doesn't exist
|
2011-03-25 06:35:59 -04:00
|
|
|
#
|
2013-08-08 21:36:33 -04:00
|
|
|
def has_no_checked_field?(locator, options={})
|
|
|
|
has_no_selector?(:field, locator, options.merge(:checked => true))
|
2011-03-25 06:35:59 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has a radio button or
|
|
|
|
# checkbox with the given label, value or id, that is currently
|
|
|
|
# unchecked.
|
|
|
|
#
|
|
|
|
# @param [String] locator The label, name or id of an unchecked field
|
|
|
|
# @return [Boolean] Whether it exists
|
|
|
|
#
|
2013-08-08 21:36:33 -04:00
|
|
|
def has_unchecked_field?(locator, options={})
|
|
|
|
has_selector?(:field, locator, options.merge(:unchecked => true))
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2011-03-25 06:35:59 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has no radio button or
|
|
|
|
# checkbox with the given label, value or id, that is currently
|
|
|
|
# unchecked.
|
|
|
|
#
|
|
|
|
# @param [String] locator The label, name or id of an unchecked field
|
2013-07-23 17:24:44 -04:00
|
|
|
# @return [Boolean] Whether it doesn't exist
|
2011-03-25 06:35:59 -04:00
|
|
|
#
|
2013-08-08 21:36:33 -04:00
|
|
|
def has_no_unchecked_field?(locator, options={})
|
|
|
|
has_no_selector?(:field, locator, options.merge(:unchecked => true))
|
2011-03-25 06:35:59 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# 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'])
|
|
|
|
#
|
2012-03-15 23:14:47 -04:00
|
|
|
# It's also possible to check if the exact set of options exists for
|
2010-08-24 06:37:35 -04:00
|
|
|
# this select box:
|
|
|
|
#
|
2012-03-22 21:24:49 -04:00
|
|
|
# page.has_select?('Language', :options => ['English', 'German', 'Spanish'])
|
|
|
|
#
|
|
|
|
# You can also check for a partial set of options:
|
|
|
|
#
|
|
|
|
# page.has_select?('Language', :with_options => ['English', 'German'])
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
|
|
|
# @param [String] locator The label, name or id of a select box
|
|
|
|
# @option options [Array] :options Options which should be contained in this select box
|
2012-03-22 21:24:49 -04:00
|
|
|
# @option options [Array] :with_options Partial set of options which should be contained in this select box
|
2010-08-24 06:37:35 -04:00
|
|
|
# @option options [String, Array] :selected Options which should be selected
|
|
|
|
# @return [Boolean] Whether it exists
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_select?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_selector?(:select, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has no select field with the
|
|
|
|
# given label, name or id. See {Capybara::Node::Matchers#has_select?}.
|
|
|
|
#
|
|
|
|
# @param (see Capybara::Node::Matchers#has_select?)
|
|
|
|
# @return [Boolean] Whether it doesn't exist
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_no_select?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_no_selector?(:select, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has a table with the given id
|
2012-12-23 10:11:33 -05:00
|
|
|
# or caption:
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
2012-12-23 10:11:33 -05:00
|
|
|
# page.has_table?('People')
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
|
|
|
# @param [String] locator The id or caption of a table
|
|
|
|
# @return [Boolean] Whether it exist
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_table?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_selector?(:table, locator, options)
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
|
2010-08-24 06:37:35 -04:00
|
|
|
##
|
|
|
|
#
|
|
|
|
# Checks if the page or current node has no table with the given id
|
2010-08-27 14:52:06 -04:00
|
|
|
# or caption. See {Capybara::Node::Matchers#has_table?}.
|
2010-08-24 06:37:35 -04:00
|
|
|
#
|
|
|
|
# @param (see Capybara::Node::Matchers#has_table?)
|
|
|
|
# @return [Boolean] Whether it doesn't exist
|
|
|
|
#
|
2010-07-09 20:20:32 -04:00
|
|
|
def has_no_table?(locator, options={})
|
2011-08-27 17:54:55 -04:00
|
|
|
has_no_selector?(:table, locator, options)
|
2010-12-23 13:38:44 -05:00
|
|
|
end
|
2011-10-16 19:46:19 -04:00
|
|
|
|
2012-07-12 11:12:24 -04:00
|
|
|
def ==(other)
|
2012-11-27 00:32:28 -05:00
|
|
|
self.eql?(other) or (other.respond_to?(:base) and base == other.base)
|
2012-07-12 11:12:24 -04:00
|
|
|
end
|
|
|
|
|
2013-03-17 10:48:04 -04:00
|
|
|
private
|
2012-01-02 06:17:15 -05:00
|
|
|
|
2013-03-03 18:04:23 -05:00
|
|
|
def text_found?(*args)
|
2013-03-10 18:55:32 -04:00
|
|
|
type = args.shift if args.first.is_a?(Symbol) or args.first.nil?
|
2013-03-17 10:48:04 -04:00
|
|
|
content, options = args
|
2013-03-03 18:04:23 -05:00
|
|
|
count = Capybara::Helpers.normalize_whitespace(text(type)).scan(Capybara::Helpers.to_regexp(content)).count
|
2013-03-17 10:48:04 -04:00
|
|
|
|
2014-01-17 15:48:18 -05:00
|
|
|
Capybara::Helpers.matches_count?(count, {:minimum=>1}.merge(options || {}))
|
2013-03-03 18:04:23 -05:00
|
|
|
end
|
2010-07-09 20:20:32 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|