Class: Puppeteer::RemoteObject
- Inherits:
- 
      Object
      
        - Object
- Puppeteer::RemoteObject
 
- Includes:
- DebugPrint
- Defined in:
- lib/puppeteer/remote_object.rb
Overview
providing #valueFromRemoteObject, #releaseObject
Instance Attribute Summary collapse
- 
  
    
      #sub_type  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute sub_type. 
Instance Method Summary collapse
- 
  
    
      #box_model(client)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    used in ElementHandle#_box_model. 
- 
  
    
      #content_quads(client)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    used in ElementHandle#clickable_point. 
- #converted_arg ⇒ Object
- #evaluate_self(client) ⇒ Future<Puppeteer::RemoteObject|nil>
- 
  
    
      #initialize(payload)  ⇒ RemoteObject 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of RemoteObject. 
- 
  
    
      #node_info(client)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    used in ElementHandle#content_frame, ElementHandle#upload_file. 
- 
  
    
      #properties(client)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    used in JSHandle#properties. 
- 
  
    
      #query_ax_tree(client, accessible_name: nil, role: nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    used in ElementHandle#query_ax_tree. 
- #release(client) ⇒ Object
- 
  
    
      #set_file_input_files(client, files, backend_node_id)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    used in ElementHandle#upload_file. 
- #type_str ⇒ String
- 
  
    
      #value  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    helper#valueFromRemoteObject. 
Methods included from DebugPrint
Constructor Details
#initialize(payload) ⇒ RemoteObject
Returns a new instance of RemoteObject.
| 7 8 9 10 11 12 13 | # File 'lib/puppeteer/remote_object.rb', line 7 def initialize(payload) @object_id = payload['objectId'] @type = payload['type'] @sub_type = payload['subtype'] @unserializable_value = payload['unserializableValue'] @value = payload['value'] end | 
Instance Attribute Details
#sub_type ⇒ Object (readonly)
Returns the value of attribute sub_type.
| 15 16 17 | # File 'lib/puppeteer/remote_object.rb', line 15 def sub_type @sub_type end | 
Instance Method Details
#box_model(client) ⇒ Object
used in ElementHandle#_box_model
| 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | # File 'lib/puppeteer/remote_object.rb', line 82 def box_model(client) result = client.('DOM.getBoxModel', objectId: @object_id) # Firefox returns width/height = 0, content/padding/border/margin = [nil, nil, nil, nil, nil, nil, nil, nil] # while Chrome throws Error(Could not compute box model) model = result['model'] if model['width'] == 0 && model['height'] == 0 && %w(content padding border margin).all? { |key| model[key].all?(&:nil?) } debug_puts('Could not compute box model in Firefox.') return nil end result rescue => err debug_puts(err) nil end | 
#content_quads(client) ⇒ Object
used in ElementHandle#clickable_point
| 77 78 79 | # File 'lib/puppeteer/remote_object.rb', line 77 def content_quads(client) client.('DOM.getContentQuads', objectId: @object_id) end | 
#converted_arg ⇒ Object
| 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | # File 'lib/puppeteer/remote_object.rb', line 155 def converted_arg # ported logic from ExecutionContext#convertArgument # https://github.com/puppeteer/puppeteer/blob/master/lib/ExecutionContext.js # # Original logic: # if (objectHandle._remoteObject.unserializableValue) # return { unserializableValue: objectHandle._remoteObject.unserializableValue }; # if (!objectHandle._remoteObject.objectId) # return { value: objectHandle._remoteObject.value }; # return { objectId: objectHandle._remoteObject.objectId }; if @unserializable_value { unserializableValue: @unserializable_value } elsif @object_id { objectId: @object_id } else { value: value } end end | 
#evaluate_self(client) ⇒ Future<Puppeteer::RemoteObject|nil>
| 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | # File 'lib/puppeteer/remote_object.rb', line 18 def evaluate_self(client) # ported logic from JSHandle#json_value. # original logic: # if (this._remoteObject.objectId) { # const response = await this._client.send('Runtime.callFunctionOn', { # functionDeclaration: 'function() { return this; }', # objectId: this._remoteObject.objectId, # returnByValue: true, # awaitPromise: true, # }); # return helper.valueFromRemoteObject(response.result); # } if @object_id params = { 'functionDeclaration': 'function() { return this; }', 'objectId': @object_id, 'returnByValue': true, 'awaitPromise': true, } response = client.('Runtime.callFunctionOn', params) Puppeteer::RemoteObject.new(response['result']) else nil end end | 
#node_info(client) ⇒ Object
used in ElementHandle#content_frame, ElementHandle#upload_file
| 72 73 74 | # File 'lib/puppeteer/remote_object.rb', line 72 def node_info(client) client.('DOM.describeNode', objectId: @object_id) end | 
#properties(client) ⇒ Object
used in JSHandle#properties
| 62 63 64 65 66 67 68 69 | # File 'lib/puppeteer/remote_object.rb', line 62 def properties(client) # original logic: # const response = await this._client.send('Runtime.getProperties', { # objectId: this._remoteObject.objectId, # ownProperties: true # }); client.('Runtime.getProperties', objectId: @object_id, ownProperties: true) end | 
#query_ax_tree(client, accessible_name: nil, role: nil) ⇒ Object
used in ElementHandle#query_ax_tree
| 101 102 103 104 105 106 107 108 109 110 111 | # File 'lib/puppeteer/remote_object.rb', line 101 def query_ax_tree(client, accessible_name: nil, role: nil) result = client.('Accessibility.queryAXTree', { objectId: @object_id, accessibleName: accessible_name, role: role, }.compact) result['nodes'].reject do |node| node['role']['value'] == 'text' end end | 
#release(client) ⇒ Object
| 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | # File 'lib/puppeteer/remote_object.rb', line 137 def release(client) return unless @object_id begin client.('Runtime.releaseObject', objectId: @object_id, ) rescue => err # Exceptions might happen in case of a page been navigated or closed. # Swallow these since they are harmless and we don't leak anything in this case. debug_puts(err) end nil end | 
#set_file_input_files(client, files, backend_node_id) ⇒ Object
used in ElementHandle#upload_file
| 176 177 178 | # File 'lib/puppeteer/remote_object.rb', line 176 def set_file_input_files(client, files, backend_node_id) client.('DOM.setFileInputFiles', objectId: @object_id, files: files, backendNodeId: backend_node_id) end | 
#type_str ⇒ String
| 47 48 49 50 51 52 53 54 55 56 57 58 59 | # File 'lib/puppeteer/remote_object.rb', line 47 def type_str # used in JSHandle#to_s # original logic: # if (this._remoteObject.objectId) { # const type = this._remoteObject.subtype || this._remoteObject.type; # return 'JSHandle@' + type; # } if @object_id @sub_type || @type else nil end end | 
#value ⇒ Object
helper#valueFromRemoteObject
| 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | # File 'lib/puppeteer/remote_object.rb', line 114 def value if @unserializable_value # if (remoteObject.type === 'bigint' && typeof BigInt !== 'undefined') # return BigInt(remoteObject.unserializableValue.replace('n', '')); # switch (remoteObject.unserializableValue) { # case '-0': # return -0; # case 'NaN': # return NaN; # case 'Infinity': # return Infinity; # case '-Infinity': # return -Infinity; # default: # throw new Error('Unsupported unserializable value: ' + remoteObject.unserializableValue); # } raise NotImplementedError.new('unserializable_value is not implemented yet') else @value end end |