diff --git a/lib/capybara/node/finders.rb b/lib/capybara/node/finders.rb index c2992212..6dfb3623 100644 --- a/lib/capybara/node/finders.rb +++ b/lib/capybara/node/finders.rb @@ -27,7 +27,7 @@ module Capybara query = query(*args) synchronize do results = resolve(query) - raise_find_error(query) unless results.length == 1 + query.raise_error!(:find, results) unless results.length == 1 results.first end end @@ -143,12 +143,6 @@ module Capybara end.select { |node| query.matches_filters?(node) } end end - - protected - - def raise_find_error(query) - raise Capybara::ElementNotFound, query.failure_message(:find, self) - end end end end diff --git a/lib/capybara/query.rb b/lib/capybara/query.rb index b8b39f52..dcb03712 100644 --- a/lib/capybara/query.rb +++ b/lib/capybara/query.rb @@ -1,8 +1,9 @@ module Capybara class Query - attr_accessor :selector, :locator, :options, :xpath + attr_accessor :node, :selector, :locator, :options, :xpath def initialize(node, *args) + @node = node @options = if args.last.is_a?(Hash) then args.pop.dup else {} end unless options.has_key?(:visible) @options[:visible] = Capybara.ignore_hidden_elements @@ -20,7 +21,7 @@ module Capybara @xpath = @selector.call(@locator).to_s end - def failure_message(type, node) + def failure_message(type) message = selector.failure_message.call(node, self) if selector.failure_message message ||= options[:message] if type == :assert @@ -31,7 +32,7 @@ module Capybara message end - def negative_failure_message(type, node) + def negative_failure_message(type) "expected #{description} not to return anything" end @@ -55,6 +56,10 @@ module Capybara true end + def raise_error!(type, results) + raise Capybara::ElementNotFound, failure_message(type) + end + def matches_count?(nodes) case when nodes.empty? diff --git a/lib/capybara/rspec/matchers.rb b/lib/capybara/rspec/matchers.rb index 73cc4da1..cc62a9d6 100644 --- a/lib/capybara/rspec/matchers.rb +++ b/lib/capybara/rspec/matchers.rb @@ -16,11 +16,11 @@ module Capybara end def failure_message_for_should - query.failure_message(:assert, @actual) + query.failure_message(:assert) end def failure_message_for_should_not - query.negative_failure_message(:assert, @actual) + query.negative_failure_message(:assert) end def description