Raise error when trying to interact with a disabled form element
This commit is contained in:
parent
7c46a6fed0
commit
33fdf33c89
@ -8,6 +8,7 @@
|
|||||||
* Support relative links, including href="?foo=bar" (Patch from Kyle Hargraves)
|
* Support relative links, including href="?foo=bar" (Patch from Kyle Hargraves)
|
||||||
* Separated Rails-specific code from the Webrat core to make it easier to use Webrat with other environments
|
* Separated Rails-specific code from the Webrat core to make it easier to use Webrat with other environments
|
||||||
* Alias visits as visit, clicks_link as click_link, etc. for better readability
|
* Alias visits as visit, clicks_link as click_link, etc. for better readability
|
||||||
|
* Raise error when trying to interact with a disabled form element (Luke Melia)
|
||||||
|
|
||||||
* Minor enhancements
|
* Minor enhancements
|
||||||
|
|
||||||
|
@ -46,6 +46,14 @@ module Webrat
|
|||||||
@element["alt"] =~ /^\W*#{Regexp.escape(alt.to_s)}/i
|
@element["alt"] =~ /^\W*#{Regexp.escape(alt.to_s)}/i
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def disabled?
|
||||||
|
!@element["disabled"].nil? && @element["disabled"] != 'false'
|
||||||
|
end
|
||||||
|
|
||||||
|
def raise_error_if_disabled
|
||||||
|
raise "Cannot interact with disabled form element (#{self})" if disabled?
|
||||||
|
end
|
||||||
|
|
||||||
def to_param
|
def to_param
|
||||||
value = @value.to_s.gsub('&', '%26')
|
value = @value.to_s.gsub('&', '%26')
|
||||||
param_parser.parse_query_parameters("#{name}=#{value}")
|
param_parser.parse_query_parameters("#{name}=#{value}")
|
||||||
@ -144,6 +152,7 @@ module Webrat
|
|||||||
end
|
end
|
||||||
|
|
||||||
def click
|
def click
|
||||||
|
raise_error_if_disabled
|
||||||
set(@element["value"]) unless @element["name"].blank?
|
set(@element["value"]) unless @element["name"].blank?
|
||||||
@form.submit
|
@form.submit
|
||||||
end
|
end
|
||||||
@ -182,10 +191,12 @@ module Webrat
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check
|
def check
|
||||||
|
raise_error_if_disabled
|
||||||
set(@element["value"] || "on")
|
set(@element["value"] || "on")
|
||||||
end
|
end
|
||||||
|
|
||||||
def uncheck
|
def uncheck
|
||||||
|
raise_error_if_disabled
|
||||||
set(nil)
|
set(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -212,6 +223,7 @@ module Webrat
|
|||||||
end
|
end
|
||||||
|
|
||||||
def choose
|
def choose
|
||||||
|
raise_error_if_disabled
|
||||||
other_options.each do |option|
|
other_options.each do |option|
|
||||||
option.set(nil)
|
option.set(nil)
|
||||||
end
|
end
|
||||||
|
@ -22,7 +22,9 @@ module Webrat
|
|||||||
# <tt>field</tt> can be either the value of a name attribute (i.e. <tt>user[email]</tt>)
|
# <tt>field</tt> can be either the value of a name attribute (i.e. <tt>user[email]</tt>)
|
||||||
# or the text inside a <tt><label></tt> element that points at the <tt><input></tt> field.
|
# or the text inside a <tt><label></tt> element that points at the <tt><input></tt> field.
|
||||||
def fills_in(id_or_name_or_label, options = {})
|
def fills_in(id_or_name_or_label, options = {})
|
||||||
find_field(id_or_name_or_label, TextField, TextareaField, PasswordField).set(options[:with])
|
field = find_field(id_or_name_or_label, TextField, TextareaField, PasswordField)
|
||||||
|
field.raise_error_if_disabled
|
||||||
|
field.set(options[:with])
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :fill_in, :fills_in
|
alias_method :fill_in, :fills_in
|
||||||
|
@ -15,6 +15,7 @@ module Webrat
|
|||||||
end
|
end
|
||||||
|
|
||||||
def choose
|
def choose
|
||||||
|
@select.raise_error_if_disabled
|
||||||
@select.set(value)
|
@select.set(value)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -50,6 +50,16 @@ describe "checks" do
|
|||||||
@session.clicks_button
|
@session.clicks_button
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should fail if the checkbox is disabled" do
|
||||||
|
@session.response_body = <<-EOS
|
||||||
|
<form method="post" action="/login">
|
||||||
|
<input type="checkbox" name="remember_me" disabled="disabled" />
|
||||||
|
<input type="submit" />
|
||||||
|
</form>
|
||||||
|
EOS
|
||||||
|
lambda { @session.checks "remember_me" }.should raise_error
|
||||||
|
end
|
||||||
|
|
||||||
it "should result in a custom value being posted" do
|
it "should result in a custom value being posted" do
|
||||||
@session.response_body = <<-EOS
|
@session.response_body = <<-EOS
|
||||||
<form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
@ -87,6 +97,16 @@ describe "unchecks" do
|
|||||||
lambda { @session.unchecks "remember_me" }.should raise_error
|
lambda { @session.unchecks "remember_me" }.should raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should fail if the checkbox is disabled" do
|
||||||
|
@session.response_body = <<-EOS
|
||||||
|
<form method="post" action="/login">
|
||||||
|
<input type="checkbox" name="remember_me" checked="checked" disabled="disabled" />
|
||||||
|
<input type="submit" />
|
||||||
|
</form>
|
||||||
|
EOS
|
||||||
|
lambda { @session.unchecks "remember_me" }.should raise_error
|
||||||
|
end
|
||||||
|
|
||||||
it "should uncheck rails style checkboxes" do
|
it "should uncheck rails style checkboxes" do
|
||||||
@session.response_body = <<-EOS
|
@session.response_body = <<-EOS
|
||||||
<form method="get" action="/login">
|
<form method="get" action="/login">
|
||||||
|
@ -55,6 +55,17 @@ describe "chooses" do
|
|||||||
@session.clicks_button
|
@session.clicks_button
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should fail if the radio button is disabled" do
|
||||||
|
@session.response_body = <<-EOS
|
||||||
|
<form method="post" action="/login">
|
||||||
|
<input type="radio" name="first_option" disabled="disabled" />
|
||||||
|
<input type="submit" />
|
||||||
|
</form>
|
||||||
|
EOS
|
||||||
|
|
||||||
|
lambda { @session.chooses "first_option" }.should raise_error
|
||||||
|
end
|
||||||
|
|
||||||
it "should result in the value on being posted if not specified" do
|
it "should result in the value on being posted if not specified" do
|
||||||
@session.response_body = <<-EOS
|
@session.response_body = <<-EOS
|
||||||
<form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
|
@ -23,6 +23,17 @@ describe "clicks_button" do
|
|||||||
lambda { @session.clicks_button }.should raise_error
|
lambda { @session.clicks_button }.should raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
it "should fail if button is disabled" do
|
||||||
|
@session.response_body = <<-EOS
|
||||||
|
<form method="get" action="/login">
|
||||||
|
<input type="submit" disabled="disabled" />
|
||||||
|
</form>
|
||||||
|
EOS
|
||||||
|
|
||||||
|
lambda { @session.clicks_button }.should raise_error
|
||||||
|
end
|
||||||
|
|
||||||
it "should default to get method" do
|
it "should default to get method" do
|
||||||
@session.response_body = <<-EOS
|
@session.response_body = <<-EOS
|
||||||
<form action="/login">
|
<form action="/login">
|
||||||
|
@ -39,6 +39,18 @@ describe "fills_in" do
|
|||||||
lambda { @session.fills_in "Email", :with => "foo@example.com" }.should raise_error
|
lambda { @session.fills_in "Email", :with => "foo@example.com" }.should raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should fail if input is disabled" do
|
||||||
|
@session.response_body = <<-EOS
|
||||||
|
<form method="get" action="/login">
|
||||||
|
<label for="user_email">Email</label>
|
||||||
|
<input id="user_email" name="user[email]" type="text" disabled="disabled" />
|
||||||
|
<input type="submit" />
|
||||||
|
</form>
|
||||||
|
EOS
|
||||||
|
|
||||||
|
lambda { @session.fills_in "Email", :with => "foo@example.com" }.should raise_error
|
||||||
|
end
|
||||||
|
|
||||||
it "should allow overriding default form values" do
|
it "should allow overriding default form values" do
|
||||||
@session.response_body = <<-EOS
|
@session.response_body = <<-EOS
|
||||||
<form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
|
@ -36,6 +36,18 @@ describe "selects" do
|
|||||||
lambda { @session.selects "February", :from => "year" }.should raise_error
|
lambda { @session.selects "February", :from => "year" }.should raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
it "should fail if the select is disabled" do
|
||||||
|
@session.response_body = <<-EOS
|
||||||
|
<form method="post" action="/login">
|
||||||
|
<select name="month" disabled="disabled"><option value="1">January</option></select>
|
||||||
|
<input type="submit" />
|
||||||
|
</form>
|
||||||
|
EOS
|
||||||
|
|
||||||
|
lambda { @session.selects "January", :from => "month" }.should raise_error
|
||||||
|
end
|
||||||
|
|
||||||
it "should send value from option" do
|
it "should send value from option" do
|
||||||
@session.response_body = <<-EOS
|
@session.response_body = <<-EOS
|
||||||
<form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
|
Loading…
Reference in New Issue
Block a user