From eba8eaba409222fa0feaf82684611a09e26b8155 Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Tue, 19 Feb 2013 09:03:26 -0800 Subject: [PATCH] change node and driver api to use find_xpath and find_css --- lib/capybara/driver/base.rb | 6 +++++- lib/capybara/node/finders.rb | 4 ++-- lib/capybara/rack_test/browser.rb | 2 +- lib/capybara/rack_test/driver.rb | 8 ++++++-- lib/capybara/rack_test/node.rb | 18 +++++++++--------- lib/capybara/selenium/driver.rb | 8 ++++++-- lib/capybara/selenium/node.rb | 12 ++++++++---- spec/rack_test_spec.rb | 4 ++-- 8 files changed, 39 insertions(+), 23 deletions(-) diff --git a/lib/capybara/driver/base.rb b/lib/capybara/driver/base.rb index bd830758..83fd58e2 100644 --- a/lib/capybara/driver/base.rb +++ b/lib/capybara/driver/base.rb @@ -7,7 +7,11 @@ class Capybara::Driver::Base raise NotImplementedError end - def find(query_format=:xpath, query) + def find_xpath(query) + raise NotImplementedError + end + + def find_css(query) raise NotImplementedError end diff --git a/lib/capybara/node/finders.rb b/lib/capybara/node/finders.rb index 2c0b73dd..2f4e1c29 100644 --- a/lib/capybara/node/finders.rb +++ b/lib/capybara/node/finders.rb @@ -147,9 +147,9 @@ module Capybara elements = synchronize do # base.find(query.xpath(exact)).map do |node| if query.selector.preferred_format==:css - base.find(:css, query.css) + base.find_css(query.css) else - base.find(:xpath, query.xpath(exact)) + base.find_xpath(query.xpath(exact)) end.map do |node| Capybara::Node::Element.new(session, node, self, query) end diff --git a/lib/capybara/rack_test/browser.rb b/lib/capybara/rack_test/browser.rb index 6219cd68..5c92df8d 100644 --- a/lib/capybara/rack_test/browser.rb +++ b/lib/capybara/rack_test/browser.rb @@ -80,7 +80,7 @@ class Capybara::RackTest::Browser @dom ||= Nokogiri::HTML(html) end - def find(format=:xpath, selector) + def find(format, selector) if format==:css dom.css(selector, Capybara::RackTest::CSSHandlers.new) else diff --git a/lib/capybara/rack_test/driver.rb b/lib/capybara/rack_test/driver.rb index d2c504ee..35c38ffc 100644 --- a/lib/capybara/rack_test/driver.rb +++ b/lib/capybara/rack_test/driver.rb @@ -62,8 +62,12 @@ class Capybara::RackTest::Driver < Capybara::Driver::Base response.status end - def find(format=:xpath, selector) - browser.find(format, selector) + def find_xpath(selector) + browser.find(:xpath, selector) + end + + def find_css(selector) + browser.find(:css,selector) end def html diff --git a/lib/capybara/rack_test/node.rb b/lib/capybara/rack_test/node.rb index 23ec915e..2af07382 100644 --- a/lib/capybara/rack_test/node.rb +++ b/lib/capybara/rack_test/node.rb @@ -29,7 +29,7 @@ class Capybara::RackTest::Node < Capybara::Driver::Node def select_option if select_node['multiple'] != 'multiple' - select_node.find(".//option[@selected]").each { |node| node.native.remove_attribute("selected") } + select_node.find_xpath(".//option[@selected]").each { |node| node.native.remove_attribute("selected") } end native["selected"] = 'selected' end @@ -76,14 +76,14 @@ class Capybara::RackTest::Node < Capybara::Driver::Node native.path end - def find(format=:xpath, locator) - if format==:css - native.css(locator, Capybara::RackTest::CSSHandlers.new) - else - native.xpath(locator) - end.map { |n| self.class.new(driver, n) } + def find_xpath(locator) + native.xpath(locator).map { |n| self.class.new(driver, n) } end - + + def find_css(locator) + native.css(locator, Capybara::RackTest::CSSHandlers.new).map { |n| self.class.new(driver, n) } + end + def ==(other) native == other.native end @@ -112,7 +112,7 @@ private # a reference to the select node if this is an option node def select_node - find('./ancestor::select').first + find_xpath('./ancestor::select').first end def type diff --git a/lib/capybara/selenium/driver.rb b/lib/capybara/selenium/driver.rb index 70d0ee57..36aebc3b 100644 --- a/lib/capybara/selenium/driver.rb +++ b/lib/capybara/selenium/driver.rb @@ -46,8 +46,12 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base browser.current_url end - def find(selector_format=:xpath, selector) - browser.find_elements(selector_format, selector).map { |node| Capybara::Selenium::Node.new(self, node) } + def find_xpath(selector) + browser.find_elements(:xpath, selector).map { |node| Capybara::Selenium::Node.new(self, node) } + end + + def find_css(selector) + browser.find_elements(:css, selector).map { |node| Capybara::Selenium::Node.new(self, node) } end def wait?; true; end diff --git a/lib/capybara/selenium/node.rb b/lib/capybara/selenium/node.rb index 1ba7cd99..8f5c431a 100644 --- a/lib/capybara/selenium/node.rb +++ b/lib/capybara/selenium/node.rb @@ -76,10 +76,14 @@ class Capybara::Selenium::Node < Capybara::Driver::Node alias :checked? :selected? - def find(locator_format=:xpath, locator) - native.find_elements(locator_format, locator).map { |n| self.class.new(driver, n) } + def find_xpath(locator) + native.find_elements(:xpath, locator).map { |n| self.class.new(driver, n) } end - + + def find_css(locator) + native.find_elements(:css, locator).map { |n| self.class.new(driver, n) } + end + def ==(other) native == other.native end @@ -88,6 +92,6 @@ private # a reference to the select node if this is an option node def select_node - find('./ancestor::select').first + find_xpath('./ancestor::select').first end end diff --git a/spec/rack_test_spec.rb b/spec/rack_test_spec.rb index 71dd4567..53ce9e8e 100644 --- a/spec/rack_test_spec.rb +++ b/spec/rack_test_spec.rb @@ -84,14 +84,14 @@ describe Capybara::RackTest::Driver do it 'should keep headers on link clicks' do @driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'}) @driver.visit('/header_links') - @driver.find('.//a').first.click + @driver.find_xpath('.//a').first.click @driver.html.should include('foobar') end it 'should keep headers on form submit' do @driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'}) @driver.visit('/header_links') - @driver.find('.//input').first.click + @driver.find_xpath('.//input').first.click @driver.html.should include('foobar') end