Sha256: 56c8b94fc05eeac0cd183a0bb05d4edf574dd710db5a7a9e2b2bf5d30ae87b94
Contents?: true
Size: 1.6 KB
Versions: 28
Compression:
Stored size: 1.6 KB
Contents
require 'singleton' class Puppeteer::QueryHandlerManager include Singleton def query_handlers @query_handlers ||= { aria: Puppeteer::AriaQueryHandler.new, } end private def default_handler @default_handler ||= Puppeteer::CustomQueryHandler.new( query_one: '(element, selector) => element.querySelector(selector)', query_all: '(element, selector) => element.querySelectorAll(selector)', ) end class Result def initialize(query_handler:, selector:) @query_handler = query_handler @selector = selector end def query_one(element_handle) @query_handler.query_one(element_handle, @selector) end def wait_for(dom_world, visible:, hidden:, timeout:) @query_handler.wait_for(dom_world, @selector, visible: visible, hidden: hidden, timeout: timeout) end def query_all(element_handle) @query_handler.query_all(element_handle, @selector) end def query_all_array(element_handle) @query_handler.query_all_array(element_handle, @selector) end end def detect_query_handler(selector) unless /^[a-zA-Z]+\// =~ selector return Result.new( query_handler: default_handler, selector: selector, ) end chunk = selector.split("/") name = chunk.shift updated_selector = chunk.join("/") query_handler = query_handlers[name.to_sym] unless query_handler raise ArgumentError.new("Query set to use \"#{name}\", but no query handler of that name was found") end Result.new( query_handler: query_handler, selector: updated_selector, ) end end
Version data entries
28 entries across 28 versions & 1 rubygems