YusukeIwaki / puppeteer-ruby

A Ruby port of Puppeteer
Apache License 2.0
284 stars 41 forks source link

Support for `>>>` and `>>>>` combinators as well as P-selectors #332

Open dipth opened 3 months ago

dipth commented 3 months ago

It seems like >>> and >>>> combinators as well as p-selectors are not supported.

https://pptr.dev/guides/page-interactions#-and--combinators https://pptr.dev/guides/page-interactions#p-selectors

(ruby) @page.wait_for_selector('con-app >>> epaas-consent-drawer-shell')
eval error: Evaluation failed: {"exceptionId"=>74, "text"=>"Uncaught (in promise)", "lineNumber"=>0, "columnNumber"=>0, "exception"=>{"type"=>"object", "subtype"=>"error", "className"=>"DOMException", "description"=>"DOMException: Failed to execute 'querySelector' on 'Document': 'con-app >>> epaas-consent-drawer-shell' is not a valid selector.\n    at predicateQueryHandler (eval at _ (:2:23), <anonymous>:4:66)\n    at _ (eval at _ (:2:23), <anonymous>:5:24)\n    at eval (eval at _ (:2:23), <anonymous>:29:2)\n    at pollMutation (pprt://__puppeteer_evaluation_script__:17:31)\n    at _ (pprt://__puppeteer_evaluation_script__:10:22)", "objectId"=>"-7655278720377049540.4.2", "preview"=>{"type"=>"object", "subtype"=>"error", "description"=>"DOMException: Failed to execute 'querySelector' on 'Document': 'con-app >>> epaas-consent-drawer-shell' is not a valid selector.\n    at predicateQueryHandler (eval at _ (:2:23), <anonymous>:4:66)\n    at _ (eval at _ (:2:23), <anonymous>:5:24)\n    at eval (eval at _ (:2:23), <anonymous>:29:2)\n    at pollMutation (pprt://__puppeteer_evaluation_script__:17:31)\n    at _ (pprt://__puppeteer_evaluation_script__:10:22)", "overflow"=>false, "properties"=>[{"name"=>"stack", "type"=>"accessor"}, {"name"=>"code", "type"=>"number", "value"=>"12"}, {"name"=>"name", "type"=>"string", "value"=>"SyntaxError"}, {"name"=>"message", "type"=>"string", "value"=>"Failed to execute 'querySelector' on 'Document': '…as-consent-drawer-shell' is not a valid selector."}]}}}
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/execution_context.rb:122:in `evaluate_with'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/execution_context.rb:199:in `evaluate_internal'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/execution_context.rb:39:in `evaluate_handle'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/wait_task.rb:70:in `rerun'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/define_async_method.rb:67:in `call'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/define_async_method.rb:67:in `block (2 levels) in define_async_method'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:1593:in `evaluate_to'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:1776:in `block in on_resolvable'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:359:in `run_task'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:350:in `block (3 levels) in create_worker'
  <internal:kernel>:187:in `loop'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:341:in `block (2 levels) in create_worker'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `catch'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `block in create_worker'
(ruby) @page.wait_for_selector('div ::-p-text(My name is Jun)')
eval error: Evaluation failed: {"exceptionId"=>75, "text"=>"Uncaught (in promise)", "lineNumber"=>0, "columnNumber"=>0, "exception"=>{"type"=>"object", "subtype"=>"error", "className"=>"DOMException", "description"=>"DOMException: Failed to execute 'querySelector' on 'Document': 'div ::-p-text(My name is Jun)' is not a valid selector.\n    at predicateQueryHandler (eval at _ (:2:23), <anonymous>:4:66)\n    at _ (eval at _ (:2:23), <anonymous>:5:24)\n    at eval (eval at _ (:2:23), <anonymous>:29:2)\n    at pollMutation (pprt://__puppeteer_evaluation_script__:17:31)\n    at _ (pprt://__puppeteer_evaluation_script__:10:22)", "objectId"=>"-7655278720377049540.4.4", "preview"=>{"type"=>"object", "subtype"=>"error", "description"=>"DOMException: Failed to execute 'querySelector' on 'Document': 'div ::-p-text(My name is Jun)' is not a valid selector.\n    at predicateQueryHandler (eval at _ (:2:23), <anonymous>:4:66)\n    at _ (eval at _ (:2:23), <anonymous>:5:24)\n    at eval (eval at _ (:2:23), <anonymous>:29:2)\n    at pollMutation (pprt://__puppeteer_evaluation_script__:17:31)\n    at _ (pprt://__puppeteer_evaluation_script__:10:22)", "overflow"=>false, "properties"=>[{"name"=>"stack", "type"=>"accessor"}, {"name"=>"code", "type"=>"number", "value"=>"12"}, {"name"=>"name", "type"=>"string", "value"=>"SyntaxError"}, {"name"=>"message", "type"=>"string", "value"=>"Failed to execute 'querySelector' on 'Document': '…-p-text(My name is Jun)' is not a valid selector."}]}}}
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/execution_context.rb:122:in `evaluate_with'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/execution_context.rb:199:in `evaluate_internal'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/execution_context.rb:39:in `evaluate_handle'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/wait_task.rb:70:in `rerun'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/define_async_method.rb:67:in `call'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/puppeteer-ruby-0.45.4/lib/puppeteer/define_async_method.rb:67:in `block (2 levels) in define_async_method'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:1593:in `evaluate_to'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:1776:in `block in on_resolvable'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:359:in `run_task'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:350:in `block (3 levels) in create_worker'
  <internal:kernel>:187:in `loop'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:341:in `block (2 levels) in create_worker'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `catch'
  /Users/dipth/.asdf/installs/ruby/3.3.1/lib/ruby/gems/3.3.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `block in create_worker'

Is there any plans for supporting these features from puppeteer?