Add support for fieldset disabled attribute to rack-test driver

This commit is contained in:
Thomas Walpole 2016-12-29 15:49:36 -08:00
parent f7e537006a
commit 53f304ad32
5 changed files with 41 additions and 3 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::*")[0].disabled?
string_node.disabled? || (find_xpath("parent::optgroup")[0] || find_xpath("parent::select")[0]).disabled?
else
string_node.disabled?
!!(string_node.disabled? || ((fieldset = find_xpath("parent::fieldset")[0]) && fieldset.disabled?))
end
end

View File

@ -100,7 +100,7 @@ Capybara::SpecHelper.spec "#fill_in" do
expect(extract_results(@session)['password']).to eq('supasikrit')
end
it "should fill in a field based on current value", twtw: true do
it "should fill in a field based on current value" do
@session.fill_in(currently_with: 'John', with: 'Thomas')
@session.click_button('awesome')
expect(extract_results(@session)['first_name']).to eq('Thomas')

View File

@ -62,6 +62,7 @@ Capybara::SpecHelper.spec '#find_field' do
context "with :disabled option" do
it "should find disabled fields when true" do
expect(@session.find_field("Disabled Checkbox", disabled: true)[:name]).to eq("form[disabled_checkbox]")
expect(@session.find_field("form_disabled_fieldset_child", disabled: true)[:name]).to eq("form[disabled_fieldset_child]")
end
it "should not find disabled fields when false" do

View File

@ -169,6 +169,19 @@ Capybara::SpecHelper.spec "node" do
expect(@session.find('//select[@id="form_title"]/option[1]')).not_to be_disabled
end
it "should see enabled options in disabled optgroup as disabled" do
@session.visit('/form')
expect(@session.find('//option', text: "A.B.1")).to be_disabled
expect(@session.find('//option', text: "A.2")).not_to be_disabled
end
it "should see inputs in a disabled select 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
it "should be boolean" do
@session.visit('/form')
expect(@session.find('//select[@id="form_disabled_select"]/option').disabled?).to be true

View File

@ -343,6 +343,30 @@ New line after and before textarea tag
</label>
</p>
<p>
<fieldset disabled="disabled">
<input name="form[disabled_fieldset_child]" id="form_disabled_fieldset_child"/>
</fieldset>
</p>
<p>
<fieldset>
<input name="form[enabled_fieldset_child]" id="form_enabled_fieldset_child"/>
</fieldset>
</p>
<p>
<select>
<optgroup label="Level One">
<option> A.1 </option>
<optgroup label="Level Two" disabled="disabled">
<option> A.B.1 </option>
</optgroup>
<option> A.2 </option>
</optgroup>
</select>
</p>
<p>
<input type="button" name="form[fresh]" id="fresh_btn" value="i am fresh"/>
<input type="submit" name="form[awesome]" id="awe123" title="What an Awesome Button" value="awesome"/>