From 52331c872102d9a0f6d3307ba08f3d96226fa29d Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Thu, 18 Jul 2019 14:53:01 -0700 Subject: [PATCH] Check elements are visible when details is opened --- lib/capybara/node/simple.rb | 1 + lib/capybara/spec/session/node_spec.rb | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/capybara/node/simple.rb b/lib/capybara/node/simple.rb index ed5dc687..cd55a412 100644 --- a/lib/capybara/node/simple.rb +++ b/lib/capybara/node/simple.rb @@ -103,6 +103,7 @@ module Capybara def visible?(check_ancestors = true) return false if (tag_name == 'input') && (native[:type] == 'hidden') return false if tag_name == 'template' + if check_ancestors !find_xpath(VISIBILITY_XPATH) else diff --git a/lib/capybara/spec/session/node_spec.rb b/lib/capybara/spec/session/node_spec.rb index 6d509dcf..3ff160b7 100644 --- a/lib/capybara/spec/session/node_spec.rb +++ b/lib/capybara/spec/session/node_spec.rb @@ -260,11 +260,14 @@ Capybara::SpecHelper.spec 'node' do end it 'details non-summary descendants should be non-visible' do - # expect(@session.find(:css, 'details ul')).not_to be_visible @session.first(:css, 'details li').visible? - @session.all(:css, 'details > *:not(summary), details > *:not(summary) *', minimum: 2).each do |el| - expect(el).not_to be_visible - end + descendants = @session.all(:css, 'details > *:not(summary), details > *:not(summary) *', minimum: 2) + expect(descendants).not_to include(be_visible) + end + + it 'sees open details as visible', requires: [:js] do + @session.find(:css, 'details').click + expect(@session.all(:css, 'details *')).to all(be_visible) end end