diff --git a/History.txt b/History.txt index 00d632f..e7ae9ce 100644 --- a/History.txt +++ b/History.txt @@ -2,6 +2,9 @@ * Minor enhancements + * When faced with a label with no for attribute, that contains a hidden field + and another field, as can be the case in Rails 2.3's checkbox view, + webrat now locates the non-hidden field. (Luke Melia) * When using Rails 2.3, use Rack::Utils to parse params (Matthew Ford) * Initial Merb and Sinatra compatibility for Selenium mode (Corey Donohoe) * Add application_framework config for Selenium mode to determine how to diff --git a/lib/webrat/core/elements/field.rb b/lib/webrat/core/elements/field.rb index fc3f9ec..8efc24a 100644 --- a/lib/webrat/core/elements/field.rb +++ b/lib/webrat/core/elements/field.rb @@ -15,6 +15,10 @@ module Webrat def self.xpath_search [".//button", ".//input", ".//textarea", ".//select"] end + + def self.xpath_search_excluding_hidden + [".//button", ".//input[ @type != 'hidden']", ".//textarea", ".//select"] + end def self.field_classes @field_classes || [] diff --git a/lib/webrat/core/elements/label.rb b/lib/webrat/core/elements/label.rb index 3f8388b..0450f20 100644 --- a/lib/webrat/core/elements/label.rb +++ b/lib/webrat/core/elements/label.rb @@ -21,7 +21,7 @@ module Webrat def field_element if for_id.blank? - Webrat::XML.xpath_at(@element, *Field.xpath_search) + Webrat::XML.xpath_at(@element, *Field.xpath_search_excluding_hidden) else Webrat::XML.css_search(@session.current_dom, "#" + for_id).first end diff --git a/spec/public/check_spec.rb b/spec/public/check_spec.rb index 4366a03..be12349 100644 --- a/spec/public/check_spec.rb +++ b/spec/public/check_spec.rb @@ -169,4 +169,23 @@ describe "uncheck" do check 'Option 2' click_button end + + it "should uncheck rails style checkboxes nested inside a label" do + with_html <<-HTML + +
+ + +
+ + HTML + webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"}) + uncheck "TOS" + click_button + end + end