Module: Capybara::Lightpanda::Browser::Finder
- Included in:
- Capybara::Lightpanda::Browser
- Defined in:
- lib/capybara/lightpanda/browser/finder.rb
Overview
Element finding in the three dispatch contexts (document, node- scoped, iframe) plus the shared XPath/CSS find fragments and InvalidSelector translation.
Instance Method Summary collapse
-
#find(method, selector) ⇒ Object
Find elements in the current context (top frame or active frame).
-
#find_within(remote_object_id, method, selector) ⇒ Object
Find child elements within a specific node.
-
#parents_of(remote_object_id) ⇒ Object
Ancestor chain of
remote_object_idfrom parentNode up to (but excluding)document, returned as an array of remote object IDs.
Instance Method Details
#find(method, selector) ⇒ Object
Find elements in the current context (top frame or active frame). Returns an array of remote object ID strings.
12 13 14 15 16 17 18 |
# File 'lib/capybara/lightpanda/browser/finder.rb', line 12 def find(method, selector) if @frame_stack.empty? find_in_document(method, selector) else find_in_frame(method, selector) end end |
#find_within(remote_object_id, method, selector) ⇒ Object
Find child elements within a specific node. Returns an array of remote object ID strings.
Wrapped in with_default_context_wait so a click that triggered a
navigation immediately before the find (e.g. a fill_in following a
link that mutated the DOM) doesn't race against
Runtime.executionContextCreated and surface as
NoExecutionContextError. find_in_document and find_in_frame
already use the same wrapper; find_within was the odd one out.
29 30 31 32 33 34 35 36 |
# File 'lib/capybara/lightpanda/browser/finder.rb', line 29 def find_within(remote_object_id, method, selector) with_default_context_wait do result = call_function_on(remote_object_id, FIND_WITHIN_JS, method, selector, return_by_value: false) extract_node_object_ids(result) end rescue JavaScriptError => e raise_invalid_selector(e, method, selector) end |
#parents_of(remote_object_id) ⇒ Object
Ancestor chain of remote_object_id from parentNode up to (but
excluding) document, returned as an array of remote object IDs.
Mirrors Cuprite's JS parents helper. Same with_default_context_wait
wrapping as find_within — same race window applies.
42 43 44 45 46 47 |
# File 'lib/capybara/lightpanda/browser/finder.rb', line 42 def parents_of(remote_object_id) with_default_context_wait do result = call_function_on(remote_object_id, PARENTS_JS, return_by_value: false) extract_node_object_ids(result) end end |