Class: Playwright::JSHandle

Inherits:
PlaywrightApi show all
Defined in:
lib/playwright_api/js_handle.rb

Overview

JSHandle represents an in-page JavaScript object. JSHandles can be created with the [‘method: Page.evaluateHandle`] method.

“‘js const windowHandle = await page.evaluateHandle(() => window); // … “`

JSHandle prevents the referenced JavaScript object being garbage collected unless the handle is exposed with [‘method: JSHandle.dispose`]. JSHandles are auto-disposed when their origin frame gets navigated or the parent context gets destroyed.

JSHandle instances can be used as an argument in [‘method: Page.$eval`], [`method: Page.evaluate`] and

‘method: Page.evaluateHandle`

methods.

Direct Known Subclasses

ChannelOwners::ElementHandle, ElementHandle

Instance Method Summary collapse

Methods inherited from PlaywrightApi

from_channel_owner

Instance Method Details

#as_elementObject

Returns either ‘null` or the object handle itself, if the object handle is an instance of `ElementHandle`.

Raises:

  • (NotImplementedError)


20
21
22
# File 'lib/playwright_api/js_handle.rb', line 20

def as_element
  raise NotImplementedError.new('as_element is not implemented yet.')
end

#disposeObject

The ‘jsHandle.dispose` method stops referencing the element handle.



25
26
27
# File 'lib/playwright_api/js_handle.rb', line 25

def dispose
  wrap_channel_owner(@channel_owner.dispose)
end

#evaluate(pageFunction, arg: nil) ⇒ Object

Returns the return value of ‘pageFunction`

This method passes this handle as the first argument to ‘pageFunction`.

If ‘pageFunction` returns a [Promise], then `handle.evaluate` would wait for the promise to resolve and return its value.

Examples:

“‘js const tweetHandle = await page.$(’.tweet .retweets’); expect(await tweetHandle.evaluate((node, suffix) => node.innerText, ‘ retweets’)).toBe(‘10 retweets’); “‘

Raises:

  • (NotImplementedError)


43
44
45
# File 'lib/playwright_api/js_handle.rb', line 43

def evaluate(pageFunction, arg: nil)
  raise NotImplementedError.new('evaluate is not implemented yet.')
end

#evaluate_handle(pageFunction, arg: nil) ⇒ Object

Returns the return value of ‘pageFunction` as in-page object (JSHandle).

This method passes this handle as the first argument to ‘pageFunction`.

The only difference between ‘jsHandle.evaluate` and `jsHandle.evaluateHandle` is that `jsHandle.evaluateHandle` returns in-page object (JSHandle).

If the function passed to the ‘jsHandle.evaluateHandle` returns a [Promise], then `jsHandle.evaluateHandle` would wait for the promise to resolve and return its value.

See [‘method: Page.evaluateHandle`] for more details.

Raises:

  • (NotImplementedError)


58
59
60
# File 'lib/playwright_api/js_handle.rb', line 58

def evaluate_handle(pageFunction, arg: nil)
  raise NotImplementedError.new('evaluate_handle is not implemented yet.')
end

#get_propertiesObject

The method returns a map with **own property names** as keys and JSHandle instances for the property values.

“‘js const handle = await page.evaluateHandle(() => (document)); const properties = await handle.getProperties(); const windowHandle = properties.get(’window’); const documentHandle = properties.get(‘document’); await handle.dispose(); “‘

Raises:

  • (NotImplementedError)


72
73
74
# File 'lib/playwright_api/js_handle.rb', line 72

def get_properties
  raise NotImplementedError.new('get_properties is not implemented yet.')
end

#get_property(propertyName) ⇒ Object

Fetches a single property from the referenced object.

Raises:

  • (NotImplementedError)


77
78
79
# File 'lib/playwright_api/js_handle.rb', line 77

def get_property(propertyName)
  raise NotImplementedError.new('get_property is not implemented yet.')
end

#json_valueObject

Returns a JSON representation of the object. If the object has a ‘toJSON` function, it **will not be called**.

> NOTE The method will return an empty JSON object if the referenced object is not stringifiable. It will throw an error if the object has circular references.

Raises:

  • (NotImplementedError)


85
86
87
# File 'lib/playwright_api/js_handle.rb', line 85

def json_value
  raise NotImplementedError.new('json_value is not implemented yet.')
end