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.

This commit is contained in:
Luke Melia 2009-03-01 01:44:35 -05:00
parent 740bb293e3
commit 72123c1cec
4 changed files with 27 additions and 1 deletions

View File

@ -2,6 +2,9 @@
* Minor enhancements * 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) * When using Rails 2.3, use Rack::Utils to parse params (Matthew Ford)
* Initial Merb and Sinatra compatibility for Selenium mode (Corey Donohoe) * Initial Merb and Sinatra compatibility for Selenium mode (Corey Donohoe)
* Add application_framework config for Selenium mode to determine how to * Add application_framework config for Selenium mode to determine how to

View File

@ -15,6 +15,10 @@ module Webrat
def self.xpath_search def self.xpath_search
[".//button", ".//input", ".//textarea", ".//select"] [".//button", ".//input", ".//textarea", ".//select"]
end end
def self.xpath_search_excluding_hidden
[".//button", ".//input[ @type != 'hidden']", ".//textarea", ".//select"]
end
def self.field_classes def self.field_classes
@field_classes || [] @field_classes || []

View File

@ -21,7 +21,7 @@ module Webrat
def field_element def field_element
if for_id.blank? if for_id.blank?
Webrat::XML.xpath_at(@element, *Field.xpath_search) Webrat::XML.xpath_at(@element, *Field.xpath_search_excluding_hidden)
else else
Webrat::XML.css_search(@session.current_dom, "#" + for_id).first Webrat::XML.css_search(@session.current_dom, "#" + for_id).first
end end

View File

@ -169,4 +169,23 @@ describe "uncheck" do
check 'Option 2' check 'Option 2'
click_button click_button
end end
it "should uncheck rails style checkboxes nested inside a label" do
with_html <<-HTML
<html>
<form method="get" action="/login">
<label>
TOS
<input name="user[tos]" type="hidden" value="0" />
<input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
</label>
<input type="submit" />
</form>
</html>
HTML
webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
uncheck "TOS"
click_button
end
end end