From 8f6fe3e55330bd2b5f4a4c9ff0bbb866a62e1451 Mon Sep 17 00:00:00 2001 From: Rob Holland Date: Fri, 4 Dec 2009 11:01:50 +0000 Subject: [PATCH] Ensure that exact label matches are favoured over partial matches. --- lib/capybara/session.rb | 2 +- spec/session_spec.rb | 6 ++++++ spec/views/form.erb | 9 +++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index c109052e..7ad2d715 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -175,7 +175,7 @@ module Capybara def find_field_by_label(locator, *kinds) kinds.each do |kind| - label = find("//label[contains(.,'#{locator}')]").first + label = find("//label[text()='#{locator}']").first || find("//label[contains(.,'#{locator}')]").first if label element = find_field_by_id(label[:for], kind) return element if element diff --git a/spec/session_spec.rb b/spec/session_spec.rb index f2c7388f..58fac77f 100644 --- a/spec/session_spec.rb +++ b/spec/session_spec.rb @@ -205,6 +205,12 @@ shared_examples_for "session" do extract_results(@session)['first_name'].should == 'Harry' end + it "should favour exact label matches over partial matches" do + @session.fill_in('Name', :with => 'Harry Jones') + @session.click_button('awesome') + extract_results(@session)['name'].should == 'Harry Jones' + end + it "should fill in a textarea by id" do @session.fill_in('form_description', :with => 'Texty text') @session.click_button('awesome') diff --git a/spec/views/form.erb b/spec/views/form.erb index b6ffcef4..bb303904 100644 --- a/spec/views/form.erb +++ b/spec/views/form.erb @@ -11,6 +11,11 @@

+

+ + +

+

@@ -102,8 +107,8 @@

- - + +