Table of Contents

Interface IJSHandle

Namespace
Microsoft.Playwright
Assembly
Microsoft.Playwright.dll

JSHandle represents an in-page JavaScript object. JSHandles can be created with the EvaluateHandleAsync(string, object?) method.

var windowHandle = await page.EvaluateHandleAsync("() => window");

JSHandle prevents the referenced JavaScript object being garbage collected unless the handle is exposed with . 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 EvalOnSelectorAsync(string, string, object?), EvaluateAsync(string, object?) and EvaluateHandleAsync(string, object?) methods.

public interface IJSHandle : IAsyncDisposable

Methods

AsElement()

Returns either null or the object handle itself, if the object handle is an instance of IElementHandle.

IElementHandle? AsElement()

Returns

IElementHandle

EvaluateAsync(string, object)

Task<JsonElement?> EvaluateAsync(string expression, object arg = null)

Parameters

expression string
arg object

Returns

Task<JsonElement?>

EvaluateAsync<T>(string, object?)

Returns the return value of expression.

This method passes this handle as the first argument to expression.

If expression returns a Task, then handle.evaluate would wait for the promise to resolve and return its value.

**Usage**

var tweetHandle = await page.QuerySelectorAsync(".tweet .retweets");
Assert.AreEqual("10 retweets", await tweetHandle.EvaluateAsync("node => node.innerText"));
Task<T> EvaluateAsync<T>(string expression, object? arg = null)

Parameters

expression string

JavaScript expression to be evaluated in the browser context. If the expression evaluates to a function, the function is automatically invoked.

arg object

Optional argument to pass to expression.

Returns

Task<T>

Type Parameters

T

EvaluateHandleAsync(string, object?)

Returns the return value of expression as a IJSHandle.

This method passes this handle as the first argument to expression.

The only difference between jsHandle.evaluate and jsHandle.evaluateHandle is that jsHandle.evaluateHandle returns IJSHandle.

If the function passed to the jsHandle.evaluateHandle returns a Task, then jsHandle.evaluateHandle would wait for the promise to resolve and return its value.

See EvaluateHandleAsync(string, object?) for more details.

Task<IJSHandle> EvaluateHandleAsync(string expression, object? arg = null)

Parameters

expression string

JavaScript expression to be evaluated in the browser context. If the expression evaluates to a function, the function is automatically invoked.

arg object

Optional argument to pass to expression.

Returns

Task<IJSHandle>

GetPropertiesAsync()

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

**Usage**

var handle = await page.EvaluateHandleAsync("() => ({ window, document }");
var properties = await handle.GetPropertiesAsync();
var windowHandle = properties["window"];
var documentHandle = properties["document"];
await handle.DisposeAsync();
Task<Dictionary<string, IJSHandle>> GetPropertiesAsync()

Returns

Task<Dictionary<string, IJSHandle>>

GetPropertyAsync(string)

Fetches a single property from the referenced object.

Task<IJSHandle> GetPropertyAsync(string propertyName)

Parameters

propertyName string

property to get

Returns

Task<IJSHandle>

JsonValueAsync<T>()

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

Task<T> JsonValueAsync<T>()

Returns

Task<T>

Type Parameters

T

Remarks

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.