Skip to main content

JSHandle

JSHandle представляет собой объект JavaScript на странице. JSHandles могут быть созданы с помощью метода page.evaluateHandle().

const windowHandle = await page.evaluateHandle(() => window);
// ...

JSHandle предотвращает сборку мусора для ссылочного объекта JavaScript, если только ссылка не будет удалена с помощью jsHandle.dispose(). JSHandles автоматически удаляются, когда их исходный фрейм переходит на другую страницу или родительский контекст уничтожается.

Экземпляры JSHandle могут использоваться в качестве аргумента в методах page.$eval(), page.evaluate() и page.evaluateHandle().


Методы

asElement

Добавлено до версии v1.9 jsHandle.asElement

Возвращает либо null, либо сам объект, если объект является экземпляром [ElementHandle].

Использование

jsHandle.asElement();

Возвращает

  • [null] | [ElementHandle]#

dispose

Добавлено до версии v1.9 jsHandle.dispose

Метод jsHandle.dispose прекращает ссылку на элемент.

Использование

await jsHandle.dispose();

Возвращает

  • [Promise]<[void]>#

evaluate

Добавлено до версии v1.9 jsHandle.evaluate

Возвращает значение, возвращаемое pageFunction.

Этот метод передает этот объект в качестве первого аргумента в pageFunction.

Если pageFunction возвращает [Promise], то handle.evaluate будет ожидать разрешения промиса и вернет его значение.

Использование

const tweetHandle = await page.$('.tweet .retweets');
expect(await tweetHandle.evaluate(node => node.innerText)).toBe('10 retweets');

Аргументы

  • pageFunction [function] | [string]#

    Функция, которая будет выполнена в контексте страницы.

  • arg [EvaluationArgument] (опционально)#

    Опциональный аргумент для передачи в pageFunction.

Возвращает

  • [Promise]<[Serializable]>#

evaluateHandle

Добавлено до версии v1.9 jsHandle.evaluateHandle

Возвращает значение, возвращаемое pageFunction в виде [JSHandle].

Этот метод передает этот объект в качестве первого аргумента в pageFunction.

Единственное отличие между jsHandle.evaluate и jsHandle.evaluateHandle заключается в том, что jsHandle.evaluateHandle возвращает [JSHandle].

Если функция, переданная в jsHandle.evaluateHandle, возвращает [Promise], то jsHandle.evaluateHandle будет ожидать разрешения промиса и вернет его значение.

Смотрите page.evaluateHandle() для получения более подробной информации.

Использование

await jsHandle.evaluateHandle(pageFunction);
await jsHandle.evaluateHandle(pageFunction, arg);

Аргументы

  • pageFunction [function] | [string]#

    Функция, которая будет выполнена в контексте страницы.

  • arg [EvaluationArgument] (опционально)#

    Опциональный аргумент для передачи в pageFunction.

Возвращает

  • [Promise]<[JSHandle]>#

getProperties

Добавлено до версии v1.9 jsHandle.getProperties

Метод возвращает карту с именами собственных свойств в качестве ключей и экземплярами JSHandle для значений свойств.

Использование

const handle = await page.evaluateHandle(() => ({ window, document }));
const properties = await handle.getProperties();
const windowHandle = properties.get('window');
const documentHandle = properties.get('document');
await handle.dispose();

Возвращает

  • [Promise]<[Map]<[string], [JSHandle]>>#

getProperty

Добавлено до версии v1.9 jsHandle.getProperty

Извлекает одно свойство из ссылочного объекта.

Использование

await jsHandle.getProperty(propertyName);

Аргументы

  • propertyName [string]#

    свойство для получения

Возвращает

  • [Promise]<[JSHandle]>#

jsonValue

Добавлено до версии v1.9 jsHandle.jsonValue

Возвращает JSON-представление объекта. Если у объекта есть функция toJSON, она не будет вызвана.

note

Метод вернет пустой JSON-объект, если ссылочный объект не может быть преобразован в строку. Он вызовет ошибку, если объект имеет циклические ссылки.

Использование

await jsHandle.jsonValue();

Возвращает

  • [Promise]<[Serializable]>#