diff --git a/lib/capybara.rb b/lib/capybara.rb index 8de98188..fd547436 100644 --- a/lib/capybara.rb +++ b/lib/capybara.rb @@ -16,7 +16,7 @@ module Capybara class << self attr_accessor :asset_root, :app_host, :run_server, :default_host, :always_include_port - attr_accessor :server_host, :server_port + attr_accessor :server_host, :server_port, :exact attr_accessor :default_selector, :default_wait_time, :ignore_hidden_elements attr_accessor :save_and_open_page_path, :automatic_reload attr_writer :default_driver, :current_driver, :javascript_driver, :session_name diff --git a/lib/capybara/query.rb b/lib/capybara/query.rb index 963ce357..b528cca7 100644 --- a/lib/capybara/query.rb +++ b/lib/capybara/query.rb @@ -11,6 +11,10 @@ module Capybara @options[:visible] = Capybara.ignore_hidden_elements end + unless options.has_key?(:exact) + @options[:exact] = Capybara.exact + end + if args[0].is_a?(Symbol) @selector = Selector.all[args[0]] @locator = args[1] @@ -27,7 +31,6 @@ module Capybara @xpath = @xpath.to_s end - assert_valid_keys! end diff --git a/lib/capybara/spec/session/find_spec.rb b/lib/capybara/spec/session/find_spec.rb index 3fc3759b..1f463681 100644 --- a/lib/capybara/spec/session/find_spec.rb +++ b/lib/capybara/spec/session/find_spec.rb @@ -127,7 +127,12 @@ Capybara::SpecHelper.spec '#find' do end it "defaults to `Capybara.exact`" do - + Capybara.exact = true + expect do + @session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("est_fiel")]) + end.to raise_error(Capybara::ElementNotFound) + Capybara.exact = false + @session.find(:xpath, XPath.descendant(:input)[XPath.attr(:id).is("est_fiel")]) end end diff --git a/lib/capybara/spec/spec_helper.rb b/lib/capybara/spec/spec_helper.rb index 4150652f..30e6a9c7 100644 --- a/lib/capybara/spec/spec_helper.rb +++ b/lib/capybara/spec/spec_helper.rb @@ -19,6 +19,7 @@ module Capybara Capybara.app_host = nil Capybara.default_selector = :xpath Capybara.default_wait_time = 1 + Capybara.exact = false end def filter(requires, metadata)