elements in first legend of a disabled fieldset should not be disabled

This commit is contained in:
Thomas Walpole 2017-01-03 13:45:49 -08:00
parent 920848e229
commit 8063472a37
4 changed files with 29 additions and 14 deletions

View File

@ -91,9 +91,9 @@ class Capybara::RackTest::Node < Capybara::Driver::Node
def disabled?
if %w(option optgroup).include? tag_name
string_node.disabled? || (find_xpath("parent::optgroup")[0] || find_xpath("parent::select")[0]).disabled?
string_node.disabled? || find_xpath("parent::*[self::optgroup or self::select]")[0].disabled?
else
!!(string_node.disabled? || find_xpath("ancestor::fieldset[@disabled]")[0])
string_node.disabled? || !find_xpath("parent::fieldset[@disabled] | ancestor::*[not(self::legend) or preceding-sibling::legend][parent::fieldset[@disabled]]").empty?
end
end

View File

@ -141,9 +141,9 @@ class Capybara::Selenium::Node < Capybara::Driver::Node
# workaround for selenium-webdriver/geckodriver reporting elements as enabled when they are nested in disabling elements
if driver.marionette?
if %w(option optgroup).include? tag_name
!native.enabled? || (find_xpath("parent::optgroup")[0] || find_xpath("parent::select")[0]).disabled?
!native.enabled? || find_xpath("parent::*[self::optgroup or self::select]")[0].disabled?
else
!!(!native.enabled? || find_xpath("ancestor::fieldset[@disabled]")[0])
!native.enabled? || !find_xpath("parent::fieldset[@disabled] | ancestor::*[not(self::legend) or preceding-sibling::legend][parent::fieldset[@disabled]]").empty?
end
else
!native.enabled?

View File

@ -176,17 +176,25 @@ Capybara::SpecHelper.spec "node" do
expect(@session.find('//option', text: "A.2")).not_to be_disabled
end
it "should see inputs in a disabled fieldset as disabled" do
@session.visit('/form')
expect(@session.find('//input[@id="form_disabled_fieldset_child"]')).to be_disabled
expect(@session.find('//input[@id="form_enabled_fieldset_child"]')).not_to be_disabled
end
context "in a disabled fieldset" do
# https://html.spec.whatwg.org/#the-fieldset-element
it "should see elements not in first legend as disabled" do
@session.visit('/form')
expect(@session.find('//input[@id="form_disabled_fieldset_child"]')).to be_disabled
expect(@session.find('//input[@id="form_disabled_fieldset_second_legend_child"]')).to be_disabled
expect(@session.find('//input[@id="form_enabled_fieldset_child"]')).not_to be_disabled
end
it "should sees options in a disabled fieldset as disabled" do
@session.visit('/form')
expect(@session.find('//option', text: 'Disabled Child Option')).to be_disabled
end
it "should see elements in first legend as enabled" do
@session.visit('/form')
expect(@session.find('//input[@id="form_disabled_fieldset_legend_child"]')).not_to be_disabled
end
it "should sees options not in first legend as disabled" do
@session.visit('/form')
expect(@session.find('//option', text: 'Disabled Child Option')).to be_disabled
end
end
it "should be boolean" do
@session.visit('/form')
expect(@session.find('//select[@id="form_disabled_select"]/option').disabled?).to be true

View File

@ -363,7 +363,14 @@ New line after and before textarea tag
</fieldset>
<fieldset disabled="disabled">
<legend>Nested Disabled</legend>
<legend>
Nested Disabled
<input type="checkbox" name="form[disabled_fieldeset_legend_child]" id="form_disabled_fieldset_legend_child"/>
</legend>
<legend>
Another Legend
<input type="checkbox" name="form[disabled_fieldeset_second_legend_child]" id="form_disabled_fieldset_second_legend_child"/>
</legend>
<p>
<fieldset>
<input name="form[disabled_fieldset_descendant]" id="form_disabled_fieldset_descendant"/>