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 @@