From 53f304ad325f59ccd623f3f8aeedc1738e86c65a Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Thu, 29 Dec 2016 15:49:36 -0800 Subject: [PATCH] Add support for fieldset disabled attribute to rack-test driver --- lib/capybara/rack_test/node.rb | 4 ++-- lib/capybara/spec/session/fill_in_spec.rb | 2 +- lib/capybara/spec/session/find_field_spec.rb | 1 + lib/capybara/spec/session/node_spec.rb | 13 +++++++++++ lib/capybara/spec/views/form.erb | 24 ++++++++++++++++++++ 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/lib/capybara/rack_test/node.rb b/lib/capybara/rack_test/node.rb index 0a142920..ff8be6b2 100644 --- a/lib/capybara/rack_test/node.rb +++ b/lib/capybara/rack_test/node.rb @@ -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 diff --git a/lib/capybara/spec/session/fill_in_spec.rb b/lib/capybara/spec/session/fill_in_spec.rb index ddc11f23..d6124625 100644 --- a/lib/capybara/spec/session/fill_in_spec.rb +++ b/lib/capybara/spec/session/fill_in_spec.rb @@ -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') diff --git a/lib/capybara/spec/session/find_field_spec.rb b/lib/capybara/spec/session/find_field_spec.rb index 851e85aa..5720eab9 100644 --- a/lib/capybara/spec/session/find_field_spec.rb +++ b/lib/capybara/spec/session/find_field_spec.rb @@ -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 diff --git a/lib/capybara/spec/session/node_spec.rb b/lib/capybara/spec/session/node_spec.rb index 77049e3e..d7d78c30 100644 --- a/lib/capybara/spec/session/node_spec.rb +++ b/lib/capybara/spec/session/node_spec.rb @@ -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 diff --git a/lib/capybara/spec/views/form.erb b/lib/capybara/spec/views/form.erb index 6fa96046..29e60f75 100644 --- a/lib/capybara/spec/views/form.erb +++ b/lib/capybara/spec/views/form.erb @@ -343,6 +343,30 @@ New line after and before textarea tag

+

+

+ +
+

+ +

+

+ +
+

+ +

+ +

+