Module: Dommy::Rack
- Defined in:
- lib/dommy/rack.rb,
lib/dommy/rack/errors.rb,
lib/dommy/rack/history.rb,
lib/dommy/rack/locator.rb,
lib/dommy/rack/session.rb,
lib/dommy/rack/version.rb,
lib/dommy/rack/response.rb,
lib/dommy/rack/cookie_jar.rb,
lib/dommy/rack/navigation.rb,
lib/dommy/rack/visibility.rb,
lib/dommy/rack/file_upload.rb,
lib/dommy/rack/header_store.rb,
lib/dommy/rack/form_submission.rb,
lib/dommy/rack/request_builder.rb,
lib/dommy/rack/field_interactor.rb
Defined Under Namespace
Modules: FileUpload Classes: AmbiguousElementError, CookieJar, CrossOriginError, ElementNotClickableError, ElementNotFoundError, Error, FieldInteractor, FileNotFoundError, FormSubmission, HeaderStore, History, InvalidFormError, Locator, Navigation, RequestBuilder, Response, Session, TooManyRedirectsError, UnsupportedContentTypeError, UnsupportedURLError
Constant Summary collapse
- VERSION =
"0.8.0"
Class Method Summary collapse
-
.hidden_by_closed_details?(element) ⇒ Boolean
Inside a closed <details>, everything except the <summary> is hidden.
- .hidden_node?(element) ⇒ Boolean
-
.visible?(element) ⇒ Boolean
Simplified visibility check for capybara-style interaction.
Class Method Details
.hidden_by_closed_details?(element) ⇒ Boolean
Inside a closed <details>, everything except the <summary> is hidden.
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/dommy/rack/visibility.rb', line 27 def hidden_by_closed_details?(element) return false unless element.respond_to?(:closest) return false if element.tag_name == "DETAILS" details = element.closest("details") return false if details.nil? || details.has_attribute?("open") summary = element.closest("summary") !(summary && summary.closest("details")&.equal?(details)) end |
.hidden_node?(element) ⇒ Boolean
38 39 40 41 42 43 44 45 |
# File 'lib/dommy/rack/visibility.rb', line 38 def hidden_node?(element) return true if element.has_attribute?("hidden") return true if element.tag_name == "TEMPLATE" return true if element.tag_name == "INPUT" && element.respond_to?(:type) && element.type == "hidden" style = element.get_attribute("style").to_s.downcase style.match?(/display\s*:\s*none/) || style.match?(/visibility\s*:\s*hidden/) end |
.visible?(element) ⇒ Boolean
Simplified visibility check for capybara-style interaction. An element is hidden if it (or an ancestor) is hidden via the ‘hidden` attribute, an inline `display: none` / `visibility: hidden` style, or is an `<input type=“hidden”>`. No CSS cascade / computed style / layout.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/dommy/rack/visibility.rb', line 11 def visible?(element) return false if element.nil? node = element while node.respond_to?(:get_attribute) return false if hidden_node?(node) node = node.respond_to?(:parent_element) ? node.parent_element : nil break if node.nil? end return false if hidden_by_closed_details?(element) true end |