mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
All drivers now support relative searching
There is a bug in Selenium, which causes it to find only descendant nodes, even when asked for a global search. Bug filed here: http://code.google.com/p/selenium/issues/detail?id=403
This commit is contained in:
parent
20e32d9d4a
commit
9a19b758ca
7 changed files with 36 additions and 35 deletions
|
|
@ -77,6 +77,14 @@ class Capybara::Driver::Celerity < Capybara::Driver::Base
|
||||||
node.fire_event(event.to_s)
|
node.fire_event(event.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def all_unfiltered(locator)
|
||||||
|
noko_node = Nokogiri::HTML(driver.body).xpath(node.xpath).first
|
||||||
|
all_nodes = noko_node.xpath(locator).map { |n| n.path }.join(' | ')
|
||||||
|
driver.find(all_nodes)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :app, :rack_server
|
attr_reader :app, :rack_server
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,10 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def all_unfiltered(locator)
|
||||||
|
node.xpath(locator).map { |n| self.class.new(driver, n) }
|
||||||
|
end
|
||||||
|
|
||||||
def type
|
def type
|
||||||
node[:type]
|
node[:type]
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,10 @@ class Capybara::Driver::Selenium < Capybara::Driver::Base
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def all_unfiltered(locator)
|
||||||
|
node.find_elements(:xpath, locator).map { |n| self.class.new(driver, n) }
|
||||||
|
end
|
||||||
|
|
||||||
def type
|
def type
|
||||||
self[:type]
|
self[:type]
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,5 @@ describe Capybara::Driver::Culerity do
|
||||||
it_should_behave_like "driver"
|
it_should_behave_like "driver"
|
||||||
it_should_behave_like "driver with javascript support"
|
it_should_behave_like "driver with javascript support"
|
||||||
it_should_behave_like "driver with header support"
|
it_should_behave_like "driver with header support"
|
||||||
it_should_behave_like "driver with node path support"
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,5 @@ describe Capybara::Driver::RackTest do
|
||||||
|
|
||||||
it_should_behave_like "driver"
|
it_should_behave_like "driver"
|
||||||
it_should_behave_like "driver with header support"
|
it_should_behave_like "driver with header support"
|
||||||
it_should_behave_like "driver with node path support"
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,5 @@ describe Capybara::Driver::Selenium do
|
||||||
|
|
||||||
it_should_behave_like "driver"
|
it_should_behave_like "driver"
|
||||||
it_should_behave_like "driver with javascript support"
|
it_should_behave_like "driver with javascript support"
|
||||||
it_should_behave_like "driver without node path support"
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,26 @@ shared_examples_for 'driver' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "node relative searching" do
|
||||||
|
before do
|
||||||
|
@driver.visit('/tables')
|
||||||
|
@node = @driver.find('//body').first
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should be able to navigate/search child node" do
|
||||||
|
@node.all('//table').size.should == 5
|
||||||
|
@node.find('//form').all('.//table').size.should == 1
|
||||||
|
@node.find('//form').find('.//table//caption').text.should == 'Agent'
|
||||||
|
if @driver.class == Capybara::Driver::Selenium
|
||||||
|
pending("Selenium gets this wrong, see http://code.google.com/p/selenium/issues/detail?id=403") do
|
||||||
|
@node.find('//form').all('//table').size.should == 5
|
||||||
|
end
|
||||||
|
else
|
||||||
|
@node.find('//form').all('//table').size.should == 5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "driver with javascript support" do
|
shared_examples_for "driver with javascript support" do
|
||||||
|
|
@ -97,7 +117,6 @@ shared_examples_for "driver with javascript support" do
|
||||||
@driver.evaluate_script('1+1').should == 2
|
@driver.evaluate_script('1+1').should == 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "driver with header support" do
|
shared_examples_for "driver with header support" do
|
||||||
|
|
@ -106,34 +125,3 @@ shared_examples_for "driver with header support" do
|
||||||
@driver.response_headers['Content-Type'].should == 'text/html'
|
@driver.response_headers['Content-Type'].should == 'text/html'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "driver with node path support" do
|
|
||||||
describe "node relative searching" do
|
|
||||||
before do
|
|
||||||
@driver.visit('/tables')
|
|
||||||
@node = @driver.find('//body').first
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should be able to navigate/search child nodes" do
|
|
||||||
@node.all('//table').size.should == 5
|
|
||||||
@node.find('//form').all('//table').size.should == 1
|
|
||||||
@node.find('//form').find('//table//caption').text.should == 'Agent'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for "driver without node path support" do
|
|
||||||
describe "node relative searching" do
|
|
||||||
before do
|
|
||||||
@driver.visit('/tables')
|
|
||||||
@node = @driver.find('//body').first
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should get NotSupportedByDriverError" do
|
|
||||||
running do
|
|
||||||
@node.all('//form')
|
|
||||||
end.should raise_error(Capybara::NotSupportedByDriverError)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue